找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3626|回复: 4
打印 上一主题 下一主题
收起左侧

STC89C52单片机时钟温度控制系统怎么加ds1302芯片

[复制链接]
跳转到指定楼层
楼主
温度控制系统都差不多设计成了,就差一个时钟电路,想用DS1302时钟芯片,请问一下要怎么加上去,关于原理图和C语言编程方面要怎么改?

1515484016(1).png (64.35 KB, 下载次数: 30)

未加DS1302时钟芯片原理图

未加DS1302时钟芯片原理图

1515484301(1).png (14.53 KB, 下载次数: 39)

想加一个时钟显示,这是主流程图

想加一个时钟显示,这是主流程图
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:263575 发表于 2018-1-9 16:43 | 只看该作者
就差一个DS1302时钟电路的汇编语言啊,求大神!
回复

使用道具 举报

板凳
ID:263575 发表于 2018-1-9 16:44 | 只看该作者
求DS1302时钟电路的汇编语言,不用很长,求大神!
回复

使用道具 举报

地板
ID:7485 发表于 2018-1-9 19:51 | 只看该作者
;这是DS1302的读写子程序部分,已经注释的很清楚了。
;********************************************************
;DS1302 DS1302         DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302
;以下是有关DS1302的读写、设置程序
;由于DS1302的寄存数据是压缩BCD码,为了和其他程序对接方便,
;MCU的数据仍然用16进制,所以读出和写入前先转换成16进制
;**********************************************************
ZH_16_BCD:
         MOV      A,  YEAR          ;为了和显示子程序接口进行了调整
                 CALL     ZH_16_BCD1
                 MOV          H_YEAR,  A

         MOV      A,   MONTH
                 CALL     ZH_16_BCD1
                 MOV      H_MONTH, A                    ;

         MOV      A,   DATE
                 CALL     ZH_16_BCD1
                 MOV      H_DATE,  A                         ;

         MOV      A,      HOUR     ;         
                 CALL     ZH_16_BCD1
                 MOV      H_HOUR,  A

             MOV      A,    MIN_F    ;
                 CALL     ZH_16_BCD1
                 MOV      H_MIN_F,  A

                 MOV      A,      SEC      ;
                 CALL     ZH_16_BCD1
                 MOV      H_SEC,   A
                 RET
ZH_16_BCD1:
         MOV      B,  #10
                 DIV          AB                                 ;16进制转换到10进制后写入1302
                 SWAP     A                                         ;"压缩BCD码"
                 ADD      A,   B
                 RET      
;**********************************************************
ZH_BCD_16:                                  ;二—十BCD码转换成十六进制码
            PUSH   00H                  
            MOV    @R0,   #0             ;BCD码转换成16进制
            XCHD   A,   @R0              ;个位转到@R0暂存
            SWAP   A                     ;十位转到低4位
            MOV    B,   #0AH             ;十位数乘以10(0AH)
            MUL    AB                    ;
            ADD    A,   @R0              ;加上个位数
            POP    00H
            RET
;********************************************
;入口参数:写入或读出的首数据在H_SEC中,写或读的首地址
;固定为秒;写入或读出的字节个数在R7中
;********************************************
RW1302:
          MOV   A,  CMD1302
RW1302_11:
         CLR    RST1302
         CLR    SCLK1302                           ;拉高RST前,一定置SCLK低
         NOP                                               ;
         SETB  RST1302                                   ;拉高RST,对1302读写有效
RW1302_1:                                                           ;发送指令
         MOV   A,   CMD1302                           ;取指令
         MOV   R6,   #8                               ;循环,8位指令
RW1302_2:                                                           ;
         CLR   SCLK1302                                   ;
         RRC   A                                       ;
         MOV   IO1302,   C                           ;
         NOP                                           ;
         SETB  SCLK1302                                   ;
         DJNZ  R6,  RW1302_2                   ;以上6行是写指令
RW1302_22:
         MOV   R6,  #8                               ;8位数据
                 MOV   A,       CMD1302                   ;仅仅判断程序走向
         JNB   ACC.0,   RW1302_4           ;读写分别处理,ACC.0=0,转
RW1302_3:                                                           ;ACC.0=1,是读,转来
         CLR   SCLK1302                                   ;以下是读数据
         NOP                                               ;
         MOV   C,   IO1302
                 NOP                           ;
         SETB  SCLK1302                            ;
         RRC   A                                       ;
         DJNZ  R6,  RW1302_3           ;以上7行是写数据  
         MOV   @R0,  A                               ;送缓存
         SJMP  RW1302_6                               ;跳过“写”
RW1302_4:                                                         ;
         MOV   A,  @R0                               ;如果ACC.0=0,是写,转来
RW1302_5:                                                               ;
         RRC   A                                       ;
         CLR   SCLK1302                                   ;
         MOV   IO1302,   C                           ;
         NOP                                               ;
         SETB  SCLK1302                                   ;
         DJNZ  R6,   RW1302_5                   ;
RW1302_6:                                                           ;
         INC   R0                                       ;指向下一缓存位
         DJNZ  R7,   RW1302_22         ;字节数没完,转回继续
         CLR   RST1302                                   ;读写完后,拉低RST,禁止读写1302
;         NOP                                                ;
;         CLR   SCLK1302                           ;
         RET                                               ;
;********************************************
;INITIALIZE DS1302, 打开写保护
;设置充电, 启动时钟
;********************************************           
INIT1302:                                                      ;
         CLR    SCLK1302                           ;
         CLR    RST1302                                   ;

                 MOV    CMD1302,   #8EH        ;打开写保护,允许写入
                 MOV    H_SEC,     #0          ;读写的数据
                 MOV    R7,   #1                           ;读写的字节数
         MOV    R0,       #H_SEC           ;地址送R0
         CALL   RW1302                                   ;调用读写子程序

                 MOV    CMD1302,   #90H        ;涓流充电
                 MOV    H_SEC,     #0A5H       ;数据,一个二极管,2K电阻
                 MOV    R7,   #1                           ;读写的字节数
         MOV    R0,     #H_SEC               ;
         CALL   RW1302                                   ;调用读写子程序

             CALL   ZH_16_BCD              ;将时间值16进制转换成BCD
                 MOV    H_SEC+7,   #00                   ;1302第8个寄存器,写保护
                 MOV    CMD1302,   #0BEH       ;连续写时钟数据指令
                 MOV    R7,   #8                           ;读写的字节数,设置7,也是连续8个数据
         MOV    R0,     #H_SEC               ;
         CALL   RW1302                                   ;调用读写子程序

                 MOV    CMD1302,   #11000000B  ;写入1302 RAM 00H单元
                 MOV    H_SEC,     #00000101B  ;读写的数据,写入05H,设置过标记
                 MOV    R7,   #1                           ;读写的字节数
         MOV    R0,       #H_SEC           ;地址送R0
         CALL   RW1302                                   ;调用读写子程序
                           
                 MOV    CMD1302,   #10000000B  ;写秒寄存器指令
                 MOV    A,   SEC                           ;H_SEC的值已被改变,重读
                 CALL   ZH_16_BCD1                           ;写入“秒“当前值
                 CLR    ACC.7                                   ;最高位=0,启动时钟(冗余)
                 MOV    H_SEC,     A           ;读写的数据,最高位为0,启动时钟
                 MOV    R7,   #1                           ;读写的字节数
         MOV    R0,     #H_SEC               ;
         CALL   RW1302                                   ;调用读写子程序

                 MOV    CMD1302,   #10001110B  ;设置写保护指令
                 MOV    H_SEC,     #10000000B  ;读写的数据,不允许写入
                 MOV    R7,        #1                   ;读写的字节数
         MOV    R0,        #H_SEC           ;地址送R0
         CALL   RW1302                                   ;调用读写子程序
         RET                                               
;DS1302 DS1302         DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302
回复

使用道具 举报

5#
ID:263575 发表于 2018-1-10 12:39 | 只看该作者
我就一个C语言小白,有些不懂想问问,就是你给的这个编程,我能直接添加进去么?还是作为子文件?该怎么操作?那个温度测试的编程我已经有了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表