我在51上设置了定时器0工作方式1和定时器1工作方式2,为什么定时器0的时间被拉长了呢?

2025-02-28 02:44:47
推荐回答(3个)
回答1:

造成定时器0定时时间被拉长,可能有如下几种情况:

采用中断方式:
1、定时器0中断优先级不高,其它高级别中断程序执行时,适逢定时器0中断产生,由于级别不够须等待更高级别中断执行完,由此造成时间拉长。
2、程序中其它地方有诸如TR0=0(汇编:CLR TR0)之类的语句,使得定时器0的定时计数被延长

采用查询方式:
如果是采用查询TF0的模式,那出现此问题的可能型就很大了,比如程序中有长时间的延时,等执行到检测TF0状态的语句时,定时器其实早就到时了,只是你没来得及处理而已,表现好像是被拉长了。

回答2:

进入了 定时器1工作方式2,的中断函数,如果较长时间不退出,就会错过T0的定时中断。

回答3:

不会发生这样的情况的
void Timer_Init()
{
TMOD = 0X21;
TH0 = 0XFC; //12M晶振 1毫秒
TL0 = 0XB8;
TH1 = 0X3C; //50毫秒
TL1 = 0XB0;
TR0 = TR1 = 1;
ET0 = ET1 = 1;
EA = 1;
}
方式1在中断函数里面要对TH,TL重新赋值
方式2不需要重新赋值,
你再仔细检查一下你的程序吧