51单片机定时器中断问题?

[复制链接]
3998|5
 楼主| 7120223 发表于 2010-10-30 20:27 | 显示全部楼层 |阅读模式
最近遇到个问题,感到有点奇怪,特来证实一下,定时器0中断
....
TR0 = 1;
....
void timer0() interrupt 1
{
      ....
     TR0 = 0;   
      .....          //???   
}
在定时器优先级最高,在里面把它关掉的话 下面的程序也是应该执行到底的吧?会不会有意外使他不执行下去?这些天有个程序感觉到就是这个里面出点问题。TR0 = 0;下面
的程序有时执行,有时没有执行。
shell.albert 发表于 2010-10-30 20:31 | 显示全部楼层
肯定会的,如果是定时器中断为最高的话,Keil的关键字 interrupt 只是保证了进出中断时的现场保护,并不能保证不让中断嵌套! 所以一会在进入中断时 EA=0; 出来中断时EA=1,这样来操作.
DINGXIAOYU777 发表于 2010-10-30 21:57 | 显示全部楼层
TR0 = 0;关闭定时器
TR0 = 1;启动定时器
如果该定时器优先级最高
不会有意外使他不执行下去.
除非强干扰或复位
eswei 发表于 2010-10-31 10:51 | 显示全部楼层
有可能有,在汇编语言里讲单片机内部结构的时候就有讲到过,单片机的中断分为可屏蔽中断和非屏蔽中断。这里的INTERRUPT只是可屏蔽中断。非可屏蔽中断CUP任何时候都要响应。
ayb_ice 发表于 2010-11-1 08:49 | 显示全部楼层
和TR0=0没有任何关系
也没有必要去关TR0
如果关掉.而没有地方恢复,以后就不会产生中断了
 楼主| 7120223 发表于 2010-11-3 15:05 | 显示全部楼层
楼上 上面还有程序我没有写出,这个定时器我是用一端时间后要关闭的,只是TR0关闭之前我有个判断条件没有写出来,开启的地方我在主程序中有的。
同时单片机我还有用到串口中断的,串口中断必须常开的,所以无法关断EA
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

389

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部