AJMP T0INT
ORG 0030H
MAIN:
MOV TMOD,#01H ;设定时器/计数器T0为方式1,T1为方式0 MOV SCON,#00H
MOV SP,#60H ;设堆栈指针SP为60H
SETB TR0 ;启动定时器/计数器T0
SETB PT0 ;T0中断为高优先级
SETB ET0 ;允许定时器/计数器T0中断
SETB EA ;开中断
MOV TL0,#0B0H ;设T0时间常数为100ms
MOV TH0,#3CH
;ORG 0100H
RED:
SETB P0.0 ;设置灯的初始状态
CLR P0.1
CLR P0.2
CLR P0.3
CLR P0.4
SETB P0.5
MOV R0,#30 ;红绿灯亮30秒
MOV R1,#10 ;黄灯亮10秒
LOOP1:MOV A,R0
LCALL SHOW
WAIT1:JNB 20H.0,WAIT1 ;显示管每隔1秒倒计数
CLR 20H.0
DJNZ R1,WAIT1
MOV R1,#10
DEC R0 ;倒计时从30到1
CJNE R0,#00H,LOOP1
YELLOW: ;设置灯的初始状态
CLR P0.0
SETB P0.1
CLR P0.2
CLR P0.3
SETB P0.4
CLR P0.5
MOV R0,#10 ;黄灯亮10秒
MOV R1,#10
LOOP2:MOV A,R0
LCALL SHOW
WAIT2:JNB 20H.0,WAIT2
CLR 20H.0
DJNZ R1,WAIT2
MOV R1,#10
DEC R0
CJNE R0,#00H,LOOP2
GREEN:
CLR P0.0
CLR P0.1
SETB P0.2
SETB P0.3
CLR P0.4
CLR P0.5
MOV R0,#30
MOV R1,#10
LOOP3:MOV A,R0
LCALL SHOW
WAIT3:JNB 20H.0,WAIT3
CLR 20H.0
DJNZ R1,WAIT3
MOV R1,#10
DEC R0
CJNE R0,#00H,LOOP3
LJMP MAIN
SHOW:
MOV 21H,R0
MOV 22H,R1
MOV B,#10
DIV AB
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 4BH,A
MOV A,B
MOVC A,@A+DPTR
MOV 4AH,A
MOV 4CH,#0FFH ;前四个显示管灭MOV 4DH,#0FFH
MOV 4EH,#0FFH
MOV 4FH,#0FFH
MOV R1,#4AH
MOV R0,#06H
TRAN:MOV A,@R1
CLR TI
MOV SBUF,A
HERE:JNB TI,HERE
INC R1
DJNZ R0,TRAN ;循环六次,是的六个显示管有相应的状态
MOV R0,21H
MOV R1,22H
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
T0INT:
MOV TH0,#3CH
MOV TL0,#0B0H
SETB 20H.0
SETB TR0
RETI
六、实验心得和体会
本次实验综合性较高,囊括了半本书的知识范围。
在最初写程序时,我不时参考课本266页的程序,但也遇到了很大的困难,最终是和同学讨论着完成的。
一个实验有不同的的程序,用不同的思路写出来的程序不同。