本帖最后由 yygkqzh 于 2012-10-19 17:41 编辑
以下是程序,这是一个交通灯的程序。
ORG 0000H
AJMP START
ORG 0003H
LJMP INT00
ORG 0013H
LJMP INT10
START: MOV SP,#60H
SETB EX0
SETB EX1
SETB EA
;LCALL ST00
MAIN: LCALL ST10
LCALL ST20
LCALL ST30
LCALL ST40
LJMP MAIN
ST00: MOV A,#00
MOV P2,A
ST10:MOV R7,#30
ST11:MOV R0,#0DEH
MOV P2,R0
LCALL DELAY1S
RET
ST20:MOV R4,#05
ST21:MOV R0,#0DDH
MOV P2,R0
MOV R5,#05
L22:lCALL DELAY01S ;延时0.5S
DJNZ R5,L22
MOV R0,#0DFH
MOV P2,R0
MOV R5,#05
L23:lCALL DELAY01S ;延时0.5S
DJNZ R5,L23
DJNZ R4,ST21
RET
ST30:MOV R7,#30
MOV R0,#0F3H
MOV P2,R0
LCALL DELAY1S
RET
ST40:MOV R4,#05
ST41:MOV R0,#0EBH
MOV P2,R0
MOV R5,#05
L42:lCALL DELAY01S ;延时0.5S
DJNZ R5,L42
MOV R0,#0FBH
MOV P2,R0
MOV R5,#05
L43:lCALL DELAY01S ;延时0.5S
DJNZ R5,L43
DJNZ R4,ST41
; JMP ST10
RET
DELAY1S: MOV R3,#50 ; R3存循环20ms的次数(50次)
CLR A
DIS0: MOV A,R7
LCALL X0
DJNZ R3,DIS0
DJNZ R7,DELAY1S
RET
DELAY01S: MOV R7,#05 ; R2存循环20ms的次数(5次)
CLR A
DIS1: MOV A,R4
LCALL X0
DJNZ R7,DIS1
RET
DELAY10MS: MOV R2,#20 ;键扫描10ms子程序
DEL1: MOV R6,#248
DJNZ R6,$
DJNZ R2,DEL1
MOV R6,#00
MOV R2,#00
RET
TAB: DB 3FH,06H,5BH,4FH
DB 66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H
DB 40H,00H
X0: MOV R6,A
MOV R1,#40H
MOV A,R6
MOV B,#10
DIV AB
MOV @R1,A
INC R1
MOV @R1,B
MOV DPTR,#TAB
MOV A,@R1
MOVC A,@A+DPTR
MOV P0,A
CLR P3.7
LCALL DELAY10MS
SETB P3.7
DEC R1
MOV DPTR,#TAB
MOV A,@R1
MOVC A,@A+DPTR
MOV P0,A
CLR P3.6
LCALL DELAY10MS
SETB P3.6
RET
INT00: MOV 36H,R7
PUSH 36H
MOV 37H,R0
PUSH 37H
MOV 39H,R3
PUSH 39H
MOV R7,#10 ;紧急情况按钮,南北停止通行,均为红灯,持续10秒。
MOV P2,#0DBH
LCALL DELAY1S
POP 39H
POP 37H
POP 36H
MOV R7,36H
MOV R0,37H
MOV P2,R0
MOV R3,39H
RETI
INT10: MOV 36H,R7 ;R7----XIANSHIMIAOSHU
PUSH 36H ;R0----p2 显示灯的状态
MOV 37H,R0 ;
PUSH 37H
MOV 38H,R6
PUSH 38H
MOV 39H,R3
PUSH 39H
;JNB P3.4,SV1
;JNB P3.5,SV2
; RET
SV1: MOV R7,#10 ;南北车流量多,切换成南北方向上运行
MOV R0,#0DEH
MOV P2,R0
LCALL DELAY1S
AJMP RETN
SV2: MOV R7,#10 ;东西车流量多,切换成东西方向上运行
MOV R0,#0F3H
MOV P2,R0
LCALL DELAY1S
AJMP RETN
RETN: POP 39H
MOV R3,39H
POP 38H
MOV R6,38H
POP 37H
MOV R0,37H
POP 36H
MOV R7,36H
RETI
END |