单片机实训教案 下载本文

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次