51单片机交通灯设计汇编实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档