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

📄 ds1302.asm

📁 达盛单片机试验箱
💻 ASM
字号:
;/读DS1302秒寄存器内容通过164送LED显示/
;
TIME_RST	BIT		P1.4
TIME_IO		BIT		P1.3
TIME_SCLK	BIT		P1.2
TIME_REG	EQU		2EH					;读写DS1302时存放地址
TIME_DT		EQU		2FH					;读写DS1302时存放地址
			
			ORG		0000H
			
			AJMP	SECOND
;
;***************************************************************
;			/*主程序*/										   *
;***************************************************************
;
			ORG		0030H
			
SECOND:		MOV		SP,#60H
			ACALL	DSINIT				;初始化时钟芯片
			MOV		TIME_REG,#80H
			MOV		TIME_DT,#00H
			CALL	W_WORD				;送00到秒寄存器
			ACALL	DSWRPRT				;写保护
SECOND1:	MOV		TIME_REG,#81H		;读秒寄存器
			CALL	R_WORD
			CALL	DISP				;读到的内容送LED显示
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY		
			AJMP	SECOND1				;继续读秒寄存器
;
;***************************************************************
;			/*显示子程序*/									   *
;***************************************************************
;
DISP:		MOV		A,TIME_DT			;取秒的低位
			ANL		A,#0FH
			ACALL	SEND				;显示
			MOV		A,TIME_DT
			SWAP	A
			ANL		A,#0FH				;取秒的高位
			ACALL	SEND				;显示
			RET

SEND:		MOV		DPTR,#SGTB1
			MOVC	A,@A+DPTR			;取字符
			MOV		SBUF,A				;发送字符			
			JNB		TI,$
			CLR		TI		
			RET
;
;***************************************************************
;			/*万年历初始化程序*/							   *
;***************************************************************
;				
DSINIT:		CLR		TIME_SCLK
			NOP
			CLR		TIME_RST
			MOV		TIME_REG,#8EH		;写保护寄存器(地址)
			MOV		TIME_DT,#00H		;打开写保护(指令)
			ACALL	W_WORD				;写地址、写指令
			MOV		TIME_REG,#90H		;涓流充电寄存器
			MOV		TIME_DT,#0A0H		;R=1K,2 个稳压管
			ACALL	W_WORD
			RET
;
;***************************************************************
;			/*DS1302 单字节命令(数据)写*/					   *
;***************************************************************	
;
W_WORD:		PUSH	PSW
			CLR		PSW.3
			CLR		PSW.4
			CLR		TIME_SCLK
			NOP
			SETB	TIME_RST
			MOV		A,TIME_REG
			ACALL	W_BYTE
			MOV		A,TIME_DT
			ACALL	W_BYTE
			CLR		TIME_RST
			NOP
			CLR		TIME_SCLK
			POP		PSW								
			RET		
;
;***************************************************************
;			/*DS1302 单字节命令(数据)读*/					   *
;***************************************************************
;
R_WORD:		CLR		TIME_SCLK
			NOP
			SETB	TIME_RST
			MOV		A,TIME_REG
			ACALL	W_BYTE
			ACALL	R_BYTE
			MOV		TIME_DT,A
			CLR		TIME_RST
			NOP
			CLR		TIME_SCLK
			RET
;
;***************************************************************
;			/*DS1302 字节写时序*/							   *
;***************************************************************	
;
W_BYTE:		MOV		R6,#08H
			CLR		C
W_BYTE1:	CLR		TIME_SCLK
			RRC		A
			MOV		TIME_IO,C
			NOP
			SETB	TIME_SCLK
			DJNZ	R6,W_BYTE1
			RET		
;
;***************************************************************
;			/*DS1302 字节读时序*/							   *
;***************************************************************		
;
R_BYTE:		MOV		R6,#08H
			CLR		C
R_BYTE1:	CLR		TIME_SCLK
			MOV		C,TIME_IO
			RRC		A
			SETB	TIME_SCLK
			DJNZ	R6,R_BYTE1
			RET	
;
;***************************************************************
;			/*万年历写保护子程序*/							   *
;***************************************************************
;				
DSWRPRT:	MOV		TIME_REG,#10001110B
			MOV		TIME_DT,#10000000B
			CALL	W_WORD
			RET
;
;***************************************************************
;			/*延时子程序*/									   *
;***************************************************************
;
DELAY:		MOV		R4,#250			;延时
DELAY1:		MOV		R5,#200
			DJNZ	R5,$
			DJNZ	R4,DELAY1
			RET
;
;***************************************************************
;			/*字符编码*/									   *
;***************************************************************
;				
SGTB1:		DB	     03H         		;0
		   	DB	     9FH         		;1
		   	DB	     25H         		;2
		   	DB	     0DH         		;3
		   	DB	     99H          		;4
		   	DB	     49H          		;5
		   	DB	     41H          		;6
		   	DB	     1FH         		;7
		   	DB	     01H          		;8
		   	DB	     09H          		;9
		   				
			END							
				
					

⌨️ 快捷键说明

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