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

📄 ds1302时钟芯片源代码(a51格式).txt

📁 压缩包中包括多个驱动程序的原代码
💻 TXT
字号:
ds1302时钟芯片源代码(A51格式) 
发表时间:2005-12-13 19:00:58   浏览人数:49 
;*********************************************************************
; Revision History:
;********************************************************************* 


;---------- 管脚定义 --------------

RST EQU P1.5 ;DS1302
IO EQU P1.6
SCLK EQU P1.7 


;*******************************************************************************
; The following is about DS1302
;*******************************************************************************

;-------------------------------------------------------------------------------
; RST1302 Reset 1302
; Function: Sends the command to reset 1302
; Calls: None
; InPara: None
; OutPara: None
; Register Usage: None 
;-------------------------------------------------------------------------------
RST1302:clr sclk
clr rst
setb rst
ret

;-------------------------------------------------------------------------------
; WRBYTE Write a byte to 1302
; Function: Shifts out a byte, starting with the LSB, to the RAM
; Calls: None
; InPara: A = the byte to be sent
; OutPara: None
; Register Usage: R2 
;-------------------------------------------------------------------------------
WRBYTE: mov r2,#08
wrbyt1: rrc a
mov io,C
clr sclk
setb sclk
djnz r2,wrbyt1 
ret 

;-------------------------------------------------------------------------------
; RDBYTE Read a byte from 1302
; Function: Recieves a byte, LSB first, from the RAM
; Calls: None
; InPara: None
; OutPara: A = recieved byte
; Register Usage: R2 
;-------------------------------------------------------------------------------
RDBYTE: mov R2, #08 ; Set bit counter to eight
clr a
setb io 
rdbyt1: setb sclk ; Bring SCK high
clr sclk ; Bring SCK low
mov C, io ; Receive data bit and store in carry
rrc A ; Shift byte right through carry 
djnz R2, rdbyt1 ; Finish if last data bit
ret 

;-------------------------------------------------------------------------------------------------
; GETTIME Get time from 1302
; Function: 
; Calls: wrbyte,rdbyte
; InPara: R0 = Last address to store time
; OutPara: None
; Register Usage: R0,A 
;-------------------------------------------------------------------------------------------------
gettime:lcall rst1302
mov a,#0bfh
lcall wrbyte ;clock burst read (eight registers)
lcall rdbyte ;sec
mov @r0,a
dec r0
lcall rdbyte ;min
mov @r0,a
dec r0
lcall rdbyte ;hour
mov @r0,a
dec r0
lcall rdbyte ;date
mov @r0,a
dec r0
lcall rdbyte ;month
mov @r0,a
dec r0
lcall rdbyte ;day
mov @r0,a
dec r0
lcall rdbyte ;year
mov @r0,a
dec r0
lcall rdbyte ;must read control register in burst mode
lcall rst1302
clr rst
ret 

;-------------------------------------------------------------------------------------------------
; SETTIME Set time to 1302
; Function: 
; Calls: wrbyte,rdbyte
; InPara: R0 = Last address of the time to be sent
; OutPara: None
; Register Usage: R0,A 
;-------------------------------------------------------------------------------------------------
settime:lcall rst1302
mov a,#8eh
lcall wrbyte ;control register
clr a
lcall wrbyte ;disable write protect

lcall rst1302
mov a,#90h
lcall wrbyte ;trickle charger register
mov a,#0abh
lcall wrbyte ;enable, 2 diodes, 8K resistor

lcall rst1302
mov a,#0beh
lcall wrbyte ;clock burst write (eight registers)

mov a,@r0
dec r0
lcall wrbyte ;sec
mov a,@r0
dec r0
lcall wrbyte ;min
mov a,@r0
dec r0
lcall wrbyte ;hour
mov a,@r0
dec r0
lcall wrbyte ;date
mov a,@r0
dec r0
lcall wrbyte ;mon
mov a,@r0
dec r0
lcall wrbyte ;day
mov a,@r0
dec r0
lcall wrbyte ;year

mov a,#80h
lcall wrbyte ;must write control register in burst mode, enable write protect
lcall rst1302
clr rst
ret

;******************************************************************************* 
 
 
 

⌨️ 快捷键说明

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