(1)基于8051内核单片机(如at89C51等)进行实验
(2)模拟有急救车通过的交通灯控制实验:允许急救车优先通过。当有急救车到达时,两个方向上的红灯亮(可以发光二极管模拟),以便让急救车通过,假定急救车通过路口的时间为10秒,急救车通过后,交通灯恢复中断前的状态。实验以按键开关为中断申请,表示有急救车通过。
(3)uvision2/4软件平台上编写、调试程序。
(4)Proteus软件平台上仿真。
本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。要保护的地方,除了累加器ACC、标志寄存器PSW外,还要注意:第一是主程序中的延时程序和中断处理程序中的延时程序不能混用,本实验给出的程序中,主程序延时用的是R5、R6、R7,中断延时用的是R3、R4和新的R5。第二,主程序中每执行一步经74LS273的端口输出数据的操作时,应先将所输出的数据保存到一个单元中。因为进入中断程序后也要执行往74LS273端口输出数据的操作,中断返回时如果没有恢复中断前74LS273端口锁存器的数据,则显示往往出错,回不到中断前的状态。还要注意一点,主程序中往端口输出数据操作要先保存再输出,例如有如下操作:
MOV A,#0F0H (0)
MOVX @R1,A (1)
MOV SAVE,A (2)
程序如果正好执行到(1)时发生中断,则转入中断程序,假设中断程序返回主程序前需要执行一句MOV A,SAVE指令,由于主程序中没有执行(2),故SAVE中的内容实际上是前一次放入的而不是(0)语句中给出的0F0H,显示出错,将(1)、(2)两句顺序颠倒一下则没有问题。发生中断时两方向的红灯一起亮10秒,然后返回中断前的状态。
图3.1 主程序框图
图3.2 中断程序框图
实验步骤
74LS273的输出O0~O7接发光二极管L1~L8,74LS273的片选CS273\接片选信号CS2,此时74LS273的片选地址为CFB0H~CFB7H之间任选。单脉冲输出端P-接CPU板上的INT0。
实验数据分析及处理
烧录
程序运行结果
仿真结果
NAME T5 //中断控制实验
OUTPORT EQU 0CFB0H //端口地址
SAVE EQU 55H //保存从端口cfa0输出的数据
CSEG AT 0000H
LJMP START
CSEG AT 0003H
LJMP INT
CSEG AT 0100H
START: SETB IT0
SETB EX0
SETB EA
MOV A,#11H //置首显示码
MOV SAVE,A //保存
ACALL DISP //显示输出
ACALL DE3S //延时3秒
LLL: MOV A,#12H //东西路口绿灯亮,南北路口红灯亮
MOV SAVE,A
ACALL DISP
ACALL DE10S //延时10秒
MOV A,#10H //东西路口绿灯灭
MOV SAVE,A
ACALL DISP
MOV R2,#05H //东西路口黄灯闪烁5次
TTT: MOV A,#14H
MOV SAVE,A
ACALL DISP
ACALL DE02S
MOV A,#10H
MOV SAVE,A
ACALL DISP
ACALL DE02S
DJNZ R2,TTT
MOV A,#11H //红灯全亮
MOV SAVE,A
ACALL DISP
ACALL DE02S //延时0.2秒
MOV A,#21H //东西路口红灯亮,南北路口绿灯亮
MOV SAVE, A
ACALL DISP
ACALL DE10S //延时10秒
MOV A,#01H //南北路口绿灯灭
MOV SAVE,A
ACALL DISP
MOV R2,#05H //南北路口黄灯闪烁5次
GGG: MOV A,#41H
MOV SAVE,A
ACALL DISP
ACALL DE02S
MOV A,#01H
MOV SAVE,A
ACALL DISP
ACALL DE02S
DJNZ R2,GGG
MOV A,#11H //红灯全亮
MOV SAVE,A
ACALL DISP
ACALL DE02S //延时0.2秒
JMP LLL //转LLL循环
DE10S: MOV R5,#100 //延时10秒
JMP DE1
DE3S: MOV R5,#30 //延时3秒
JMP DE1
DE02S: MOV R5,#02 //延时0.2秒
DE1: MOV R6,#200
DE2: MOV R7,#126
DE3: DJNZ R7,DE3
DJNZ R6,DE2
DJNZ R5,DE1
RET
INT: CLR EA
PUSH ACC //中断处理
PUSH PSW
MOV A,R5
PUSH ACC
MOV A,#11H //红灯全亮,绿、黄灯全灭
ACALL DISP
DEL10S: MOV R3,#100 //延时10秒
DEL1: MOV R2,#200
DEL2: MOV R5,#126
DEL3: DJNZ R5,DEL3
DJNZ R4,DEL2
DJNZ R3,DEL1
MOV A,SAVE //取SAVE中保存数据输出到cfa0端口
ACALL DISP
POP ACC //出栈
MOV R5,A
POP PSW
POP ACC
SETB EA //允许外部中断
RETI
DISP: MOV DPTR,#OUTPORT
CPL A
MOV P1,A
RET
END
以上的Word格式文档51黑下载地址:
实验4(1).docx
(348.11 KB, 下载次数: 4)
|