描述:
本来定时0.01ms产生中断,计数500不应该是5ms一个周期吗,为什么仿真时候得不到5ms一个周期,是因为定时越小精度受影响和单片机语句运行时间吗,求问大神,以下是我的代码:
#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++;
if(cnt<m)
pwm=1;
else
pwm=0;
if(cnt==500)
{
cnt=0;
}
}
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) ;
}
解决方案1:
用模式2,定时器自动重装载模式 , 从硬件上消除累计误差
16位 用定时器2
且proteus仿真的时间,一分钟能差好几秒. 比正常时间慢很多,而且,,你的处理函数时间太长了.那么多语句.中断10微秒来一次,在你中断里就运行了10多微秒,进中断函数还要消耗很长时间,你这个波形真的是太正常了.