📄 pwm.c
字号:
/*
利用定时器,在P2_5上输出PWM波。为了演示,使占空比从1%~99%再从99%~1%连续变化。频
率约为200Hz。可以用于用于直流电机的驱动等方面。
*/
#include "STC12C5410AD.H"
unsigned char DutyCycle; //占空比,0~100
bit UpDown; //此时的占空比是增加还值减少的判断位,增加为1
void timer0() interrupt 1{
if(P2_5){ //若P2_5=1
P2_5=0;
TH0=0xEC+DutyCycle/5; //这些初装值需要经过仔细的计算,具体计算方法牵涉到占空比的定义、定时器的工作方式等,此处不赘述。由于TL和TH相比对计时结果影响不大,在计时要求不是很精确的时候可以不设TL
}
else{ //若P2_5=0
P2_5=1;
TH0=0xFF-DutyCycle/5;
}
}
void timer1() interrupt 3{
if(UpDown){ //若当前占空比增加
if(DutyCycle==99){
DutyCycle=98;
UpDown=0;
}
else DutyCycle++;
}
else{ //若当前占空比减少
if(DutyCycle==1){
DutyCycle=2;
UpDown=1;
}
else DutyCycle--;
}
TH1=0xC3;
}
void main(){
DutyCycle=0; //占空比定义为0%
UpDown=1; //占空比增加
TMOD=0x11; //
TH0=0xFF-DutyCycle/5;
TH1=0xC3;
TL1=0;
PT1=1; //设置T1中断为高优先级
ET0=1; //允许T0中断
ET1=1; //允许T1中断
EA=1; //CPU开中断
TR0=1; //启动T0
TR1=1; //启动T1
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -