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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3853|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

DS1302應(yīng)用成功

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:55874 發(fā)表于 2013-10-16 00:49 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
下面是讀取1302與寫(xiě)數(shù)據(jù)的程序:
//從1302讀取一個(gè)字節(jié)
uchar read(uchar address)
{
uchar i;
dsclk=0;
dsdata=0;
dsret=0;
dsret=1;//ret處于高電平時(shí)可對(duì)1302進(jìn)行讀操作
for(i=0;i<8;i++)
{
  dsclk=0;//上升沿時(shí)進(jìn)行寫(xiě)數(shù)據(jù)
  dsdata=address&0x01;//數(shù)據(jù)傳送都是從低位開(kāi)始
  address=address>>1;//右移一位
  dsclk=1;//上升沿寫(xiě)數(shù)據(jù)
}
for(i=0;i<8;i++)
{
  dsclk=0;//上升沿動(dòng)作
  address=address>>1;
  if(dsdata)
  address=address|0x80;
  dsclk=1;//上升沿動(dòng)作
  dsclk=1;//等待
}
dsclk=1;//時(shí)鐘置高
dsret=0;//片選無(wú)效
return (address);
}
//向1302寫(xiě)一個(gè)字節(jié)
void write(uchar address,uchar number)
{
uchar i; dsclk=0;//清零時(shí)鐘總線
dsdata=0;//清零數(shù)據(jù)總線
dsret=0;//片選端無(wú)效
dsret=1;//邏輯控制有效,可對(duì)1302操作
for(i=0;i<8;i++)
{
  dsclk=0;
  dsdata=address&0x01;//低地址輸入
  address=address>>1;//地址數(shù)據(jù)右移一位
  dsclk=1;
}
for(i=0;i<8;i++)
{
  dsclk=0;
  dsdata=number&0x01;//進(jìn)行數(shù)據(jù)傳送
  number=number>>1;//數(shù)據(jù)右移一位
  dsclk=1;
}
dsclk=1;//上升沿動(dòng)作
dsret=0;//片選無(wú)效,不可進(jìn)行操作
}

    DS1302是美國(guó)DALLAS公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和RAM數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小與31天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá)2.55.5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。DS1302用于數(shù)據(jù)記錄,特別是對(duì)某些具有特殊意義的數(shù)據(jù)點(diǎn)的記錄上,能實(shí)現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄,因此廣泛應(yīng)用于測(cè)量系統(tǒng)中。

評(píng)分

參與人數(shù) 1黑幣 +8 收起 理由
wrty0 + 8 贊一個(gè)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:55611 發(fā)表于 2013-10-21 21:56 | 只看該作者
好好學(xué)習(xí),天天向上
回復(fù)

使用道具 舉報(bào)

板凳
ID:110866 發(fā)表于 2016-4-12 18:23 | 只看該作者
啥啊,為啥不顯示電腦時(shí)間
回復(fù)

使用道具 舉報(bào)

地板
ID:123526 發(fā)表于 2016-5-27 15:45 | 只看該作者
本帖最后由 whlove1314 于 2016-5-27 16:13 編輯

我的讀程序?yàn)槭裁锤粢幻腼@示一次,這一秒顯示正常,下一秒就讀到8個(gè)一(就是0x80),再下一秒就正常,然后又是8個(gè)一,搞了一早上了,現(xiàn)在都懷疑芯片壞了如果說(shuō)程序有問(wèn)題,那什么還能讀到數(shù)據(jù),若說(shuō)沒(méi)問(wèn)題,為什么隔一秒無(wú)效一次
我現(xiàn)在觀察到的現(xiàn)象是,正常顯示時(shí),數(shù)據(jù)輸出穩(wěn)定(每次讀IO口數(shù)據(jù)一致,比如說(shuō),0s-1s期間程序多次讀IO,每次數(shù)據(jù)都是0s)不正常時(shí)(8個(gè)一..)程序每讀一次IO得到的數(shù)據(jù)都會(huì)從8個(gè)一跳變到8個(gè)0,非常奇怪
后來(lái)我在主函數(shù)只寫(xiě)了一個(gè)讀取函數(shù),去掉其他干擾項(xiàng),用8個(gè)LED連接到P0口顯示讀到的BCD碼,在讀取程序后加了10ms循環(huán)延遲,發(fā)現(xiàn)不正常顯示時(shí),IO口讀到數(shù)據(jù)會(huì)在8個(gè)1和8個(gè)0之間循環(huán)跳變,讀一次變一次就是(0000 0001{此為正常顯示,值為1}然后{1111 1111,0000 0000,1111 1111,0000 0000.....}一直這樣循環(huán),循環(huán)時(shí)間為1s)到了下一秒顯示正常0000 0011(此值為3)但是中間丟失了一秒,那一秒剛才在那里亂蹦
我自己的理解是在:程序每個(gè)機(jī)器周期都會(huì)去讀取ds1302的IO口,IO口的值在1s內(nèi)應(yīng)該是不變的,雖然多次讀取,但是每次的值一樣,機(jī)器周期非常短暫,人是無(wú)法察覺(jué)到的,給人的感覺(jué)就是數(shù)據(jù)是連續(xù)輸出的(其實(shí)實(shí)在一遍一遍掃描的),每次寫(xiě)入的地址都是一樣的,讀到的值只跟ds1302有關(guān),出現(xiàn)這個(gè)問(wèn)題我實(shí)在找不到跟程序有關(guān)的地方,
所以,現(xiàn)在懵逼了......
剛才有點(diǎn)新發(fā)現(xiàn),每次在亂蹦時(shí),上一秒的數(shù)值不動(dòng),剛才延遲太短沒(méi)看清,現(xiàn)在加大延遲,就看見(jiàn)了,比如說(shuō)上秒顯示(0000 0011)這一秒就是
(0000 0011,1111 1111,0000 0011,1111 1111.......)一直這樣蹦,直到下一秒恢復(fù)正常,來(lái)位大神救命啊.....
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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