|
本帖最后由 明日香 于 2021-1-11 15:11 編輯
這是我寫的程序,任選一個IO口P21,讓它輸出PWM,那么,如何讓它輸出從低到高,不同占空比的PWM波呢?比如占空比從0開始不斷提升到90%這樣
#include <stc12c5a.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
/*用定時器T0來控制頻率,定時器T1來控制占空比*/
/*T0中斷讓一個IO口輸出高電平,T1讓IO口輸出低電平*/
/*改變T0初值就可以改變頻率,改變T1初值就可以改變占空比*/
/*機器周期為1us,設(shè)定頻率為50HZ,則周期為20ms
要定時20ms,設(shè)置中斷基準(zhǔn)為0.02ms,中斷1000次為一個周期
0.02ms/1us=20,初始值65535-20+1=FFEC*/
sbit PWM=P2^1;//P21輸出PWM波
uchar time; //占空比
void time0init()
{
TMOD=0X01;//定時器0,工作方式1,16位定時器
TH0=0XFF;
TL0=0XEC;//定時0.02ms
ET0=1;
EA=1;
TR0=1;//開啟定時器
}
void timer0() interrupt 1
{
TH0=0XFF;
TL0=0XEC;
time++;
}
void main()
{
time0init();
while(1)
{
if(time>1000)//PWM周期為0.02ms*1000=20ms
time=0;
if(time<10)//占空比為1%
PWM=1;
else if(time>=10)
PWM=0;
}
}
|
|