中断系统的应用举例 (含源程序)
6.4.1 外部中断举例
【例6-3】使用外部中断0,当每次响应中断时,P1口依次输出高电
平,使8个发光二极管依次循环熄灭闪烁。
1) 电路设计
ORG 0000H
LJMP MAIN ;转主程序
ORG 0003H ;外部中断0入口地址
LJMP EXTER ;转中断程序
ORG 1000H
MAIN: SETB IT0 ;外部中断0下降沿有效
SETB EX0 ;外部中断0允许
SETB EA ;总中断允许
LOOP: AJMP LOOP ;等待中断
ORG 1050H ;中断程序入口
EXTER: MOV R2, #0FFH ;置循环次数
MOV A, #01H ;灯亮初值FLASH: RR A ;右移一位
MOV R7, #0FFH ;定时
LOOP1: MOV R6, #0FFH
LOOP2: NOP
NOP
DJNZ R6, LOOP2
DJNZ R7, LOOP1
MOV P1, A ;控制灯的亮灭
DJNZ R2, FLASH ;循环
RETI ;中断返回
END
定时器举例
通过定时器1来产生中断,控制P1.0线上的脉冲输出,并经三极管驱动扬声器,发出音调信号。
1) 电路设计
ORG 0000H
LJMP MAIN
ORG 001BH ;中断入口地址
CPL P1.0
RETI
ORG 1000H
MAIN: MOV R1, #00H
MOV R0, #23H
MOV TMOD, #20H ;定时器1工作方式2
MOV IE, #88H ;定时器1允许中断
L1: MOV DPTR, #3FFFH
MOV A, R0 ;取数
INC R0 ;修改指针
MOVC A, @A+PC ;查表
JZ MAIN
MOV R1, A ;计算计数初值
MOV A, #0FFH
CLR C
SUBB A, R1
RL A
MOV TH1, A ;置计数初值
SETB TR1 ;开始计数
L2: CLR C
MOV A, DPL ;延时
SUBB A, #01H
MOV DPL, A
MOV A, DPH
SUBB A, #00H
MOV DPH, A
ORL A, DPL
JNZ L2
CLR TR1
SJMP L1
END
ORG 1031H ;歌曲“送别”编码
DB 33H,33H,3DH,33H,26H
DB 26H, 26H, 26H,2DH,2DH
DB 26H,2DH,33H,33H,33H
DB 33H, 33H,33H,4DH,45H
DB 45H, 45H45H, 45H, 45H
DB 45H, 45H,33H,33H,3DH
DB 33H,26H,26H,26H, 28H
DB 2DH, 2DH, 26H,26H,33H
DB 33H,33H,33H,45H,3DH