51单片机外部中断应用
时间:10-02
整理:3721RD
点击:
51单片机的P1口上接有8只LED。
在外部中断0输入引脚P3.2接有一只按钮开关K1。
在外部中断1输入引脚P3.3接有一只按钮开关K2。
要求K1和K2都未按下时,P1口的8只LED呈流水灯显示,
仅K1(P3.2)按下时,左右4只LED交替闪烁。
仅按下K2(P3.3)时,P1口的8只LED全部闪亮。
两个外中断的优先级相同。
=============================================
用 PROTSUE 仿真界面如下:
![](../imgqa/ele/mcu/mcu-3721rd.com-39513umxe0wifz2a.png)
下列程序,可以满足要求.
ORG 0000H
SJMP MAIN
ORG 0003H
SJMP X0_INT
ORG 0013H
SJMP X1_INT
------------------------------------
MAIN:
MOV SP, #60H
MOV IE, #85H
MOV A, #254
M_LOOP:
MOV P1, A
RL A
CALL DL_500MS
SJMP M_LOOP
------------------------------------
X0_INT:
PUSH PSW
SETB RS1
MOV P1, #0FH
SH_0:
XRL P1, #255
CALL DL_500MS
JNB P3.2, SH_0
POP PSW
RETI
------------------------------------
X1_INT:
PUSH PSW
SETB RS0
MOV P1, #0
SH_1:
XRL P1, #255
CALL DL_500MS
JNB P3.3, SH_1
POP PSW
RETI
------------------------------延时子程序
DL_500MS:
MOV R5, #9 ;1T
DL1: MOV R6, #128 ;1T
DL2: MOV R7, #215 ;1T
NOP ;1T
DL3: DJNZ R7, DL3 ;2T 2 * 215 = 430 T
DJNZ R6, DL2 ;2T [1+1+430+2] * 128 = 55552 T
DJNZ R5, DL1 ;2T [1+55552+2] * 9 = 499995 T
RET ;2T 1 + 499995 + 2 = 499998 T
------------------------------------
END
呵呵 ,谢谢,支持下。
好的,很简洁的内容,心平气和的看完,就更好的理解中断了。
这是汇编语言吧。只会C语言,不会汇编语言哎,,没法看懂