EX1:开放/禁止外部中断源1中断,“1”开放,“0”禁止。 ET0:开放/禁止定时器0溢出中断,“1”开放,“0”禁止。 EX0:开放/禁止外部中断源0中断,“1”开放,“0”禁止。
(4)IP(B8H)控制寄存器
89C51有两个中断优先级。每一个中断请求源当标志位为1时,设置为高优先级中断;当标志位为0时,设置为低优先级中断。中断优先级寄存器IP 标志位如表3.4所示。
表3.4 中断优先级标志
位
位地址 BFH BEH BDH BCH BBH BAH B9H B8H
位定义名 PS PT1 PX1 PT0 PX0
3.中断服务程序入口地址 中断源 中断入口地址
INT0外部中断0 0003H
T0 定时/计数器0 000BH
INT0 外部中断1 0013H T1 定时/计数器1 001BH
串行口 0023H
4.编写中断服务程序应注意的问题
(1) 两相邻中断服务程序起始地址之间只相距8个字节,而一般服务程序长度会超过8个字节,为了避免和下一个中断地址相冲突,常用一条跳转指令,将程序转移到另外的某一区间。
(2) 若要在执行当前程序时禁止更高优先级中断,则应用软件关闭CPU中断,或屏蔽更高中断源的中断,在中断返回前再开放中断。
(3) 由于中断服务程序要使用有关的寄存器,因此CPU在中断之前要保护这个寄存器的内容,即保护现场,而在中断返回时又要使它们恢复原值,即恢复现场。
(4) 中断请求标志位清除的方法:执行中断程序能自动清除的标志位有TF0、TF1、IE0(边沿触发)、IE1(边沿触发)。执行中断程序不能自动清除的标志位有TI、RI、IE0(电平触发)、IE1(电平触发)。TI、RI标志位的清零必须通过在中断程序中设置清0指令(CLR TI;CLR RI),IE1(电平触发)标志位的清零可以通过外接电路来撤除引脚的低电平。
二.实验练习
(一)急救车与交通灯
1.实训要求
在实验四内容的基础上增加允许急救车优先通过的要求。有急救车到达时,两向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。本实验以按键为中断申请,表示有急救车通过。
2.实训目的
(1) 学习外部中断技术的基本使用方法。 (2) 学习中断处理程序的编程方法。
3.实训电路及连线
4.实验说明
中断服务程序的关键是:
(1) 保护进入中断时的状态,并在退出中断之前恢复进入时的状态。 (2) 必须在中断程序中设定是否允许中断重入,即设置EX0位。
本例中使用了INT0中断,一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。本例的INT0程序保护了PSW,ACC,2等三个寄存器并且在退出前恢复了这三个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本例中没有涉及这种情况。
实验开始时K8应在H(高电平)端,要产生中断时先拨向L(低电平)端再拨回H端。 5.实验仪器和设备
AEDK5196ET单片机实验箱一台,PC机一台,LCA51ET单片机开发环境。
6.实验框图
7.参考程序
ORG LJMP ORG START:
MOV SETB SETB SETB LCALL CIRCLE: LCALL LCALL LCALL LCALL LJMP INT0:
PUSH PUSH PUSH MOV 0003H ;INT 0 中断入口地址 INT0 0040H SP,#60H
;INT 0 中断有效 ;开启边沿触发方式 EA ;开总中断允许
STATUS0 ;初始状态(都是红灯) STATUS1 ;南北绿灯,东西红灯
STATUS2 ;南北绿灯闪转黄灯,东西红灯 STATUS3 ;南北红灯,东西绿灯
STATUS4 ;南北红灯,东西绿灯闪转黄灯 CIRCLE PSW ;保护现场 2 ACC
DPTR,#8300H
MOV A,#0FH ;南北,东西都亮红灯 MOVX @DPTR,A
MOV R2,#100 ;延时10秒 LCALL DELAY
POP ACC ;恢复现场 MOVX @DPTR,A POP POP
STATUS0: ;南北红灯,东西红灯 MOV DPTR,#8300H MOV A,#0FH MOVX @DPTR,A
MOV LCALL RET
STATUS1: MOV MOV MOVX MOV LCALL RET
STATUS2: MOV MOV FLASH: MOV MOVX MOV LCALL MOV MOVX MOV LCALL DJNZ MOV MOVX MOV LCALL RET
STATUS3: MOV MOV MOVX MOV LCALL RET
STATUS4: MOV MOV FLASH1: MOV MOVX MOV LCALL MOV MOVX MOV LCALL R2,#10 DELAY DPTR,#8300H
A,#96H @DPTR,A
R2,#200 DELAY DPTR,#8300H
R3,#03H A,#9FH @DPTR,A R2,#03H DELAY A,#96H @DPTR,A R2,#03H DELAY R3,FLASH
A,#06H @DPTR,A
R2,#10 DELAY DPTR,#8300H A,#69H @DPTR,A
R2,#200 DELAY DPTR,#8300H
R3,#03H A,#6FH @DPTR,A R2,#03H DELAY A,#69H @DPTR,A R2,#03H DELAY
;延时1秒 ;南北绿灯,东西红灯 ;南北绿灯,东西红灯 ;延时20秒 ;南北绿灯闪转黄灯,东西红灯 ;绿灯闪3次 ;南北黄灯,东西红灯 ;延时1秒 ;南北红灯,东西绿灯 ;延时20秒 ;南北红灯,东西绿灯闪转黄灯 ;绿灯闪3次