51单片机交通灯设计汇编实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四、中断实验报告
一、实验内容
参照实验电路,设计交通灯控制系统。模拟交通信号灯控制:一般情况下正常显示,东西-南北交替放行,各方向通行时间为30秒。有救护车或警车到达时,两个方向交通信号灯全为红色,以便让急救车或警车通过,设通行时间为10秒,之后交通恢复正常。用单次脉冲模拟急救车或警车申请外部中断。
二、程序流程图
3实验仿真电路
4、实验程序
ORG 0000H
JMP MAIN
ORG 0003H ;外部中断0的入口地址JMP X0_INT
ORG 000BH ;T0中断的入口地址JMP T0_INT
;*************************************** MAIN:
MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
MOV R1, #20 ;定时1s
SETB TR0
SETB ET0
SETB PT0
SETB EX0
SETB IT0
SETB EA
MOV SP, #60H
M_LOOP:
;***************************************
N_B:
MOV 30H, #11H ;南北
MOV P1, 30H
MOV R5, #30 ;
CALL DISPLAY
MOV R2, #27
LOOP1:
CALL WAIT_1S
DJNZ R2, LOOP1 ;判断是否过了27s ;--------------------------
MOV 30H, #21H
MOV P1, 30H
MOV R2, #3
LOOP11:
CALL WAIT_1S
DJNZ R2, LOOP11 ;判断是否过了3秒;*************************************** D_X:
MOV 30H, #0AH ;东西
MOV P1, 30H
MOV R5, #30
CALL DISPLAY
MOV R2, #27
LOOP2:
CALL WAIT_1S
DJNZ R2, LOOP2 ;判断是否过了27s ;--------------------------
MOV 30H, #0CH
MOV P1, 30H
MOV R2, #3
LOOP22:
CALL WAIT_1S
DJNZ R2, LOOP22 ;判断是否过了3秒JMP M_LOOP
;*************************************** WAIT_1S: ;等待新秒出现
JNB 20H.0, $
CLR 20H.0
DEC R5
CALL DISPLAY
RET
;-----------------------------
DISPLAY:
MOV A, R5
MOV B, #10
DIV AB
MOV DPTR, #TAB1
MOVC A, @A + DPTR
MOV P2, A
MOV A, B
MOV DPTR, #TAB1
MOVC A, @A + DPTR
MOV P0, A
RET
TAB1:
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH ;***************************************
X0_INT:
MOV P1, #09H ;全部红灯
PUSH ACC
PUSH B
PUSH PSW
SETB RS0 ;换工作区
MOV R5, #10 ;倒计时显示
CALL DISPLAY
MOV R1, #20 ;定时1s
;----------------
MOV R2, #10 ;倒计时
LOOP3:
CALL WAIT_1S
DJNZ R2, LOOP3 ;判断是否到了10s ;----------------
POP PSW ;恢复原区
CALL DISPLAY ;显示原值
MOV P1, 30H ;显示原灯
POP B
POP ACC
RETI
;-----------------------------
T0_INT: ;T0中断,高优先级 MOV TL0, #0B0H
MOV TH0, #3CH ;50ms中断一次
DJNZ R1, EXIT_T0
MOV R1, #20 ;定时1s
SETB 20H.0 ;每到一秒就置一EXIT_T0:
RETI
;*************************************** END