DS1302程序大奉献
DS1302 采用3线与单片机相连,可以存取内部的寄存器和RAM
本程序提供了DS1302的初始化程序,单字节读写和连续读写程序
其中初始化程序很重要,当初就是因为初始化不好不能启动DS1302
并且单片机每次上电都要执行此程序.我使用该芯片多年了,一直没有
出现什么问题.
另外需要注意的是: 上电时在VCC电压达到2.0伏前RST脚须保持逻辑"0".
RST脚设为逻辑"1"前,SCLK须为逻辑"0".
我感觉DS1302的使用并不复杂,选择晶振也很重要,不匹配的晶振
也不容易起振.我一般采用小园的,电子表上常用的那种.
目前我正在使用HT1380/HT1381 不同的是不含涓流充电和备用
电池电路,可以自己设计一个,用二极管比较简单.
欢迎大家与我探讨
;51MCU的 DS1302数字时钟芯片 控制程序
; By:winhi
; winhimcu@sohu.com
;内存及口线定义
;读写DS1302时使用的内存
CDAT1 EQU 2EH
CDAT2 EQU 2FH
;DS1302 在内存映射 BCD码
;所有数据必须依次存放 秒,分,时,日,月,星期,年
CSEC EQU 30H ;秒数据
CMIN EQU 31H ;分数据
CHR EQU 32H ;小时数据
CDATE EQU 33H ;日数据
CMONTH EQU 34H ;月数据
CDAY EQU 35H ;星期数据
CYEAR EQU 36H ;年数据低2位
;读写口线定义
CRST EQU P1.3
CIO EQU P1.1
CSCLK EQU P1.2
;------应用方法
;上电复位后初始化DS1302
ACALL DSINIT
MOV CDAT1,#10000001B
ACALL DSRORD
ANL A,#01111111B
MOV CDAT2,A
MOV CDAT1,#10000000B
ACALL DSWORD
ACALL DSWRPRT ;写保护
;
;只读出秒数据 返回在A中
MOV CDAT1,#10000001B
ACALL DSRORD
;
;读DS1302中的时钟数据读入到内存
ACALL DSRDC
;
;将内存中的时钟数据写入到DS1302
MOV CDAT1,#10001110B ;打开写保护
MOV CDAT2,#00000000B
ACALL DSWORD
ACALL DSWRC ;数据写入到DS1302
ACALL DSWRPRT ;写保护
;
;----DS1302 控制子程序
; 初始化 DS1302
; 打开写保护 设置涓流充电
DSINIT: CLR CSCLK
NOP
CLR CRST
MOV CDAT1,#10001110B ;打开写保护
MOV CDAT2,#00000000B
ACALL DSWORD
MOV CDAT1,#10010000B ;涓流充电 R0=2K
MOV CDAT2,#10100101B ;R1=2K 一个二极管
ACALL DSWORD
RET
;
;读DS1302 内容到内存
; 寄存器区: 0区
DSRDC: PUSH PSW
CLR PSW.3
CLR PSW.4
MOV R7,#7
MOV R0,#CSEC
MOV B,#10000001B ;READ DS1302 SEC
DSRDC1: CLR CSCLK
NOP
SETB CRST
MOV A,B
ACALL DSWRB
ACALL DSRDB
MOV @R0,A
INC R0 ;NEXT ADDRESS/DATA
MOV A,B
ADD A,#0000010B ;ADDRESS+1
MOV B,A
CLR CRST
NOP
CLR CSCLK
DJNZ R7,DSRDC1
POP PSW
RET
;
;写内存到DS1302
; 寄存器区: 0区
DSWRC: PUSH PSW
CLR PSW.3
CLR PSW.4
MOV R7,#7
MOV R0,#CSEC
MOV B,#10000000B ;WRITE DS1302 SEC
DSWRC1: CLR CSCLK
NOP
SETB CRST
MOV A,B
ACALL DSWRB
MOV A,@R0
ACALL DSWRB
INC R0 ;NEXT ADDRESS/DATA
MOV A,B
ADD A,#0000010B ;ADDRESS+1
MOV B,A
CLR CRST
NOP
CLR CSCLK
DJNZ R7,DSWRC1
POP PSW
RET
;
;DS1302 单字节命令(数据)写
; DSDAT1=地址 DSDAT2=命令/数据
; 寄存器区: 0区
DSWORD: PUSH PSW
CLR PSW.3
CLR PSW.4
CLR CSCLK
NOP
SETB CRST
MOV A,CDAT1
ACALL DSWRB
MOV A,CDAT2
ACALL DSWRB
CLR CRST
NOP
CLR CSCLK
POP PSW
RET
;
;DS1302 单字节命令(数据)读
; DSDAT1=地址 DSDAT2=命令/数据
; 寄存器区: 0区
DSRORD: PUSH PSW
CLR PSW.3
CLR PSW.4
CLR CSCLK
NOP
SETB CRST
MOV A,CDAT1
ACALL DSWRB
ACALL DSRDB
MOV CDAT2,A
CLR CRST
NOP
CLR CSCLK
POP PSW
RET
;
;DS1302 字节写时序
; 内容在A中
DSWRB: MOV R6,#8
CLR C
DSWRB1: CLR CSCLK
RRC A
MOV CIO,C
NOP
SETB CSCLK
DJNZ R6,DSWRB1
RET
;
;DS1302 字节读时序
; 内容在A中
DSRDB: MOV R6,#8
CLR C
DSRDB1: CLR CSCLK
NOP
MOV C,CIO
RRC A
SETB CSCLK
DJNZ R6,DSRDB1
RET
;
;DS1302写保护
DSWRPRT:MOV CDAT1,#10001110B
MOV CDAT2,#10000000B
ACALL DSWORD
RET
[em26][em26]
关键词: DS1302 程序 奉献 CDAT1 数据 ACA
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |