⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kd618.asm

📁 交通灯设计(使用89C51
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	MOV A,31H
	INC DPTR
	MOVX @DPTR,A
	MOV A,30H
	INC DPTR
	MOVX @DPTR,A
	RET
;=================================================
PAKT:	MOV R0,#2FH;-------------打包,将显缓压缩至32H,31H,30H
	MOV R1,#32H
	MOV R2,#03H
PAK1:	MOV A,@R0
	SWAP A
	DEC R0
	XCHD A,@R0
	MOV @R1,A
	DEC R0
	DEC R1
	DJNZ R2,PAK1
	RET
;=========================================						
INS0:	push acc
	push b
	push dph
	push dpl
	setb psw.3
	MOV DPTR,#0eF0CH              
	movx a,@DPTR
	MOV DPTR,#0eF00H;----秒单元
	movx a,@DPTR
	mov 30h,a
	MOV DPTR,#0eF02h;----分单元
	movx a,@DPTR
	mov 31h,A
	MOV DPTR,#0eF04h;----时单元
	movx a,@DPTR
	mov 32h,a
	MOV DPTR,#0EF07H;
	MOVX A,@DPTR
	MOV 33H,A
	INC DPTR
	MOVX A,@DPTR
	MOV 34H,A
	INC DPTR
	MOVX A,@DPTR
	MOV 35H,A;-------------年   dataup is over
;-----------------------------
	ACALL FTT
	MOV DPH,#0EFH
	MOV DPL,44H
	MOVX A,@DPTR
	ANL A,#0FH
	CJNE A,#03H,CHKY;-----------判是“关机”?
	MOV A,55H;????????????????????????
	ORL A,56H
	ORL A,57H
	ORL A,58H
	JNZ PERI;-----------------判本周期走完了吗?未完继续???????????
	MOV 40H,#00H
	MOV 41H,#00H;--------------拉登
	MOV 39H,#0FFH
	MOV 5BH,#02H	
REI3:	CLR PSW.3
	POP DPL
	POP DPH
	POP B
	POP ACC
	RETI
;--------------
CHKY:	CJNE A,#02H,PERI
	MOV A,55H;??????????????
	ORL A,56H
	ORL A,57H
	ORL A,58H
	JNZ PERI;????????????
	MOV 39H,#0FFH;--------------灭大屏
	JB 23H.0,OFF
	MOV 40H,#12H
	MOV 41H,#12H;------全黄亮
	DJNZ 5BH,REI3
	SETB 23H.0
	AJMP REI3
OFF:	MOV 40H,#00H
	MOV 41H,#00H;------RYG-ABCDEF全灭
	CLR 23H.0
	MOV DPH,#0EFH
	MOV A,#04H
	ADD A,44H
	MOV DPL,A
	MOVX A,@DPTR
	MOV 5BH,A
	AJMP REI3
;---------------------------
PERI:	MOV 5BH,#02H;----------------------------------???????
	CJNE A,#01H,LAST;------------进入定周期
LAST:	MOV 5AH,#45H
LAS1: INC 5AH;------------指向	T1
	MOV R0,5AH
	CJNE @R0,#00H,OTCP;--------T1玩完了吗?,未完继续
	INC 5AH
	MOV R0,5AH
	CJNE @R0,#00H,GESH;--------绿闪完了吗?,未完继续
	acall segy;----------------确定绿闪控制字
	INC 5AH
	MOV R0,5AH
	CJNE @R0,#00H,YBR1;--------黄亮完了吗?,未完继续
	INC 5AH
	MOV R0,5AH
	CJNE @R0,#00H,ROS1;--------全红完了吗?,未完继续
	INC 5AH;--------------指向下一相位头
	MOV A,5AH
	CJNE A,#59H,LAS1;----------工作表全部结束了吗?
	ACALL FTT
	ACALL LOAD
	MOV 5AH,#45H;------------恢复指针
	AJMP LAST
YBR1:	AJMP YEBR
ROS1:	AJMP RFOS	
;------------------------------------
OTCP:	DEC R0
	MOV A,@R0
	ANL A,#0FH
	MOV DPTR,#0E00H;-----------指向相位表TOP
	RL A;----------------------乘于2
	MOV B,A
	MOVC A,@A+DPTR
	MOV 40H,A
	MOV A,B
	INC A
	MOVC A,@A+DPTR
	MOV 41H,A;-------------完成红绿灯输出
	INC R0
	MOV A,@R0
	INC R0
	ADD A,@R0
	DA A
	MOV 39H,A;-------------大屏输出
	DEC R0
	CLR C
	MOV A,#99H
	ADD A,@R0
	DA A
	MOV @R0,A;---------T1-1
	AJMP REI3
;------------------------------------
GESH:	JB 22H.0,GEON
	SETB 22H.0
	MOV R4,40H
	MOV R5,41H
	acall segy
	ajmp okok
segy:	mov r1,5ah;--------------指向绿闪时
	inc r1
	inc r1
	inc r1;------------------指向下一相位状态
	mov a,@r1
	anl a,#0fh
	rl a
	mov b,a
	mov dptr,#0e00h
	movc a,@a+dptr;-----------取出相位状态
	anl a,0a4h
	mov 24h,a;----------------提取绿灯,存人24,25单元("1" IS GREEN LIGHT)
	mov a,b
	inc a
	movc a,@a+dptr
	anl a,#0a4h
	mov 25h,a;--------提取绿灯,存人24,25单元
	dec r1
	dec r1
	dec r1
	dec r1
	dec r1;-----------指向当前相位状态
	mov a,@r1
	anl a,#0fh
	rl a
	mov b,a
	mov dptr,#0e00h
	movc a,@a+dptr
	anl a,#0a4h
	cpl a
	orl a,24h
	mov 26h,a;----提取当前相位状态绿灯,取反后或24,25单元内容,存人26,27单元
		mov a,b
	inc a
	movc a,@a+dptr
	anl a,#0a4h
	cpl a
	orl a,25h
	mov 27h,a;---提取当前相位状态绿灯,取反后或24,25单元内容,存人26,27单元
	ret
okok:	mov a,26h
	anl a,40h
	mov 40h,a;--------
	mov a,27h
	anl a,41h
	mov 41h,a
GTDE:	MOV 39H,@R0
   	CLR C
	MOV A,#99H
	ADD A,@R0
	DA A
	MOV @R0,A;---------TGSH-1
	jnz hhh
	clr 22h.0
hhh:	AJMP REI3
GEON:	MOV 40H,R4
	MOV 41H,R5
	CLR 22H.0
	AJMP GTDE
;------------------------------------
YEBR:	MOV 39H,@R0
	CLR C
	MOV A,#99H
	ADD A,@R0
	DA A
	MOV @R0,A;---------TY-1
	mov a,26h
	orl a,#0c0h
	anl a,40h
	mov 40h,a;------------用绿闪控制字26H(其中为0者是绿闪位)灭掉40H的绿灯,E绿不动
	mov a,27h
	orl a,#0c0h
	anl a,41h
	mov 41h,a;------------用绿闪控制字27H(其中为0者是绿闪位)灭掉41H的绿灯,F绿不动
	mov a,26h
	cpl a
	anl a,#3fh
	rr a
	orl a,40h
	mov 40h,a;------------用绿闪控制字26H取反右移点亮对应黄灯
	mov a,27h
	cpl a
	anl a,#3fh
	rr a
	orl a,41h
	mov 41h,a;------------用绿闪控制字27H取反右移点亮对应黄灯
	AJMP REI3
;------------------------------------
RFOS:	MOV 39H,@R0
	CLR C
	MOV A,#99H
	ADD A,@R0
	DA A
	MOV @R0,A;---------TR-1
	MOV 40H,#49H
	MOV 41H,#49H;-----------------输出全红
	AJMP REI3
;=========================================
FTT:	MOV DPH,#0EFH
	MOV 44H,#10H;---------44H指向12887时段头
RERE:	MOV DPL,44H
	MOVX A,@DPTR
	ANL A,#0FH
	CJNE A,#09H,REDH;-----------是否是终点?
	AJMP BAK
REDH:	INC DPTR;-------------读时段小时
	MOVX A,@DPTR
	CJNE A,32H,DEFH;-----------转时不同
	INC DPTR
	MOVX A,@DPTR
	CJNE A,31H,DEFM;------------转分不同
RE2:	RET
;------------------
DEFH:	JNC CLKS;---------实时时钟的    时小于表
CLKB:	MOV A,#0CH;-----------------   时大于表,则指针+12
	ADD A,44H
	MOV 44H,A
	AJMP RERE
CLKS:	MOV R0,#44H;----------指针在TOP吗?
	CJNE @R0,#10H,BAK;--------------指针不在TOP,则指针-12后输出
AD12:	MOV A,#0CH;---------指针在TOP,寻找 END 标志“X9”
	ADD A,44H
	MOV 44H,A
	MOV DPL,44H
	MOVX A,@DPTR
	ANL A,#0FH
	CJNE A,#09H,AD12
BAK:	CLR C;-----------------指针后退12,然后输出
	MOV A,44H
	SUBB A,#0CH
	MOV 44H,A
	AJMP RE2
DEFM:	JNC CLKS
	AJMP CLKB	
;=========================================
LOAD:	MOV DPTR,#0EF7DH;---------取出绿闪时间,送R3
	MOVX A,@DPTR
	MOV R3,A
	MOV A,44H
	ADD A,#04H
	MOV DPL,A;-----------指向相位1的状态
	MOVX A,@DPTR
	MOV B,A
	ANL A,#0F0H
	SWAP A
	MOV 45H,A
	mov 59h,a
	MOV A,B
	ANL A,#0FH
	MOV 4AH,A
	INC DPTR
	MOVX A,@DPTR
	MOV B,A
	ANL A,#0F0H
	SWAP A
	MOV 4FH,A
	MOV A,B
	ANL A,#0FH
	MOV 54H,A;--------------四个相位 状态  数据已传送完毕
	INC DPTR
	INC DPTR
	MOVx A,@DPTR
	MOV B,A
	CLR C
	MOV A,#9AH
	SUBB A,R3
	ADD A,B
	DA A
	MOV 46H,A;---------T1绿灯时间-绿闪时间送46单元
	INC DPTR
	MOVX A,@DPTR
	MOV B,A
	CLR C
	MOV A,#9AH
	SUBB A,R3
	ADD A,B
	DA A
	MOV 4BH,A
	INC DPTR
	INC DPTR
	MOVX A,@DPTR
	MOV B,A
	CLR C
	MOV A,#9AH
	SUBB A,R3
	ADD A,B
	DA A
	MOV 50H,A
	INC DPTR
	MOVX A,@DPTR
	MOV B,A
	CLR C
	MOV A,#9AH
	SUBB A,R3
	ADD A,B
	DA A
	MOV 55H,A;------------四个相位 时间  数据已传送完毕
	MOV R1,#47H;----------green flash\yellow\all red time
	MOV R2,#04H
WOT1:	MOV R3,#03H
	MOV DPTR,#0EF7DH
WOT2:	MOVX A,@DPTR
	MOV @R1,A
	INC R1
	INC DPTR
	DJNZ R3,WOT2
	INC R1
	INC R1
	DJNZ R2,WOT1
	RET
;=========================================
KEY:	MOV P1,#0FH
	MOV A,P1
	CJNE A,#0FH,HAVE1
	SETB F0
NOKEY:	MOV A,#0FFH
	AJMP RE1
HAVE1:	ACALL DISP
	ACALL DISP
	MOV A,P1
	CJNE A,#0FH,HAVE2
	SJMP NOKEY
HAVE2:	JNB F0,NOKEY
	CLR F0
	MOV R2,#0EFH
	MOV R4,#00H
LK4:	MOV P1,R2
	MOV A,P1
	JB ACC.0,LONE
	MOV A,#00H
	AJMP LKP
LONE:	JB ACC.1,LTWO
	MOV A,#04H
	AJMP LKP
LTWO:	JB ACC.2,LTHR
	MOV A,#08H
	AJMP LKP
LTHR:	JB ACC.3,NEXT
	MOV A,#0CH
LKP:	ADD A,R4
RE1:	RET
NEXT:	INC R4
	MOV A,R2
	JNB ACC.7,NOKEY
	RL A
	MOV R2,A
	AJMP LK4
;====================================
DISP: MOV R0,#2AH;---------显示2FH,2EH,2DH,2CH,2BH,2AH的内容
	MOV R2,#06H
	MOV R1,#0feH;--------(应为#01H,在正板中改回),20h---01h
XS:	mov a,#0ffh
	mov dptr,#5fffh
	movx @dptr,a
	MOV A,@R0
	MOV C,ACC.7;
	ANL A,#0FH;
	MOV DPTR,#0F00H;---------字型表首的址
	MOVC A,@A+DPTR
	MOV ACC.7,C;
	MOV DPTR,#7FFFH
	cpl a
	MOVX @DPTR,A
	MOV A,R1
	MOV DPTR,#5FFFH
	MOVX @DPTR,A
	ACALL DELAY
	mov a,#0ffh
	mov dptr,#7fffh
	movx @dptr,a
	INC R0
	MOV A,R1
	;Rr A;-------------------------(应为RL A,在正板中改回)
	rl a
	MOV R1,A
	DJNZ R2,XS
	RET
;=============================
DELAY:MOV 5FH,#0FFH
DEY:	DJNZ 5FH,DEY
	RET
;---------------------------
	ORG 0E00H
PHAS:	DB 8CH,49H,61H,89H,89H,4CH,49H,0A1H,0A4H,49H,8CH,4CH,4CH,0A1H,0A1H,4CH,61H,0A1H,49H,0A4H,0A4H,49H
	ORG 0F00H
SHAP:	DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,00H
	END
	


	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -