27,382
社区成员
发帖
与我相关
我的任务
分享
#include<reg52.h>
sbit pwm=P2^0;
sbit key1=P0^0;
sbit key2=P0^1;
bit keybuf1=1;
bit backup1=1;
bit keybuf2=1;
bit backup2=1;
unsigned int m=250;
unsigned int cnt=0;
/*void delay(unsigned int i)
{
while(i--);
} */
void InterruptTimer0() interrupt 1
{
TH0=(65536-10)/256;
TL0=(65536-10)%256;
cnt++;
}
void main()
{
EA=1;
ET0=1; //定时器0中断使能
TMOD=0x01;//定时0工作在方式1,1ms中断1次
TH0=(65536-10)/256;
TL0=(65536-10)%256;
TR0=1;
while(1)
{
if(cnt<m)
pwm=1;
else
pwm=0;
if(cnt==500)
{
cnt=0;
}
}
}
把中断里的东西移到中断外面去运行,这样中断就可以在周期之内运行完毕了,不会影响下次中断.
如果你还闲误差太大.那只有计算一下调用函数浪费的时间了,然后在定时器里把这个时间平掉.不过你做的再准也白费,proteus本身它就不是准的.