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

📄 交通灯初步.asm

📁 是我在电子竞赛期间写的一些单片机汇编程序
💻 ASM
字号:
;-------------------------------------traffic  program----------------------------
	ORG 0000H			;定义首地址,表示此程序经编译后存在0000H开始的单元
	AJMP MAIN
	ORG 000BH			;中断入口地址
	AJMP PIPO
	ORG 0100H 
MAIN:	MOV SP,#30H			;定义堆栈指针
	MOV 40H,#00H		
	MOV 41H,#25H		;存倒计的秒数
	MOV TMOD,#01H		;选用定时器0工作方式1,同时选用定时器1工作方式0
	MOV TH0,#0DCH		;定时10MS并赋初值
	MOV TL0,#00H								
	SETB EA			;开总中断
	SETB ET0			;允许定时中断
	SETB TR0			;计时开始
	MOV 42H,#00H		
	MOV R6,#00H			;用以控制倒计五秒时是否闪烁与闪铃
	MOV 44H,#00H
;---------------------------------实时时钟程序,预置ds12887的数据--------------------	
	MOV 	DPTR,#7F0AH  		;指向A寄存器
	MOV A,#70H				;分频复位,DV2,DV1,DV0=111
	MOVX @ DPTR,A			
	INC DPTR                      ;指向B寄存器  
	MOV A,#8AH				;停止更新,允许更新中断,程序可初始化时间与日历字节,选BCD码,24小时制
	MOVX @DPTR,A
	MOV DPL,#00H 			;指向秒字节
	CLR A					
	MOVX @DPTR,A			;写入00秒				
	MOV DPL,#02H			;指向分字节
	CLR A
	MOVX @DPTR,A			;写入00分
	MOV DPL,#04H			;指向小时字节
	CLR A
	MOVX @DPTR,A			;写入00时;

	MOV DPTR,#7F0AH
	MOV A,#26H				;DV2,DV1,DV0=010, RS3~RS0=0110
	MOVX @DPTR,A
	INC DPTR
	MOV A,#1AH				;START 
	MOVX @DPTR,A
	
	ACALL DELAY

CYCLE:
	MOV DPTR,#7F0AH
	MOVX A,@DPTR
WAIT:
	JB ACC.7,WAIT			;UPI=1?
	MOV DPL,#00H
	MOV R0,#30H
	MOVX A,@DPTR
	MOV @R0,A

	MOV DPL,#02H
	INC R0
	MOVX A,@DPTR
	MOV @R0,A

	INC R0
	MOV DPL,#04H
	MOVX A,@DPTR
	MOV @R0,A

	LCALL DISP		;等待中断
	LJMP CYCLE
;----------------------------------中断服务程序------------------------------------
PIPO:
	
	INC R6			;1秒闪烁两次
	CJNE R6,#32H,NEXT	
	MOV R6,#00H
	INC 44H
NEXT:	PUSH PSW		;10MS
	PUSH ACC
	MOV TH0,#0DCH		;重置初始 
	MOV TL0,#00H
	INC 40H      
	MOV A,40H
	CJNE A,#64H,RET0
	MOV 40H,#00H
	MOV A,41H
	DEC A
KK:	CJNE A,#1FH,KK0		;到1F时减6
	SUBB A,#06H
	AJMP KK1
KK0:	CJNE A,#0FH,KK1		;到0F时减6
	SUBB A,#06H
KK1:	MOV 41H,A
KK2:	CJNE A,#0FFH,RET0
	MOV R7,42H
AA0:	CJNE R7,#00H,AA1	;25秒5秒15秒5秒循环显示
	MOV 41H,#05H
	INC 42H
AA1:	CJNE R7,#01H,AA2
	MOV 41H,#15H
	INC 42H
AA2:	CJNE R7,#02H,AA3
	MOV 41H,#05H
	INC 42H
AA3: 	CJNE R7,#03H,RET0
	MOV 41H,#25H	
	MOV 42H,#00H
RET0: POP ACC
	POP PSW
	RETI
;----------------------------------------显示子程序--------------------------------------
DISP:	

DISPLAY:
	
	MOV A,30H   
	ANL A,#0FH
	ACALL TABLE
	MOV P2,A
	CLR P0.4
	ACALL DELAY		;进行延时,以免过度闪烁
	SETB P0.4
	MOV A,30H
	SWAP A
	ANL A,#0FH
	ACALL TABLE
	MOV P2,A
	CLR P0.5
	ACALL DELAY
	SETB P0.5

	MOV A,31H   
	ANL A,#0FH
	ACALL TABLE
	MOV P2,A
	CLR P0.6
	ACALL DELAY		;进行延时,以免过度闪烁
	SETB P0.6
	MOV A,31H
	SWAP A
	ANL A,#0FH
	ACALL TABLE
	MOV P2,A
	CLR P0.7
	ACALL DELAY
	SETB P0.7

    	MOV A,32H   
	ANL A,#0FH
	ACALL TABLE
	MOV P2,A
	CLR P0.3
	ACALL DELAY		;进行延时,以免过度闪烁
	SETB P0.3
	MOV A,32H
	SWAP A
	ANL A,#0FH
	ACALL TABLE
	MOV P2,A
	CLR P0.2
	ACALL DELAY
	SETB P0.2

	MOV A,41H   
	ANL A,#0FH
	ACALL TABLE
	MOV P2,A
	CLR P0.1
	ACALL DELAY		;进行延时,以免过度闪烁
	SETB P0.1
	MOV A,41H
	SWAP A
	ANL A,#0FH
	ACALL TABLE
	MOV P2,A
	CLR P0.0
	ACALL DELAY
	SETB P0.0
BB0:	MOV R7,42H
    	CJNE R7,#01H,BB1
	MOV A,44H
	JB ACC.0, BULIAO1	
	SETB P1.3
	MOV P2,#0FFH
	CLR P2.4
	CLR P2.0
	CLR P1.3
	;CPL P1.0
	ACALL DELAY
	SETB P0.7
BULIAO1:
BB1:	MOV R7,42H
	CJNE R7,#02H,BB2
	SETB P1.3
	MOV P2,#0FFH
	CLR P2.2
	CLR P2.3
	CLR P1.3 
	ACALL DELAY
	SETB P1.3
BB2:	MOV R7,42H
	CJNE R7,#03H,BB3
	MOV A,44H
	JB ACC.0, BULIAO	
	SETB P1.3
	MOV P2,#0FFH
	CPL P1.0
	CLR P2.1
	CLR P2.3
	CLR P1.3
	ACALL DELAY
	SETB P1.3
BULIAO:
BB3:	MOV R7,42H
	CJNE R7,#00H,OUT1
	SETB P1.3
	MOV P2,#0FFH
	CLR P2.5
	CLR P2.0
	CLR P1.3 
	ACALL DELAY
	SETB P1.3
OUT1:	RET
TABLE:	INC A
	MOVC A,@A+PC
	RET     
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
;-----------------------------------------延时子程序-------------------------------------	
DELAY: 	PUSH PSW				
	MOV	R3,#10H
DELAY0:	MOV	R4,#50H
DELAY1:	DJNZ	R4,DELAY1
	DJNZ	R3,DELAY0
	POP PSW 
RET
END

⌨️ 快捷键说明

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