|
中断系统的应用举例 (含源程序)
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
|
|