小第初学单片机,问一下定时中断问题----望各路高手指导

freedom2010   2007-10-22 11:36 楼主
  我最近准备做一下简易交通灯,利用的主控芯片是AT89C52,时间上是采用定时0的方式1来定时,采用定时器0中断,所采用的语言是C语言,因为定时器0的方式1最多计算65536次,因此我需要放一变量在中断处理函数里,每次相应一次中断后,就在中断处理函数里做一次递加,然后在主函数中判断是否计时已到.
  我的问题是:我所采用的定时器0中断,需不需要每次在中断处理函数里写一下EA=1;TR0=1;ET0=1?以此来开始第二次中断计算.

回复评论 (11)

如果采用方式1的话,就要了!
点赞  2007-10-22 12:13
这个地方还要注意,在你的那个变量操作的时候要采用关中断的保护处理,不然可能会出现冲突的,引起定时时间不准!
点赞  2007-10-22 12:14
   谢谢,小浪,还都亏你帮我考虑到了关中断的保护处理,这一点我疏忽了.
点赞  2007-10-22 13:54
发表于:2007-10-22 12:15:092楼 得分:0
这个地方还要注意,在你的那个变量操作的时候要采用关中断的保护处理,不然可能会出现冲突的,引起定时时间不准!

不关中断会出现什么冲突?
点赞  2008-1-12 12:07
当然了,如果后台没有采用关中断方式操作全局变量。因为前台(中断中)也会操作同一个全局变量,所以可能会导致前后台互相冲突访问同一个变量。从而导致问题。
点赞  2008-1-13 08:42
可通过中断溢出标志位TF来实现...
点赞  2008-1-22 23:39
重新初始化定时器1就行吧!
小浪说的关中断不明白!
点赞  2008-1-23 14:39
发表于:2008-01-13 08:42:195楼 得分:0
当然了,如果后台没有采用关中断方式操作全局变量。因为前台(中断中)也会操作同一个全局变量,所以可能会导致前后台互相冲突访问同一个变量。从而导致问题。

前台 后台 不明白! 还望高手指点!
点赞  2008-1-23 14:42
没有必要吧,关键你看你定时多长时间和你的定时器的初始值是多少;
如果你定时的时间长就有必要关中断,如果短就不用了。即使要管也使关定时器中断就可以,总中断不用关,一般的程序是:

中断服务程序
{
   关定时器;
   关定时器中断;
   定时器初始化;
   开定时器中断;
   开定时器
}

定时器初始化的值最好设置的偏小一点,因为你的中断服务程序也花了点时间,如果你要求不精确就无所谓了!

当你定时的总的时间较长时肯定就要用,这个就是因为中断服务程序要花时间。
点赞  2008-1-23 22:04
有问题请先GOOGLE,BAIDU
点赞  2008-5-1 05:38
不明LZ在说什么
点赞  2008-5-1 08:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复