ORG 0000H
LJMP START
ORG 0023H
START: MOV SP,#30H
MOV TMOD, #21H ; 定时计数器0工作于方式1,1工作于方式2
MOV TH1, #0FDH ; 波特率9600
MOV TL1, #0FDH
MOV SCON, #50H ; 置串口为方式1,允许接收
SETB TR1
SETB EA ; 开中断
SETB ES ; 允许串口中断
LOOP: LCALL SIN
LCALL DELAY_1
AJMP LOOP
SIN: MOV A,SBUF
JNB RI,$
CLR RI
CJNE A,#18H,GR ;如果收到18H,即"↑",蜂鸣器响
JNB RI,$
CLR RI
CLR P1.4
LCALL DELAY_1
SETB P1.4
RET
GR: CJNE A,#19H,RED ;如果收到19H,即"↓",红、绿灯一起亮
JNB RI,$
CLR RI
CLR P1.6
CLR P1.5
LCALL DELAY_1
SETB P1.6
SETB P1.5
SETB ES
RET
RED: CJNE A,#1AH,GREEN ;如果收到1AH,即"→",红灯亮
JNB RI,$
CLR RI
CLR P1.5
LCALL DELAY_1
SETB P1.5
SETB ES
RET
GREEN: CJNE A,#1BH,ENT0 ;如果收到1BH,即"←",绿灯亮
CLR RI
CLR P1.6
LCALL DELAY_1
SETB P1.6
SETB ES
RET
ENT0: SETB ES ;允许串行中断
RETI ;中断返回
DELAY_1:
MOV R0, #0FFH
LOOP2:MOV R1, #0FFH
LOOP1:NOP
NOP
DJNZ R1, LOOP1
DJNZ R0, LOOP2
RET
END
ORG 0000H
LJMP START
ORG 0023H
START: MOV SP,#30H
MOV TMOD, #21H ; 定时计数器0工作于方式1,1工作于方式2
MOV TH1, #0FDH ; 波特率9600
MOV TL1, #0FDH
MOV SCON, #50H ; 置串口为方式1,允许接收
SETB TR1
SETB EA ; 开中断
SETB ES ; 允许串口中断
LOOP: LCALL SIN ; 返回初始状态( $QQT:0000 <CR> <LF> )
LCALL DELAY_1
AJMP LOOP
SIN: MOV A,SBUF
JNB RI,$
CLR RI
CJNE A,#18H,GR ;如果收到18H,即"↑",蜂鸣器响
JNB RI,$
CLR RI
CLR P1.4
LCALL DELAY_1
SETB P1.4
RET
GR: CJNE A,#19H,RED ;如果收到19H,即"↓",红、绿灯一起亮
JNB RI,$
CLR RI
CLR P1.6
CLR P1.5
LCALL DELAY_1
SETB P1.6
SETB P1.5
SETB ES
RET
RED: CJNE A,#1AH,GREEN ;如果收到1AH,即"→",红灯亮
JNB RI,$
CLR RI
CLR P1.5
LCALL DELAY_1
SETB P1.5
SETB ES
RET
GREEN: CJNE A,#1BH,ENT0 ;如果收到1BH,即"←",绿灯亮
CLR RI
CLR P1.6
LCALL DELAY_1
SETB P1.6
SETB ES
RET
ENT0: SETB ES ;允许串行中断
RETI ;中断返回
DELAY_1:
MOV R0, #0FFH
LOOP2:MOV R1, #0FFH
LOOP1:NOP
NOP
DJNZ R1, LOOP1
DJNZ R0, LOOP2
RET
END
ORG 0000H
jmp main
ORG 0023H
jmp SIN
main:
MOV SP,#30H
MOV TMOD, #21H ; 定时计数器0工作于方式1,1工作于方式2
MOV TH1, #0FDH ; 波特率9600
MOV TL1, #0FDH
MOV SCON, #50H ; 置串口为方式1,允许接收
SETB TR1
SETB EA ; 开中断
SETB ES ; 允许串口中断
LOOP:
JMP LOOP
ret
SIN:
JNB RI,$
MOV A,SBUF
CLR RI
CJNE A,#18H,GR ;如果收到18H,即"↑",蜂鸣器响
CLR P1.4
LCALL DELAY_1
SETB P1.4
RETI
GR:
CJNE A,#19H,RED ;如果收到19H,即"↓",红、绿灯一起亮
CLR P1.6
CLR P1.5
LCALL DELAY_1
SETB P1.6
SETB P1.5
SETB ES
RETI
RED:
CJNE A,#1AH,GREEN ;如果收到1AH,即"→",红灯亮
CLR P1.5
LCALL DELAY_1
SETB P1.5
RETI
GREEN:
CJNE A,#1BH,ENT0 ;如果收到1BH,即"←",绿灯亮
CLR P1.6
LCALL DELAY_1
SETB P1.6
ENT0:
RETI ;中断返回
DELAY_1:
MOV R0, #0FFH
LOOP2:
MOV R1, #0FFH
LOOP1:
NOP
NOP
DJNZ R1, LOOP1
DJNZ R0, LOOP2
RET
END