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网站征稿正在进行时,欢迎踊跃投稿啦 | |
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! |