#include<reg52.h>
#define uint unsigned int
sbit pwm=P2^0;//定义P2.0口为PWM输出口
uint num,end,jd;//定义高电平、总时间、角度标识
void main()//主程序
{
TMOD=17;//设置定时器T0、T1工作在方式一
TH0=(65535-92)/256;//T0定时为0.1MS
TL0=(65535-92)%256;
TH1=(65535-18349)/256;//T1定时为20MS
TL1=(65535-18349)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
jd=10;
num=0;
if(end>3000)//如果T1定时器中断次数达到3000次,也就是1分钟,程序将停止运行
{
EA=0;
while(1);
}
}
void time1()interrupt 1
{
TH0=(65535-92)/256;
TL0=(65535-92)%256;
num++;//T0每中断一次,高电平标识加1,当大于角度标识时,PWM置于低电平,同时关掉T0中断
if(num>jd)
{
pwm=0;
num=0;
TR0=0;
}
}
void time3()interrupt 3
{
TH1=(65535-18349)/256;
TL1=(65535-18349)%256;
jd++;
end++;
TR0=1;
pwm=1;//T1每中断一次,将PWM重新置为高电平
if(jd>22)//当角度标识大于22时,也就是高电平时间大于2.2MS时,将角度标识重新置为10,也就是1MS
{
jd=10;
}
}
|