搜索
bottom↓
回复: 17

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

[复制链接]

出0入0汤圆

发表于 2012-2-23 11:44:56 | 显示全部楼层 |阅读模式
void Timer0Interrupt(void) interrupt 1
{
    TH0 =0x63;
    TL0 =0x18;
        timer++;
    //add your code here!
}
有没有必要 先关闭定时器 重新赋值 然后开启定时器

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-2-23 12:27:58 | 显示全部楼层
如果要可靠,应该先关闭,重新赋值 然后开启

出0入0汤圆

 楼主| 发表于 2012-2-23 13:07:29 | 显示全部楼层
回复【1楼】gwdong
-----------------------------------------------------------------------

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

出0入0汤圆

 楼主| 发表于 2012-2-23 15:40:00 | 显示全部楼层
前辈们 真心求教呀

出0入0汤圆

 楼主| 发表于 2012-2-23 15:40:36 | 显示全部楼层
回复【3楼】wuzhisheng2007
-----------------------------------------------------------------------

真心求教呀

出0入0汤圆

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

出0入8汤圆

发表于 2012-2-23 16:21:25 | 显示全部楼层
高位手动加载,低位自动加载。

出0入0汤圆

 楼主| 发表于 2012-2-23 16:45:14 | 显示全部楼层
回复【5楼】lwen512
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2012-2-23 16:57:18 | 显示全部楼层
自己做实验验证下就是了,好像没必要问啊

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



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

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

出0入0汤圆

发表于 2012-2-23 19:56:18 | 显示全部楼层
定时器是一直在计的,只是溢出后从0开始计,就算在中断中不赋值,等计完0x10000之后也会再次中断。

出0入0汤圆

发表于 2012-2-23 23:17:02 | 显示全部楼层
回复【7楼】 wuzhisheng2007
======================
如9楼说,定时器是一直在计时的。赋完值就开始计时了。

出0入0汤圆

发表于 2012-2-23 23:35:52 | 显示全部楼层
计时器真忙!

出0入0汤圆

 楼主| 发表于 2012-2-24 13:15:29 | 显示全部楼层
回复【7楼】wuzhisheng2007
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2012-2-24 15:09:37 | 显示全部楼层
EA=1;
ET0=1;
TR0=1;此时定时器就开始计时

出0入0汤圆

发表于 2012-2-24 18:29:53 | 显示全部楼层
应该是赋完值就计时的

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

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

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

出0入0汤圆

 楼主| 发表于 2012-2-25 13:28:12 | 显示全部楼层
谢谢大家啊 我在其他论坛也发了帖子 得到的答案是 赋值好就计时了 呵呵 可以结贴了 谢谢呢

出0入0汤圆

发表于 2012-2-25 13:51:10 | 显示全部楼层
无所谓的。。。

出0入0汤圆

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

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

只要你没关定时器,他就一直在计时,直到溢出,溢出后再从TH0和TL0从装载计数初值开始新一轮计数。精度不高的场合不需要计较这些
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 22:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表