我最近准备做一下简易交通灯,利用的主控芯片是AT89C52,时间上是采用定时0的方式1来定时,采用定时器0中断,所采用的语言是C语言,因为定时器0的方式1最多计算65536次,因此我需要放一变量在中断处理函数里,每次相应一次中断后,就在中断处理函数里做一次递加,然后在主函数中判断是否计时已到.
我的问题是:我所采用的定时器0中断,需不需要每次在中断处理函数里写一下EA=1;TR0=1;ET0=1?以此来开始第二次中断计算.
这个地方还要注意,在你的那个变量操作的时候要采用关中断的保护处理,不然可能会出现冲突的,引起定时时间不准!
谢谢,小浪,还都亏你帮我考虑到了关中断的保护处理,这一点我疏忽了.
发表于:2007-10-22 12:15:092楼 得分:0
这个地方还要注意,在你的那个变量操作的时候要采用关中断的保护处理,不然可能会出现冲突的,引起定时时间不准!
不关中断会出现什么冲突?
当然了,如果后台没有采用关中断方式操作全局变量。因为前台(中断中)也会操作同一个全局变量,所以可能会导致前后台互相冲突访问同一个变量。从而导致问题。
重新初始化定时器1就行吧!
小浪说的关中断不明白!
发表于:2008-01-13 08:42:195楼 得分:0
当然了,如果后台没有采用关中断方式操作全局变量。因为前台(中断中)也会操作同一个全局变量,所以可能会导致前后台互相冲突访问同一个变量。从而导致问题。
前台 后台 不明白! 还望高手指点!
没有必要吧,关键你看你定时多长时间和你的定时器的初始值是多少;
如果你定时的时间长就有必要关中断,如果短就不用了。即使要管也使关定时器中断就可以,总中断不用关,一般的程序是:
中断服务程序
{
关定时器;
关定时器中断;
定时器初始化;
开定时器中断;
开定时器
}
定时器初始化的值最好设置的偏小一点,因为你的中断服务程序也花了点时间,如果你要求不精确就无所谓了!
当你定时的总的时间较长时肯定就要用,这个就是因为中断服务程序要花时间。