求教下 定时中断服务程序的定时器重新开始计时.是赋值完之后就开始重新计时? 还是退
void Timer0Interrupt(void) interrupt 1{
TH0 =0x63;
TL0 =0x18;
timer++;
//add your code here!
}
有没有必要 先关闭定时器 重新赋值 然后开启定时器 如果要可靠,应该先关闭,重新赋值 然后开启 回复【1楼】gwdong
-----------------------------------------------------------------------
嗯 这样是可靠 但是我看别人的程序大家都没有 这样做 所以还是先了解上面的原因先 嘻嘻 前辈们 真心求教呀 回复【3楼】wuzhisheng2007
-----------------------------------------------------------------------
真心求教呀 如果要可靠,应该先关闭,重新赋值 然后开启
========================================
这说法是对的。
因为你要赋值的定时器是16位的,在你赋值的过程中,定时器是一直在动的。
在赋完高位未赋低位时,如果此时低位有进位,就会造成此次赋值出错(变成了0x6418)。
但这情况一般不会出现,因此大家都不怎么理它。 高位手动加载,低位自动加载。 回复【5楼】lwen512
-----------------------------------------------------------------------
嗯 我问题问的不好 有点离题了 我重新发下
void Timer0Interrupt(void) interrupt 1
{
TH0 =0x63;
TL0 =0x18; /*********//这里赋值好了 就开始计时吗?????
timer++;
} /*********//还是退出了才开始计时?????? 自己做实验验证下就是了,好像没必要问啊
比如说定时器中断里面读一次计数器的值,软件延时一下再读一下计数器的值,对比一下有没改变就是了
以前去买一些元件的时候,就一个开关,对着老板一直问,哪边是常触的,老板直接拿出万用表测给我看
其实很多事情是可以自已验证的 定时器是一直在计的,只是溢出后从0开始计,就算在中断中不赋值,等计完0x10000之后也会再次中断。 回复【7楼】 wuzhisheng2007
======================
如9楼说,定时器是一直在计时的。赋完值就开始计时了。 计时器真忙! 回复【7楼】wuzhisheng2007
-----------------------------------------------------------------------
是的 验证也是个方法 不过我还是选择先问问再自己验证 毕竟听听大家的观点是很好的 EA=1;
ET0=1;
TR0=1;此时定时器就开始计时 应该是赋完值就计时的
楼主可以做个试验,让定时周期是2毫秒,然后中断服务程序的执行时间大于2毫秒,比如5毫秒
楼主会看到程序一直卡在中断服务里。我当年刚学单片机时就犯过这个错误。
这说明程序不用返回就开始计时了 谢谢大家啊 我在其他论坛也发了帖子 得到的答案是 赋值好就计时了 呵呵 可以结贴了 谢谢呢 无所谓的。。。 回复【7楼】wuzhisheng2007
回复【5楼】lwen512
-----------------------------------------------------------------------
嗯 我问题问的不好 有点离题了 我重新发下
void timer0interrupt(void) interrupt 1
{
th0 =0x63;
tl0 =0x18; /*********//这里赋值好了 就开始计时吗?????
timer++;
} /*********//还是退出了才开始计时??????
-----------------------------------------------------------------------
只要你没关定时器,他就一直在计时,直到溢出,溢出后再从TH0和TL0从装载计数初值开始新一轮计数。精度不高的场合不需要计较这些
页:
[1]