ds1302时钟芯片初始化,自动决定DS1302是否需要初始化程序

接口/时钟/PLL

49人已加入

描述

  ds1302芯片时钟芯片大家都在问到底需要不需要初始化?这篇文章将会给大家一个程序,可以自动决定DS1302是否需要初始化。

  方法很简单:程序重新运行时,在 1302 初始化子程序之前,首先读取一次 1302 的信息,然后,对其信息进行分析或比较,以此来决定是否需要初始化!

  我们利用 1302 自带的 31 个RAM ,仅仅使用一个 RAM 就可以了。在第一次上电 1302 读取数据后,同时也读取一个 RAM 的数据,拿这个数据去比较一个特征码,相同则不用运行 1302 初始化程序,不相同则需要运行DS1302 的初始化程序。

  

  自动决定DS1302是否需要初始化程序

  ORG 0000H

  JMP B_REST

  ORG 050H

  B_REST:

  MOV WDTCR,#WDTOF

  MOV SP,#0E0H;SP[81H],范围: RAM 在 00H--0FFH.

  CALL Z_CRAM

  CALL Z_OFF8X8 ;关闭8*8点阵----仅仅51hei-5 使用

  CALL GET_TIME ;读取1302

  MOV A,4FH ;特征码在 4FH

  CJNE A,#0ABH,Z_INIT1302 ;特征码是 #0abh (也可以其它啊!)

  JMP Z_LOOP ;特征码相同跳转到 Z_LOOP

  Z_INIT1302:

  CALL DS1302_INIT ;特征码不同运行 1302 初始化程序

  Z_LOOP:

  CALL GET_TIME ;读取1302

  JNB F_1302,Z_LOOP0 ;F_1302=1刷新显示数据

  CLR F_1302

  CALL Z_RTCBIN

  Z_LOOP0:

  CALL B_LEDXS

  JMP Z_LOOP

  DS1302_INIT:

  CLR RST

  CLR CLK

  NOP

  NOP

  SETB RST

  ;实时时钟写入

  ZM0 07FH

  MOV R1,#80H

  Z_WR1302: ;秒,分,时,天,月份,星期,年度==81H,83H,85H,97H,89H,8BH,8DH

  MOV R0,#00H

  CALL WRITE

  INC2 R1

  COM_ R1,#86H,Z_WR1302

  MOV R0,#01H ;天

  CALL WRITE

  INC2 R1

  MOV R0,#01H ;月份

  CALL WRITE

  INC2 R1

  MOV R0,#06H ;星期

  CALL WRITE

  INC2 R1

  MOV R0,#11H ;年度

  CALL WRITE

  ZB1 F_1302

  MOV R1,#0C8H

  MOV R0,#0ABH ;写入特征码

  CALL WRITE

  RET

  ;读时间 数据子程序

  GET_TIME: ; ;秒,分,时,天,月份,星期,年度==81H,83H,85H,97H,89H,8BH,8DH

  MOV R0,#40H

  MOV R1,#81H; 读秒

  Z_GET_TIME0:

  CALL READ

  MOV @R0,A;41H,

  INC R1

  INC R1

  INC R0

  COM_ R0,#047H,Z_GET_TIME0

  MOV R1,#0C9H ;读出特征码;内部RAM命令与地址:C0H--FDH.奇数=读,偶数=写。

  CALL READ

  MOV 4FH,A ;读出特征码保存到4FH

  MOV A,40H

  CJNE A,7FH,Z_F1302 ;7fh 是上一次秒数值的备份

  RET

  Z_F1302:

  MOV 7FH,A ;7fh 是秒数值的备份

  ZB1 F_1302 ;设置刷新显示标志

  INC 7EH

  COM_ 7EH,#5,Z_7EH

  ZM0 7EH

  CPL FRLSZ ;反转轮流显示标志

  Z_7EH:

  RET

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分