27,377
社区成员
发帖
与我相关
我的任务
分享
//50ms定时
void main(void)
{
TMOD = 0x01; //配置方式
TH0 = 0x3C; //计数时间
TL0 = 0xB0;
TR0 = 1; //开启定时器
EA = 1; //全局中断打开
ET0 = 1; //定时器0中断打开
for(;;)
}
void Timer0_ISR(void) intterupt 1 //中断服务程序
{
TH0 = 0x3C; //计数时间
TL0 = 0xB0;
P1 = 0x11; //定时到,要执行的动作
}
问题1 定时器是否工作
是看启动位 TR0 TR1,所以在主程序main里面打开的话 ,定时器溢出后是会继续计数的
而是否允许定时溢出中断的输出 是看中断允许位有没有开放。
所以定时器打开和允许中断是2个概念
不能因为在中断处理程序里 就以为定时器停了
问题2
定时器溢出后是会继续计数,从哪个值开始呢:
如果是自动重装初值的,中断处理的时间,基本不影响定时器准确计时
如在中断里手动重装的,因为有转到中断处理的时间,,所以要考虑计时误差