wuzhisheng2007 发表于 2012-2-23 11:44:56

求教下 定时中断服务程序的定时器重新开始计时.是赋值完之后就开始重新计时? 还是退

void Timer0Interrupt(void) interrupt 1
{
    TH0 =0x63;
    TL0 =0x18;
        timer++;
    //add your code here!
}
有没有必要 先关闭定时器 重新赋值 然后开启定时器

gwdong 发表于 2012-2-23 12:27:58

如果要可靠,应该先关闭,重新赋值 然后开启

wuzhisheng2007 发表于 2012-2-23 13:07:29

回复【1楼】gwdong
-----------------------------------------------------------------------

嗯 这样是可靠 但是我看别人的程序大家都没有 这样做 所以还是先了解上面的原因先 嘻嘻

wuzhisheng2007 发表于 2012-2-23 15:40:00

前辈们 真心求教呀

wuzhisheng2007 发表于 2012-2-23 15:40:36

回复【3楼】wuzhisheng2007
-----------------------------------------------------------------------

真心求教呀

lwen512 发表于 2012-2-23 16:01:52

如果要可靠,应该先关闭,重新赋值 然后开启
========================================
这说法是对的。
因为你要赋值的定时器是16位的,在你赋值的过程中,定时器是一直在动的。
在赋完高位未赋低位时,如果此时低位有进位,就会造成此次赋值出错(变成了0x6418)。
但这情况一般不会出现,因此大家都不怎么理它。

skype 发表于 2012-2-23 16:21:25

高位手动加载,低位自动加载。

wuzhisheng2007 发表于 2012-2-23 16:45:14

回复【5楼】lwen512
-----------------------------------------------------------------------

嗯 我问题问的不好 有点离题了 我重新发下
void Timer0Interrupt(void) interrupt 1
{
    TH0 =0x63;
    TL0 =0x18;   /*********//这里赋值好了 就开始计时吗?????
   timer++;
}                /*********//还是退出了才开始计时??????

Pony279 发表于 2012-2-23 16:57:18

自己做实验验证下就是了,好像没必要问啊

比如说定时器中断里面读一次计数器的值,软件延时一下再读一下计数器的值,对比一下有没改变就是了



以前去买一些元件的时候,就一个开关,对着老板一直问,哪边是常触的,老板直接拿出万用表测给我看

其实很多事情是可以自已验证的

LXM_0922 发表于 2012-2-23 19:56:18

定时器是一直在计的,只是溢出后从0开始计,就算在中断中不赋值,等计完0x10000之后也会再次中断。

lwen512 发表于 2012-2-23 23:17:02

回复【7楼】 wuzhisheng2007
======================
如9楼说,定时器是一直在计时的。赋完值就开始计时了。

xslff 发表于 2012-2-23 23:35:52

计时器真忙!

wuzhisheng2007 发表于 2012-2-24 13:15:29

回复【7楼】wuzhisheng2007
-----------------------------------------------------------------------

是的 验证也是个方法 不过我还是选择先问问再自己验证 毕竟听听大家的观点是很好的

LZW520 发表于 2012-2-24 15:09:37

EA=1;
ET0=1;
TR0=1;此时定时器就开始计时

emsl 发表于 2012-2-24 18:29:53

应该是赋完值就计时的

楼主可以做个试验,让定时周期是2毫秒,然后中断服务程序的执行时间大于2毫秒,比如5毫秒

楼主会看到程序一直卡在中断服务里。我当年刚学单片机时就犯过这个错误。

这说明程序不用返回就开始计时了

wuzhisheng2007 发表于 2012-2-25 13:28:12

谢谢大家啊 我在其他论坛也发了帖子 得到的答案是 赋值好就计时了 呵呵 可以结贴了 谢谢呢

diandaomx 发表于 2012-2-25 13:51:10

无所谓的。。。

kiracl 发表于 2012-2-25 17:50:26

回复【7楼】wuzhisheng2007
回复【5楼】lwen512
-----------------------------------------------------------------------
嗯 我问题问的不好 有点离题了 我重新发下
void timer0interrupt(void) interrupt 1
{
    th0 =0x63;
    tl0 =0x18;   /*********//这里赋值好了 就开始计时吗?????
   timer++;
}                /*********//还是退出了才开始计时??????

-----------------------------------------------------------------------

只要你没关定时器,他就一直在计时,直到溢出,溢出后再从TH0和TL0从装载计数初值开始新一轮计数。精度不高的场合不需要计较这些
页: [1]
查看完整版本: 求教下 定时中断服务程序的定时器重新开始计时.是赋值完之后就开始重新计时? 还是退