找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4361|回復(fù): 4
收起左側(cè)

STC89C52單片機(jī)時(shí)鐘溫度控制系統(tǒng)怎么加ds1302芯片

[復(fù)制鏈接]
ID:263575 發(fā)表于 2018-1-9 15:52 | 顯示全部樓層 |閱讀模式
溫度控制系統(tǒng)都差不多設(shè)計(jì)成了,就差一個(gè)時(shí)鐘電路,想用DS1302時(shí)鐘芯片,請(qǐng)問一下要怎么加上去,關(guān)于原理圖和C語言編程方面要怎么改?

未加DS1302時(shí)鐘芯片原理圖

未加DS1302時(shí)鐘芯片原理圖

想加一個(gè)時(shí)鐘顯示,這是主流程圖

想加一個(gè)時(shí)鐘顯示,這是主流程圖
回復(fù)

使用道具 舉報(bào)

ID:263575 發(fā)表于 2018-1-9 16:43 | 顯示全部樓層
就差一個(gè)DS1302時(shí)鐘電路的匯編語言啊,求大神!
回復(fù)

使用道具 舉報(bào)

ID:263575 發(fā)表于 2018-1-9 16:44 | 顯示全部樓層
求DS1302時(shí)鐘電路的匯編語言,不用很長(zhǎng),求大神!
回復(fù)

使用道具 舉報(bào)

ID:7485 發(fā)表于 2018-1-9 19:51 | 顯示全部樓層
;這是DS1302的讀寫子程序部分,已經(jīng)注釋的很清楚了。
;********************************************************
;DS1302 DS1302         DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302
;以下是有關(guān)DS1302的讀寫、設(shè)置程序
;由于DS1302的寄存數(shù)據(jù)是壓縮BCD碼,為了和其他程序?qū)臃奖?
;MCU的數(shù)據(jù)仍然用16進(jìn)制,所以讀出和寫入前先轉(zhuǎn)換成16進(jìn)制
;**********************************************************
ZH_16_BCD:
         MOV      A,  YEAR          ;為了和顯示子程序接口進(jìn)行了調(diào)整
                 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進(jìn)制轉(zhuǎn)換到10進(jìn)制后寫入1302
                 SWAP     A                                         ;"壓縮BCD碼"
                 ADD      A,   B
                 RET      
;**********************************************************
ZH_BCD_16:                                  ;二—十BCD碼轉(zhuǎn)換成十六進(jìn)制碼
            PUSH   00H                  
            MOV    @R0,   #0             ;BCD碼轉(zhuǎn)換成16進(jìn)制
            XCHD   A,   @R0              ;個(gè)位轉(zhuǎn)到@R0暫存
            SWAP   A                     ;十位轉(zhuǎn)到低4位
            MOV    B,   #0AH             ;十位數(shù)乘以10(0AH)
            MUL    AB                    ;
            ADD    A,   @R0              ;加上個(gè)位數(shù)
            POP    00H
            RET
;********************************************
;入口參數(shù):寫入或讀出的首數(shù)據(jù)在H_SEC中,寫或讀的首地址
;固定為秒;寫入或讀出的字節(jié)個(gè)數(shù)在R7中
;********************************************
RW1302:
          MOV   A,  CMD1302
RW1302_11:
         CLR    RST1302
         CLR    SCLK1302                           ;拉高RST前,一定置SCLK低
         NOP                                               ;
         SETB  RST1302                                   ;拉高RST,對(duì)1302讀寫有效
RW1302_1:                                                           ;發(fā)送指令
         MOV   A,   CMD1302                           ;取指令
         MOV   R6,   #8                               ;循環(huán),8位指令
RW1302_2:                                                           ;
         CLR   SCLK1302                                   ;
         RRC   A                                       ;
         MOV   IO1302,   C                           ;
         NOP                                           ;
         SETB  SCLK1302                                   ;
         DJNZ  R6,  RW1302_2                   ;以上6行是寫指令
RW1302_22:
         MOV   R6,  #8                               ;8位數(shù)據(jù)
                 MOV   A,       CMD1302                   ;僅僅判斷程序走向
         JNB   ACC.0,   RW1302_4           ;讀寫分別處理,ACC.0=0,轉(zhuǎn)
RW1302_3:                                                           ;ACC.0=1,是讀,轉(zhuǎn)來
         CLR   SCLK1302                                   ;以下是讀數(shù)據(jù)
         NOP                                               ;
         MOV   C,   IO1302
                 NOP                           ;
         SETB  SCLK1302                            ;
         RRC   A                                       ;
         DJNZ  R6,  RW1302_3           ;以上7行是寫數(shù)據(jù)  
         MOV   @R0,  A                               ;送緩存
         SJMP  RW1302_6                               ;跳過“寫”
RW1302_4:                                                         ;
         MOV   A,  @R0                               ;如果ACC.0=0,是寫,轉(zhuǎn)來
RW1302_5:                                                               ;
         RRC   A                                       ;
         CLR   SCLK1302                                   ;
         MOV   IO1302,   C                           ;
         NOP                                               ;
         SETB  SCLK1302                                   ;
         DJNZ  R6,   RW1302_5                   ;
RW1302_6:                                                           ;
         INC   R0                                       ;指向下一緩存位
         DJNZ  R7,   RW1302_22         ;字節(jié)數(shù)沒完,轉(zhuǎn)回繼續(xù)
         CLR   RST1302                                   ;讀寫完后,拉低RST,禁止讀寫1302
;         NOP                                                ;
;         CLR   SCLK1302                           ;
         RET                                               ;
;********************************************
;INITIALIZE DS1302, 打開寫保護(hù)
;設(shè)置充電, 啟動(dòng)時(shí)鐘
;********************************************           
INIT1302:                                                      ;
         CLR    SCLK1302                           ;
         CLR    RST1302                                   ;

                 MOV    CMD1302,   #8EH        ;打開寫保護(hù),允許寫入
                 MOV    H_SEC,     #0          ;讀寫的數(shù)據(jù)
                 MOV    R7,   #1                           ;讀寫的字節(jié)數(shù)
         MOV    R0,       #H_SEC           ;地址送R0
         CALL   RW1302                                   ;調(diào)用讀寫子程序

                 MOV    CMD1302,   #90H        ;涓流充電
                 MOV    H_SEC,     #0A5H       ;數(shù)據(jù),一個(gè)二極管,2K電阻
                 MOV    R7,   #1                           ;讀寫的字節(jié)數(shù)
         MOV    R0,     #H_SEC               ;
         CALL   RW1302                                   ;調(diào)用讀寫子程序

             CALL   ZH_16_BCD              ;將時(shí)間值16進(jìn)制轉(zhuǎn)換成BCD
                 MOV    H_SEC+7,   #00                   ;1302第8個(gè)寄存器,寫保護(hù)
                 MOV    CMD1302,   #0BEH       ;連續(xù)寫時(shí)鐘數(shù)據(jù)指令
                 MOV    R7,   #8                           ;讀寫的字節(jié)數(shù),設(shè)置7,也是連續(xù)8個(gè)數(shù)據(jù)
         MOV    R0,     #H_SEC               ;
         CALL   RW1302                                   ;調(diào)用讀寫子程序

                 MOV    CMD1302,   #11000000B  ;寫入1302 RAM 00H單元
                 MOV    H_SEC,     #00000101B  ;讀寫的數(shù)據(jù),寫入05H,設(shè)置過標(biāo)記
                 MOV    R7,   #1                           ;讀寫的字節(jié)數(shù)
         MOV    R0,       #H_SEC           ;地址送R0
         CALL   RW1302                                   ;調(diào)用讀寫子程序
                           
                 MOV    CMD1302,   #10000000B  ;寫秒寄存器指令
                 MOV    A,   SEC                           ;H_SEC的值已被改變,重讀
                 CALL   ZH_16_BCD1                           ;寫入“秒“當(dāng)前值
                 CLR    ACC.7                                   ;最高位=0,啟動(dòng)時(shí)鐘(冗余)
                 MOV    H_SEC,     A           ;讀寫的數(shù)據(jù),最高位為0,啟動(dòng)時(shí)鐘
                 MOV    R7,   #1                           ;讀寫的字節(jié)數(shù)
         MOV    R0,     #H_SEC               ;
         CALL   RW1302                                   ;調(diào)用讀寫子程序

                 MOV    CMD1302,   #10001110B  ;設(shè)置寫保護(hù)指令
                 MOV    H_SEC,     #10000000B  ;讀寫的數(shù)據(jù),不允許寫入
                 MOV    R7,        #1                   ;讀寫的字節(jié)數(shù)
         MOV    R0,        #H_SEC           ;地址送R0
         CALL   RW1302                                   ;調(diào)用讀寫子程序
         RET                                               
;DS1302 DS1302         DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302 DS1302
回復(fù)

使用道具 舉報(bào)

ID:263575 發(fā)表于 2018-1-10 12:39 | 顯示全部樓層
我就一個(gè)C語言小白,有些不懂想問問,就是你給的這個(gè)編程,我能直接添加進(jìn)去么?還是作為子文件?該怎么操作?那個(gè)溫度測(cè)試的編程我已經(jīng)有了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表