关于51单片机的外部中断

我对外部中断有点疑问。刚刚写了个小程序。
我实验之后,效果有点怪。理论上,应该是
上电复位——>循环主程序——>外部触发时,执行中断程序,全灭全亮【一】次——>中断结束,返回主程序
但现在,实验发现,实际是:
上电复位——>循环主程序——>外部触发时,执行中断程序,全灭全亮【两】次——>【全亮】约10秒——>中断结束,返回主程序
我的程序如下
ORG 0000H
JMP START ;跳转至主程序
ORG 0013H
JMP INT00 ;外部中断1入口
ORG 0030H
START:
MOV SP,#60H ;初始化堆栈
SETB P3.3 ;INT1口置1
SETB EA ;使能中断
SETB IT1 ;外部中断1 使用低电平触发
SETB EX1 ;使能外部中断
LOOP:
MOV P2,#10101010b ;p2口接8个led的负极, 1为灯灭,0为灯亮
CALL DELAY ;调用延时程序
MOV P2,#01010101b ;
CALL DELAY
JMP LOOP ;循环
INT00:

MOV P2,#0FFH ;全灭
CALL DELAY
MOV P2,#00H ;全亮
CALL DELAY
SETB P3.3
RETI
DELAY: ;延时0.5秒
MOV R1,#10
D1:
MOV R2,#100
D2:
MOV R3,#248
DJNZ R3,$
DJNZ R2,D2
DJNZ R1,D1
RET
END

第1个回答  2013-10-30
ORG 0003H ;INT 0 中断入口地址"
INT0是外部中断0,就是接单片机P3.2口,按一个按键连到地就行,P3.2口有低电平就能触发中断
但是你的程序是不完整的,还在主程序和延时子程序都用......省了,
比如主程序里要写 SETB EA;打开总中断
SETB IT0;低电平触发
SETB EX0;开中断0
延时程序到书上抄个就行