本帖最后由 xlsbz 于 2009-12-8 08:32 编辑
在网上下载了个《KEIL C51使用详解》里面有一段
第八节 Keil C51函数
C51函数声明对ANSI C作了扩展,具体包括:
1. 中断函数声明:
中断声明方法如下:
void serial_ISR () interrupt 4 [using 1]
{
/* ISR */
}
为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。
/* define not used interrupt, so generate "IRET" in their entrance */
void extern0_ISR() interrupt 0{}
/* not used */
void timer0_ISR () interrupt 1{}
/* not used */
void extern1_ISR() interrupt 2{}
/* not used */
void timer1_ISR () interrupt 3{}
/* not used */
void serial_ISR () interrupt 4{}
/* not used */
我想这5句代码的本意是:若由于干扰啊、静电啊..等因素导致进入某个中断,那么程序就会跑飞。为了防止跑飞,所以就加上这段代码,让程序跑到这5句代码中的某个中断服务程序中。
我就纳闷了!跑进这5句代码了,那还能出的去么?
因为很多的中断标志根本不是硬件清零的。必须进行软件清零啊!
所以说必须软件清零才行!
请问:大家都是怎么认为的?
(注:先不用考虑狗吧,因为狗是万不得已才让它起作用的!) |