描述:
本来定时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多微秒,进中断函数还要消耗很长时间,你这个波形真的是太正常了.
        

