10.1 外部中断的应用
(1)实训目的
◆掌握中断应用技术及编程方法
◆掌握多级外部中断编程方法
(2)功能设计
用P1.O、P1.1、P1.2口控制3个发光二极管L1~L3的亮灭。设系统晶振为6MHz。
主程序:(1)程序初始化,对相关寄存器进行设置。(2)由P1.3产生脉冲宽为1s的方波。
中断程序:/INT0中断使L1~L3点亮10s;/INT1中断使L1~L3交替亮灭1s。
中断源:开关K0按下申请外部中断0;用P1.3输出脉冲作为外部中断1的中断源。
(3)背景知识
1)设计中断控制程序时,首先要对与中断控制有关的寄存器进行设置。需要设置的特殊功能寄存器有IE、TCON和IP。设/INT0、/INT1的触发方式为下降沿触发,/INT0为高级中断,/INT1为低级中断。则各相关寄存器的设置如下:
IE:
TCON:
IP:
2)中断入口地址
/INT0中断入口地址为0003H;/INT1中断入口地址为0013H。
(4)硬件原理
硬件电路如图10-1所示。(去除了其他的电路部分,下同)
图10-1 中断实训1
(5)参考程序
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP JINT0
ORG 0013H
AJMP JINT1
MAIN: NOP
MOV SP,#40H
MOV A,#0FFH
MOV P1,A ;3位发光二级管全灭
SETB IT0 ;/INT0边沿触发
SETB IT1 ;/INT1边沿触发
SETB RX0 ;/INT0为高级中断
SETB EX0 ;开放/INT0中断
SETB EX1 ;开放/INT1中断
SETB EA ;开放总中断
LOOP: MOV R3,#0AH ;延时1s
LOOP0:LCALL YS100 ;调用延时100ms子程序
DJNZ R3,LOOP0
CPL P1.3
AJMP LOOP ;主程序循环,如果有中断,则转移到中断处理程序
JINT0:NOP ;如果K0按下,中断响应
CLR EA ;关中断,保护现场
PUSH 03H ;保护R3
PUSH 06H ;保护R6
PUSH 07H ;保护R7
CLR P1.0 ;L1~L2全亮
CLR P1.1
CLR P1.2
MOV P2,#100 ;延时10s
LOOP1:LCALL YS100
DJNZ R2,LOOP1
POP 07H ;恢复现场
POP 06H
POP 03H
SETB EA
RETI
JINT1:NOP
CLR EA
PUSH 03H ;保护R3
PUSH 06H ;保护R6
PUSH 07H ;保护R7
CPL P1.0 ;L1~L2全亮/灭
CPL P1.1
CPL P1.2
POP 07H ;恢复现场
POP 06H
POP 03H
SETB EA ;开中断
RETI
YS100:MOV R6,#99 ;延时100ms子程序
L100: MOV R7,#124
L1: NOP
NOP
DJNZ R7,L1
NOP
NOP
DJNZ R6,L100
NOP
NOP
RET
END
10.2 外部中断的扩展
(1)实训目的
◆掌握中断应用技术及编程方法
◆掌握外部中断的扩展技术及编程方法
(2)功能设计
主程序:P1口用于控制发光二极管L1~L8的交替亮灭
中断源:串行口扩展外部中断源。无中断时,8位发光二极管按固定时间间隔交替亮灭,有中断时,8位二极管全部点亮。
(3)背景知识
1)利用串行口方式0串行接收功能来扩展外部中断源。
串行口串行接收端为RXD(P3.0),当单片机启动串行接收后,RXD开始逐位接收数据。当接收完8位数时,串行口向CPU发出中断申请,RI=1,CPU响应中断,并执行中断服务程序。
注意:中断返回前必须通过编程将RI清0。
串行口控制寄存器SCON的设置如下:
2)串行口中断入口地址:0023H
3)使用8位并入串出移位寄存器74LS165实现外部中断源的扩展。管脚2为移位脉冲输入端,与单片机串行口同步脉冲输出端TXD相连。管脚15为串行移位控制端,高电平禁止串行输出,低电平允许串行输出。外部中断信号线/EXINT接管脚15,低电平申请中断。
(4)硬件电路
硬件电路原理图如图10-2所示。
图10-2 串行口扩展外部中断
(5)参考程序
ORG 0000H
AJMP MAIN
ORG 0023H
AJMP JSBUF
MAIN: NOP
MOV SP,#40H
MOV A,#0FFH
MOV P1,A
MOV SCON,#10H ;设定串口工作方式0,允许接收
SETB ES ;允许串行口中断
SETB EA
LOOP: MOV A,#0AAH ;10101010B
MOV P1,A ;点亮L1、L3、L5、L7
LCALL DLS
MOV A,#55H ;01010101B
MOV P1,A ;点亮L2、L4、L6、L8
LCALL DLS
AJMP LOOP
JSBUF:NOP
CLR EA
PUSH ACC
PUSH 00H ;保护R0
PUSH 01H ;保护R1
CLR RI
MOV A,#0
MOV P1,A
LCALL DLS
POP 01H
POP 02H
POP ACC
SETB EA
RETI
DLS: MOV R1,#0FFH
LOP1: MOV R0,#0FFH
LOP: DJNZ R0,LOP
DJNZ R1,LOP1
RET
END
(6)总结与提高
在本节的实训中,不需要处理串行接收的数据,只需要利用串行口中断信号来扩展一个外部中断源。注意,外部中断源/EXINT维持低电平的时间要大于8个TXD端输出的移位脉冲时间。扩展外部中断源的方法较多,除了本节介绍的方法外,还可以应用优先编码器764LS348、74LS148等进行外部中断源的扩展。






