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

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

ds1302讀數遇到的問題

作者:fifascut 欄目:單片機
DS1302讀數遇到的問題
能寫芯片也能讀,但是讀出來的數據不準確。雙數全部顯示為0,單數1,5,9都顯示為1。3和5能顯示。是不是我轉化程序有問題啊,就是先把BCD碼轉換為十進制數再顯示。程序如下
Get1302(readtime);

   ACC=readtime[0];
   ACC=ACC>>4;
   a=ACC&0x0f;
   position(1,4);
   write_data(buff[a]);
   ACC=readtime[0];
   b=ACC&0x0f;
   position(1,5);
   write_data(buff[b]);

2樓: >>參與討論
zgl7903
建議建立一個臨時變量,直接使用ACC有危險哦
軟調一下,先保證功能和時序上正確,然后再看時間是否合適

3樓: >>參與討論
fifascut
請問
直接用ACC為什么會有危險啊

4樓: >>參與討論
stycx
acc不是私有的,隨時有可能被別的指令改寫
 
5樓: >>參與討論
fifascut
改了程序后,還是不行啊
Get1302(readtime);

   tamp=readtime[0];
   tamp=tamp>>4;
   a=tamp&0x0f;
   position(1,4);
   write_data(buff[a]);
   tamp=readtime[0];
   b=tamp&0x0f;
   position(1,5);
   write_data(buff[b]);
讀了秒存儲單元,讀數也會每秒改變一次,但就是不符合要求

6樓: >>參與討論
zgl7903
一步步調試啊,要達到什么目的,LZ應該最清楚了
問題出在哪塊,一步步調試,看中間變量到哪塊不對,這個不是什么難題吧

7樓: >>參與討論
stycx
最好貼完整代碼  肯定是轉換的問題
 
8樓: >>參與討論
stycx
DS1302.lib
/*
  CodeVisionAVR C Compiler
  (C) 1998-2004 Pavel Haiduc, HP InfoTech S.R.L.

  DALLAS Semiconductors DS1302 Real Time Clock functions
*/

#include <bcd.h>

void rtc_init(unsigned CHAR tc_on,unsigned CHAR diodes,unsigned CHAR res)
{
res&=3;
if (tc_on) res|=0xa0;
if (diodes==1) res|=4;
else if (diodes==2) res|=8;
else res=0;
ds1302_write(0x8e,0);
ds1302_write(0x90,res);
ds1302_write(0x8e,0x80);
}

void rtc_get_time(unsigned CHAR *hour,unsigned CHAR *min,unsigned CHAR *sec)
{
*hour=bcd2bin(ds1302_read(0x85));
*min=bcd2bin(ds1302_read(0x83));
*sec=bcd2bin(ds1302_read(0x81));
}

void rtc_set_time(unsigned CHAR hour,unsigned CHAR min,unsigned CHAR sec)
{
ds1302_write(0x8e,0);
ds1302_write(0x84,bin2bcd(hour));
ds1302_write(0x82,bin2bcd(min));
ds1302_write(0x80,bin2bcd(sec));
ds1302_write(0x8e,0x80);
}

void rtc_get_date(unsigned CHAR *date,unsigned CHAR *month,unsigned CHAR *year)
{
*date=bcd2bin(ds1302_read(0x87));
*month=bcd2bin(ds1302_read(0x89));
*year=bcd2bin(ds1302_read(0x8d));
}

void rtc_set_date(unsigned CHAR date,unsigned CHAR month,unsigned CHAR year)
{
ds1302_write(0x8e,0);
ds1302_write(0x86,bin2bcd(date));
ds1302_write(0x88,bin2bcd(month));
ds1302_write(0x8c,bin2bcd(year));
ds1302_write(0x8e,0x80);
}


9樓: >>參與討論
fifascut
我用的是51單片機
下面是對1302的讀寫程序
void RTInputByte(uchar ucData)
{
    uchar i;
    ACC = ucData;
    for(i=8; i>0; i--)
    {  
        
        T_IO = ACC0;          
        _nop_();
        _nop_();
        T_CLK = 1;
        _nop_();
        _nop_();
        T_CLK = 0;
        ACC = ACC >> 1;
    }
}


uchar RTOutputByte(void)
{
    uchar i;
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;
              
        T_CLK = 0;
         _nop_();
        
        ACC7 = T_IO;
        _nop_();

        T_CLK = 1;
        _nop_();
        _nop_();
        
    }
    return(ACC);
}

10樓: >>參與討論
fifascut
uchar RTOutputByte(void) 程序有誤,應該是
uchar RTOutputByte(void)
{
    uchar i;
    T_IO=1;
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;
              
        
        
        ACC7 = T_IO;
        _nop_();

        T_CLK = 1;
        _nop_();
        _nop_();
        T_CLK = 0;
         _nop_();
        
    }
    return(ACC);
}

11樓: >>參與討論
stycx
不是說好不用acc了嗎,怎么還用?
 
參與討論
昵稱:
討論內容:
 
 
相關帖子
請教怎樣判斷C8051F的好壞?
請教有誰用過數字信號隔離芯片ADuM1300
用UV3的問題~~~
~今天正式開始用uv3~~誰介紹一下經驗?
電壓測試問題,幫幫忙,急
免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入


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