音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網
技術交流 | 電路欣賞 | 工控天地 | 數字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng)
驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe

請教關于DS1302的問題

作者:hubo450 欄目:單片機
請教關于DS1302的問題
    小弟根據網上找到的程序,結合讀DS1302的datasheet,寫了程序,但是設置日期和時間后,讀出來都是ff或者fe等,怎么改也沒有成功。有兩個問題請教高手:
1、使用示波器量了DS1302的晶振腳,沒有振蕩波形,我搞不清楚是否一加電,32768HZ的晶體就開始振蕩?
2、我讀到的資料中是DS1302應該在上升沿觸發(fā),把數據總線上的數據寫進去,讀也是這樣,我的程序如下:
;////////////////////////////////////////////
;    DS1302的控制程序
;/////////////////////////////////////////////
;    DS1302的引腳定義
;////////////////////////////////////////////
    rtc_rst equ P2.7
        rtc_clk equ P2.0
        rtc_io  equ P2.1
;////////////////////////////////////////////
;                     DS1302用到的寄存器定義
;///////////////////////////////////////////
        address equ 60h
        tmdata  equ 61h
        year    equ 62h
        month   equ 63h
        day     equ 64h
        hour    equ 65h
        min     equ 66h
        sec     equ 67h
        year1   equ 68h
        month1  equ 69h
        day1    equ 6ah
        hour1   equ 6bh
        min1    equ 6ch
        sec1    equ 6dh
         org 0000H
         ljmp main
         org 0100h
main:
         mov year, #06h
         mov month,#03h
         mov day,  #13h
         mov hour, #00h
         mov min,  #10h
         mov sec,  #00h
         lcall ds_op
         nop
         lcall ds_setday
         nop
         nop
         lcall  ds_settm
         nop
         lcall  ds_rdday
         nop
         nop
         lcall  ds_rdtm
         nop


;///////////////////////////////////////////////
;                DS1302讀日期
;///////////////////////////////////////////////
ds_rdday:
         lcall ds_op
         mov address,#8bh
         lcall ds_rddata
         mov day1,r7;讀日期
         mov address,#89h
         lcall ds_rddata
         mov month1,r7;讀月份
         mov address,#8dh
         lcall ds_rddata
         mov year1,r7;讀年份
         ret
;///////////////////////////////////////////////
;                DS1302讀時間
;///////////////////////////////////////////////
ds_rdtm:   lcall ds_op
           mov address,#81h
           lcall ds_rddata
           mov  sec1,r7 ;讀秒
           mov address,#83h
           lcall ds_rddata
           mov min1,r7  ;讀分
           mov address,#85h
           lcall ds_rddata
           mov hour1,r7 ;讀小時
           ret
;///////////////////////////////////////////////
;                DS1302設置日期
;//////////////////////////////////////////////
ds_setday: lcall ds_op
           mov address,#8ah
           mov tmdata,day
           lcall ds_wrdata ;寫日期
           mov address,#88h
           mov tmdata,month
           lcall ds_wrdata;寫月份
           mov address,#8ch
           mov tmdata,year
           lcall ds_wrdata;寫年
           ret
;///////////////////////////////////////////////
;                DS1302設置時間
;//////////////////////////////////////////////
ds_settm:  lcall ds_op;打開寫保護
           mov address,#80h
           mov tmdata,sec
           lcall ds_wrdata;寫秒
           mov address,#82h
           mov tmdata,min
           lcall ds_wrdata;寫分
           mov address,#84h
           mov tmdata,hour
     &nbs
2樓: >>參與討論
leituoxin
你的程序我沒看
你的程序我沒看,如果是沒有振蕩的話,你可能振蕩的控制字沒有寫,DS1302有停振的控制字

3樓: >>參與討論
sixpower
我能通過的程序
void rd_DS1302(void)               
           {
         byte i;
         byte t2;
         byte ddd;
        
         IO=1;
         RST=0;
         CLK=0;

         t2=10;
           while(t2){t2--;}
        RST=1;
        t2=10;

      for(i=0;i<8;i++) {
        CLK=0;

        ddd=ds_add;
        ddd=ddd & 0x01;
        if(ddd==0x00) IO=0;  
          else IO=1;
         
          t2=10;
        while(t2){t2--;}
           CLK=1;
          ds_add=ds_add>>1;

       t2=10;
        while(t2){t2--;}
         }
      
         IO=1;
         ds_data=0;
        for(i=0;i<8;i++) {
        CLK=0;
         t2=5;
         while(t2){t2--;}
        ds_data=ds_data>>1;
       if(IO==1) ds_data=ds_data | 0x80;
       CLK=1;
       t2=5;
       while(t2){t2--;}
        ;

         }
       RST=0;
    }


void wr_DS1302(void)               
           {
         byte i;
         byte t2;
         byte ddd;
        
         IO=1;
         RST=0;
         CLK=0;

         t2=3;
           while(t2){t2--;}
        RST=1;
        t2=10;

      for(i=0;i<8;i++) {
        CLK=0;

        ddd=ds_add;
        ddd=ddd & 0x01;
        if(ddd==0x00) IO=0;  
          else IO=1;
         
          t2=3;
        while(t2){t2--;}
           CLK=1;
          ds_add=ds_add>>1;

       t2=3;
        while(t2){t2--;}
         }
      

            for(i=0;i<8;i++) {
        CLK=0;

        ddd=ds_data;
        ddd=ddd & 0x01;
        if(ddd==0x00) IO=0;  
          else IO=1;
         
          t2=3;
        while(t2){t2--;}
           CLK=1;
          ds_data=ds_data>>1;

       t2=10;
        while(t2){t2--;}

         }
    RST=0;
    }



         ds_add=0x81;  // DS1302讀數據
         rd_DS1302();

         ds_add=0x80;    //DS1302寫數據
         ds_data=mem_data;
         wr_DS1302();



4樓: >>參與討論
hubo450
振蕩的命令字是把秒寄存器清0嗎?
 
5樓: >>參與討論
leituoxin
振蕩的命令字是把秒寄存器清0嗎?
是的。

6樓: >>參與討論
winhiwang
上電后32768是不振的,要軟件啟動,我之前發(fā)過帖子可查找一下
 
7樓: >>參與討論
sdyxm21
[


參與討論
昵稱:
討論內容:
 
 
相關帖子
軟硬件復位
急求編程一份
求助,只有一個串口怎么擴展,進行多單片機通訊呀
單片機引腳剛好少一個最好怎么辦
12M晶體得到9600波特率
免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號