51单片机2个外部中断的应用
2016-01-25 11:48
453 查看
;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 仿真界面如下:
;图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/50c618c5f08ba9f48026ac6a.html#
;下列程序,可以满足要求.
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
;原题网址:http://zhidao.baidu.com/question/277006880.html#here
;在外部中断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 仿真界面如下:
;图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/50c618c5f08ba9f48026ac6a.html#
;下列程序,可以满足要求.
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
;原题网址:http://zhidao.baidu.com/question/277006880.html#here
相关文章推荐
- 用80x86汇编语言编程:键盘输入与显示输出
- 用80x86汇编语言编程:输入后反序显示
- 用80x86汇编语言读写系统时间
- 利用单片机控制频率合成器 MC145151-2 的输出频率
- #UML#UML类图
- 智能交通灯
- 51单片机的4×4键盘识别与74LS164驱动数码显示
- Mac - 设置NSButton 的背景色
- 机器学习公开课笔记(9):异常检测和推荐系统
- 关于51单片机外部中断的触发方式
- 用汇编语言编写查表程序
- 按键控制移位显示
- 51单片机利用74HC595驱动数码管
- 晚期(运行期)优化
- 基于51单片机的交通灯C语言程序设计
- 数码管动态显示 汇编 60进制
- 数据键入与排序程序--80x86汇编语言
- 用C语言编写程序,判断输入的一个字符串是否是回数
- 两台 PC 机之间的串口通信
- 51单片机的中断控制