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

QQ登錄

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

帖子
查看: 4681|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

AT24C02都出來(lái)的數(shù)一直不變是什么原因???求大神指點(diǎn),經(jīng)測(cè)試1602顯示是沒(méi)問(wèn)題的

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 30 黑幣 回復(fù)本帖可獲得 30 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
#define uchar unsigned char
#define uint unsigned int
sbit SCK=P3^6;       //串行時(shí)鐘輸入
sbit SDA=P3^7;      //串行數(shù)據(jù)輸入/輸出
void Start()//起始信號(hào)
{
SDA=1;
delay5us();//延時(shí)要大于4.7us,取5u
SCK=1;
delay5us();
SDA=0;
delay5us();
}
void Stop()//結(jié)束信號(hào)
{
SDA=0;
delay5us();//延時(shí)要大于4.7us,取5us
SCK=1;
delay5us();
SDA=1;
delay5us();
}
void Ack()//應(yīng)答信號(hào)
{
SDA=0;
SCK=0;
delay5us();
SCK=1;
delay5us();
SCK=0;
}
/*SCK在高電平期間,SDA被拉為低電平表示應(yīng)答*/
bit WaitAck()//等待應(yīng)答信號(hào)
{
SDA=1;//釋放總線
delay5us();
SCK=1;
delay5us();
if(SDA)//無(wú)應(yīng)答
{
  SCK=0;
  Stop();
  return 0;
}
else
{
  SCK=0;
  return 1;
}
}
void InputOneByte(uchar dat)//寫(xiě)入一個(gè)字節(jié)AT24C02
{
uchar iVal;
for(iVal=0;iVal<8;iVal++)
{
  SCK=0;
  delay5us();
  SDA=(dat & 0x80)>>7;//將數(shù)據(jù)的最高位放入SAD,如0011 0010
  //則將末位0送入SDA
  delay5us();
  SCK=1;
  dat<<=1;//數(shù)據(jù)左移一位,準(zhǔn)備存第二位數(shù)
}
SCK=0;
}
uchar OutputOneByte()//讀取一個(gè)字節(jié)
{
uchar iVal;
uchar x;//保存讀取到的值
SDA=1;//釋放總線,以讓SDA線轉(zhuǎn)由接收設(shè)備(AT24C02)控制
for(iVal=0;iVal<8;iVal++)
{
  SCK=0;
  delay5us();
  SCK=1;
  delay5us();
  x<<=1;//從低位開(kāi)始讀
  if(SDA)
   x |= 0x01;//將SDA上的數(shù)據(jù)通過(guò)按位“或“運(yùn)算存入x中
}
SCK=0;
return x;
}
void WriteAddAndDate(uchar add,uchar dat)
{
Start();//啟動(dòng)
InputOneByte(0xA0);//寫(xiě)入器件AT24C02地址
WaitAck();//等待器件應(yīng)答
InputOneByte(add);//存放數(shù)據(jù)的地址
WaitAck();//等待器件應(yīng)答
InputOneByte(dat);//要保存的數(shù)據(jù)
WaitAck();//等待器件應(yīng)答
Stop();
}
uchar ReadDataFromDatAdd(uchar DatAdd)//從某個(gè)地址讀取數(shù)據(jù)
{
uchar Data;
Start();
InputOneByte(0xA0);//寫(xiě)入器件AT24C02地址
WaitAck();//等待器件應(yīng)答
InputOneByte(DatAdd);//存放數(shù)據(jù)的地址
WaitAck();//等待器件應(yīng)答
Start();
InputOneByte(0xA1);//讀取數(shù)據(jù)的器件地址
WaitAck();//等待器件應(yīng)答
Data=OutputOneByte();//d讀取數(shù)據(jù)
Stop();
return Data;
}
void main()
{
  float AT;
/**********AT24C02轉(zhuǎn)換***********/
  LCD_Initial();
  GotoXY(0,0);//設(shè)定顯示位置
  WriteAddAndDate(0X01,0X85);
  AT=ReadDataFromDatAdd(0X00);
  sprintf(table2,"The data is:%f",AT);//將數(shù)據(jù)寫(xiě)入table2中
  Print(table2);//打印
  while(1);
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:303735 發(fā)表于 2018-4-17 15:22 | 只看該作者
我之前也遇到這樣的情況,軟件工程師也說(shuō)不出啥原因,后面把24C02的通訊腳上拉電阻加10K就可以了。不知是不是你沒(méi)接上拉電阻。
回復(fù)

使用道具 舉報(bào)

板凳
ID:301302 發(fā)表于 2018-4-18 19:15 | 只看該作者
liqingyong 發(fā)表于 2018-4-17 15:22
我之前也遇到這樣的情況,軟件工程師也說(shuō)不出啥原因,后面把24C02的通訊腳上拉電阻加10K就可以了。不知是不 ...

加上了,很煩[
回復(fù)

使用道具 舉報(bào)

地板
ID:285031 發(fā)表于 2018-5-6 11:53 | 只看該作者
兩個(gè)問(wèn)題,
一是AT24C02芯片連接要有電阻。
二是每寫(xiě)完數(shù)據(jù)要有10ms的延時(shí),用于芯片把數(shù)據(jù)轉(zhuǎn)化成不可擦除的。這段時(shí)間芯片不會(huì)響應(yīng)讀寫(xiě)信號(hào)。

附錄是datasheet,重點(diǎn)應(yīng)該高亮了。主要看時(shí)序和write/read operation

00_AT24C02A.pdf

184.52 KB, 下載次數(shù): 19

芯片手冊(cè)

回復(fù)

使用道具 舉報(bào)

5#
ID:268717 發(fā)表于 2018-10-2 16:52 | 只看該作者
讀出來(lái)的數(shù)據(jù)是I5對(duì)吧?
回復(fù)

使用道具 舉報(bào)

6#
ID:211052 發(fā)表于 2018-10-2 22:37 | 只看該作者
單步走,走到口線輸出的地方停下量下口線電壓�;蛘哂檬静ㄆ骺床ㄐ巍�
回復(fù)

使用道具 舉報(bào)

7#
ID:387733 發(fā)表于 2018-10-3 07:57 | 只看該作者
/*SCK在高電平期間,SDA被拉為低電平表示應(yīng)答*/
這個(gè)是錯(cuò)誤的,這個(gè)是START的定義。



可參考單片機(jī)論壇  http://www.torrancerestoration.com/bbs/dpj-136469-1.html
回復(fù)

使用道具 舉報(bào)

8#
ID:63090 發(fā)表于 2018-10-4 21:57 | 只看該作者
先檢查硬件是否接線正確,再檢查軟件程序接口調(diào)動(dòng)對(duì)不對(duì),如果都正確,就是軟件時(shí)序處理不當(dāng)導(dǎo)致的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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