ORG 0100H MAIN:
MOV SP,#60H SETB IT0 SETB EX0 SETB EA LOOP: MOV A, P1 ANL A,#15H JNZ Trouble CLR P1.7 SJMP LOOP Trouble: SETB P1.7
;设定堆栈区域 ;设定外部中断 0 为下降沿触发方式 ;开放外部中断 0 ;开放总中断
void int0_isr( ) interrupt 0
{
Pl = i;
i <<= 1 ; if(i==0) i = 0xfe;
//移位 8 次后,i 将变为 0,需要重新赋值
} /*------------------------ 主函数------------------------*/
139
void main(void) {
汇编语言参考程序如下:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0_ISR
ORG 0l00H
MAIN:
MOV A,#0FEH ;设置 LED 灯起始驱动信号
SETB IT0
;设置外部中断 0 为下降沿触发方式
SETB EX0
;开放外部中断 0
SETB EA
;开放总中断
SJMP $
;读取 P1 口中断输入信号 ;截取中断输入信号 ;有中断请求,转 Trouble,熄灭正常工作指示灯 LED3 ;无中断请求,点亮 LED3 ;循环检查与判断
;熄灭 LED3
141
SJMP LOOP
;循环检查与判断
INT0_ISR:
JNB P1.0,No_Trouble_0 ;查询 0 号故障源,无故障转 No_Trouble_0,熄灭 LED0