51单片机 定时器问题!

例如 单片机的T0 到了预设值,溢出,这时 TF0 应为1. 直到有中断响应 硬件才把TF0 变为0,如果T0的中断没有开,TF0将一直保持1,可以编程清空。
问题是: 当TF0变成1 后,T0 还继续工作吗?因为虽然溢出 TL0 和TH0中的值为0,但是由于此时TR0 还为1,有理由 T0还是继续计脉冲累加的!只不过从0开始累加而已。
如果 我想 让T0在定时满时,再次重复上次定时,是不是 在T0中断程序的开始 就给TH0 和TL0 赋值,赋值结束 后T0就开始工作了

跟你选用的模式有关,模式2是自动装载的,当发生溢出时,自动装载 TL0=TH0 且在继续计时,响不响应中断是你程序的事,计不计时是计时器的事,模式1等手工装载模式,在发生溢出后其实它还在跑着,的确是从0从始,但你得及时响应中断并关了计时主动装载计时器数值,而后,开启计时
看我一个例子:
//定时器1中断入口 TMOD= 0x11
void timer1() interrupt 3 //using 2
{
TR1 = 0; //先停计时
TH1 = 0xF5; // 32M HZ 8052
TL1 = 0xA2; // 1毫秒/次 重新计数 从中断处理到再次开始计时约占用13个指令周期
TR1 = 1;//再次开始计时 最后还是有千分之几的误差 可能是另一个中断干扰的

++ TIMESCONT; //当前毫秒数
TICK_FLAG = 1;
if ( TIMESCONT >= 1000 )
{
TIMESCONT = 0;
runTimeSec ++;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-23
当TF0变成1 后,T0 还继续工作.
想让T0在定时满时,再次重复上次定时,应该停止计数,并读取TH0 和TL0 ,计算由于后面几个指令产生是的附加计数值,再赋值给TH0 和TL0 赋值合适的值,启动计数后T0就开始工作了。
第2个回答  2011-12-23
是的,你只要中断子函数中第一条语句就赋初值即可。
第3个回答  2011-12-23
那就在初始化中把TR0置一,在定时函数中写你的初值