实验四、中断实验报告
一、实验内容
参照实验电路,设计交通灯控制系统。模拟交通信号灯控制:一般情况下正
常显示,东西-南北交替放行,各方向通行时间为30秒。有救护车或警车到达时,两个方向交通信号灯全为红色,以便让急救车或警车通过,设通行时间为10秒,之后交通恢复正常。用单次脉冲模拟急救车或警车申请外部中断。
二、程序流程图
3实验仿真电路
中华人民共和国雄起!+5VR110k1716151413121110GFEDCBA2827262524232221D6D5D4D3D2D1D03233343536373839U1P3.7/RDP3.6/WRP3.5/T1P3.4/T0P3.3/INT1P3.2/INT0P3.1/TXDP3.0/RXDP2.7/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9P2.0/A8P0.7/AD7P0.6/AD6P0.5/AD5P0.4/AD4P0.3/AD3P0.2/AD2P0.1/AD1P0.0/AD0ATC51P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.087654321Y2G2R2Y1G1R1R1EAALEPSEN313029ABCDEFGY1G1G2RST9R2Y2RP1D0D1D2D3D4D5D687654321RESPACK-7XTAL218XTAL119+5V制作者:徐宏明 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