久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7364|回復: 7
打印 上一主題 下一主題
收起左側

關于DS1302不能正常寫入80+年的問題研究

[復制鏈接]
跳轉到指定樓層
樓主
很早以前就遇到過這個問題,當時沒有記,現有又遇到這個問題,果斷要記下。特發在51hei論壇,以后遇到的朋友可以作為參考。


下面是有問題的程序:
void Write_Ds1302_Byte(unsigned char temp1)
{
unsigned char i;
for(i=0;i<8;i++) //循環8次 寫入數據
{
SCK=0;
SDA=temp1&0x01; //每次傳輸低字節
temp1>>=1; //右移一位
SCK=1;
}
}
Write_Ds1302_Byte(address); //寫入“讀”控制命令
for (i=0;i<8;i++) //循環8次 讀取數據
{
if(SDA)
temp|=0x80; //每次傳輸低字節
SCK=0;
temp>>=1; //右移一位
SCK=1;
_nop_();
}

    這個程序寫完地址后,SCL還是高電平就開始讀數據,而顯然這時DS1302還沒有將數據準備好,數據是在那個下降沿后才會有觸發的,那么第一個讀到的數據就是無效的數據,依此類推,最高位的數據就會沒有捕捉到了,然而這個程序又有一個致命的錯誤,就是這個程序的正確的思路應該是讀取8次移位7次,那么這里卻是移位了8次,最后直接導致最先被讀到的無效位被移出去了,而真正有用的最高位沒有被讀到,這也就是為何這個程序也能夠在年不超過80年的時候沒有出現問題的原因了。因為80的BCD碼的最高位是1,所以會出現問題,因為這個最高位就沒有被讀到。
這里說明幾點DS1302這個芯片是上升沿寫入數據,下降沿觸發數據輸出,

   還有一個就是這種對于從機先發送數據低位的接收,如果用這位移位的方式,進入for循環后一定是先移位再讀數據的方法,這樣第一次的移位就是無效的了,也就是能夠做到讀取8次但是只移位7次。因為第一次讀到的最低位的數據只需要移動7次就可以移到最低位了。如果是寫數據的方式則剛好是相反的,必須要先將低位數據寫到數據線上,然后再移動,否則的話低位數據就會丟失了。

評分

參與人數 1黑幣 +5 收起 理由
凌南之楓 + 5 絕世好帖!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩1
回復

使用道具 舉報

沙發
ID:71748 發表于 2015-1-6 20:22 | 只看該作者
求解決辦法啊。。。。。
回復

使用道具 舉報

板凳
ID:92336 發表于 2015-10-13 14:09 | 只看該作者
本帖最后由 rebosun 于 2015-10-13 14:11 編輯

/****************************************************************************/
unsigned char Read_Ds1302 ( unsigned char address )
{
  unsigned char i,temp=0x00;
  RST=0;
_nop_();
  SCLK=0;
_nop_();
  RST=1;
_nop_();
  Write_Ds1302_Byte(address); //DS1302這個芯片是上升沿寫入數據,下降沿觸發數據輸出,
  for (i=0;i<8;i++)   //循環8次 讀取數據
  { SCLK=0;  //DS1302這個芯片是下降沿觸發數據輸出,
                temp>>=1;   //右移一位  
   if(SDA2)temp|=0x80;   //每次傳輸低字節
  SCLK=1;
}
  RST=0;
_nop_();  //以下為DS1302復位的穩定時間
  RST=0;
SCLK=0;
_nop_();
SCLK=1;
_nop_();
SDA2=0;
_nop_();
SDA2=1;
_nop_();
return (temp);   //返回
}
回復

使用道具 舉報

地板
ID:33544 發表于 2017-6-26 21:23 | 只看該作者
我也遇見了這個問題,只是都是小白無解
  
回復

使用道具 舉報

5#
ID:445798 發表于 2018-12-14 16:34 | 只看該作者
然而按樓主的法改了,還是不行。。。。
回復

使用道具 舉報

6#
ID:96218 發表于 2018-12-14 22:23 | 只看該作者
個人認為還是晶振的問題
回復

使用道具 舉報

7#
ID:7121 發表于 2018-12-23 12:43 | 只看該作者
還是好好看看 DS1302 的時序圖吧
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久51 | 日本成年免费网站 | 欧美色成人 | 五月天婷婷久久 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 欧美性生活网 | 亚洲成人国产精品 | 一区二区三区国产好 | 欧美极品少妇xxxxⅹ免费视频 | 国产精品视频久久 | 成人h动漫亚洲一区二区 | 免费观看毛片 | 国产精品99久久久久久宅男 | 欧美在线高清 | 91社区在线观看播放 | 国产91视频一区二区 | 国产美女在线观看 | 亚洲一区二区三区高清 | 狠狠操狠狠操 | 久久精品二区 | 欧美日韩成人 | 成人二区 | 中文字幕国产在线 | 一区二区三区免费 | 精品一级| 欧美日韩在线播放 | 一级片免费视频 | 91精品中文字幕一区二区三区 | 成人高清视频在线观看 | 久久精品国产一区二区 | 99久久婷婷国产综合精品电影 | 99re在线视频 | 欧美性生活视频 | 国产在线精品一区二区三区 | 亚洲狠狠爱 | 国产一区二区在线免费播放 | 黄色片在线免费看 | 91精品国产高清一区二区三区 | 久久久免费精品 | 亚洲福利在线观看 | 最新日韩精品 |