|
单片机才学没多久,写了个程序,死活有问题,头都大了,请大家帮忙啊!!
是交通灯的,要有P3.0,P3.1显示倒计时的秒数,同时红绿灯亮。并有INT0实现计时加一,INT1减一,T0确认。编写了以下的程序,可是在显示时出现问题,可以倒计时,可是灯不亮(一开始会亮一会)。
ORG 0000H
AJMP START
ORG 0003H ;外部中断0
AJMP KINC ;
ORG 000BH ;T0入口
AJMP CLK ;
ORG 0013H ;外部中断1
AJMP KDEC ;
ORG 001BH ;T1入口
AJMP KENT ;
ORG 0030H
START: MOV SP,#70H ;重新设置堆栈
SETB P3.0 ;
SETB P3.5
CLR P3.1 ;
CLR 20H.1 ;
CLR 20H.0
MOV P1,#09H ;设置初值
MOV R4,#50
ACALL DELAY ;延时
MOV R5,#50 ;
MOV R2,#30 ;
MOV 50H,#30 ;
MOV 31H,#0F2H ;
MOV 30H,#0FCH ;
MOV TH0,#0B1H
MOV TL0,#0E0H
MOV TH1,#0FFH
MOV TL1,#0FFH
MOV IE,#10001111B ;
MOV TMOD,#01010001B ;
MOV TCON,#01010000B ;
MAIN: CLR 20H.1 ; 红,绿
MOV R0,#21H ;
STATUS1: CJNE R2,#5,L1
MOV R0,#11H ; 红,黄
STATUS2: CJNE R2,#0,L1
MOV R0,#0CH ; 绿,红
MOV R2,50H ;
STATUS3: CJNE R2,#5,L1
MOV R0,#0AH ; 黄,红
STATUS4: CJNE R2,#0,L1
MOV R2,50H
JMP MAIN ;
L1: JB TR0,L2 ; 判断是否返回入口
ACALL CAZI
JMP L1
L2: ACALL CAZI
JB 20H.1,MAIN
CJNE R3,#21H,L3
JMP STATUS1
L3: ACALL CAZI
CJNE R3,#11H,L4
JMP STATUS2
L4: ACALL CAZI
CJNE R3,#0CH,L5
JMP STATUS3
L5: ACALL CAZI
CJNE R3,#0AH,MAIN
JMP STATUS4
CLK: PUSH PSW ;
PUSH ACC
ACALL CAZI
MOV TH0,#0B1H ;
MOV TL0,#0E0H ;
DJNZ R5,RETURN ;
MOV R5,#50 ;
DEC R2
RETURN:POP ACC
POP PSW
RETI
CAZI: MOV A,R2 ;
MOV B,#10
DIV AB
MOV 52H,A ;
ACALL CHABIAO ;
MOV 31H,A ;
MOV A,B
MOV 51H,B ;
ACALL CHABIAO
MOV 30H,A ;
ACALL XIANSHI
RET
CHABIAO:PUSH PSW ;查表程序
MOV DPTR,#TAB
MOVC A,@A+DPTR
POP PSW
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,1EH,0CH,33H,21H
XIANSHI:MOV P1,31H ;
CLR P3.0
MOV R4,#5
ACALL DELAY ;
SETB P3.0
MOV P1,30H
CLR P3.5
MOV R4,#5
ACALL DELAY ;
SETB P3.5
MOV P1,R0
CLR P3.1
MOV R4,#5
ACALL DELAY ;
SETB P3.1
RET
KINC: MOV R4,#5 ; 加一子程序
ACALL DELAY
JB P3.2,OUT1
JNB P3.2,$
CLR TR0
CJNE R2,#99,K1 ;
MOV R2,#0
MOV 50H,R2
RETI
K1: INC R2
MOV 50H,R2
RETI ;
KDEC: MOV R4,#5 ; 减一子程序
ACALL DELAY
JB P3.3,OUT1
JNB P3.3,$
CLR TR0
CJNE R2,#0,K2
MOV R2,#99 ;
MOV 50H,R2
RETI
K2: DEC R2
MOV 50H,R2
RETI
KENT: MOV R4,#5 ; 确认子程序
ACALL DELAY
JB P3.5,OUT
JNB P3.5,$
JB 20H.0,ALARM2 ;
JB TR0,ALARM1 ;
SETB TR0
SETB 20H.1
OUT: MOV TH1,#0FFH
MOV TL1,#0FFH
OUT1: RETI
ALARM1: CLR TR0 ;
MOV 45H,R2 ;
MOV 46H,R0
MOV R0,#25H
SETB 20H.0
JMP OUT
ALARM2: CLR 20H.0 ;
SETB TR0
MOV R0,46H
MOV R2,45H
JMP OUT
DELAY: MOV R0,#80
DEL1: MOV R6,#123
NOP
DJNZ R6,$ ;
DJNZ R0,DEL1 ;
DJNZ R4,DELAY
RET
END
|
|