10.13【每周讨论】关于单片机中断的有趣问题
[复制链接]
在使能并触发0号中断,而0号中断没有中断处理函数的时候,就会进入1号中断的处理函数。这是为什么呢
使能单片机的0号中断并触发,之后就会进入0号中断的处理函数。这是正常情况。当0号中断没有处理函数的时候,发现它会进入1号中断处理函数。但是当1号中断没有处理函数(或者说这个函数被注释)的时候,它不会进入2号中断的处理函数。其他的,当使能并触发2号中断,而2号中断没有中断处理函数的时候,也不会进入3号中断的处理函数。 只有在使能并触发0号中断,而0号中断没有中断处理函数的时候,就会进入1号中断的处理函数。这是为什么呢
我说过这只是一个简单的测试程序,其实没有必要上传工程了。既然各位要求,那我就上传吧。
#include<reg52.h>
#define DEBUG 1 /* DEBUG: 1----开0号中断,0号中断处理函数存在时 D1点亮(长按闪烁)
2----开0号中断,0号中断处理函数不存在时 D2点亮(长按闪烁)
3----开0号中断,0、1号中断处理函数都不存在时 都不亮
4----开2号中断,2号中断处理函数存在时 D1点亮(长按闪烁)
5----开2号中断,2号中断处理函数不存在时 D2点亮(长按闪烁)
*/ void main(void) { #if (DEBUG < 4) EX0 = 1; #else EX1 = 1; #endif EA = 1;
P1 = 0xFF;
while(1) { P2 = TCON ; } }
#if (DEBUG == 1) void Inter0(void) interrupt 0 { P1 = P1^0x01 ; } #endif
#if ((DEBUG == 1)||(DEBUG == 2)) void Inter1(void) interrupt 1 { P1 = P1^0x02 ; } #endif
#if (DEBUG != 5) void Inter2(void) interrupt 2 { P1 = P1^0x04 ; } #endif
void Inter3(void) interrupt 3 { P1 = P1^0x08 ; }
void Inter4(void) interrupt 4 { P1 = P1^0x10 ; }
整个工程已经上传。
单片机中断测试.rar
(31.54 KB, 下载次数: 1)
[ 本帖最后由 longxtianya 于 2011-10-16 16:31 编辑 ]
|