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

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

24c64的問題

作者:sophiewang 欄目:單片機(jī)
24C64.html">24C64的問題
/*********************24C64.html">24C64讀寫操作************************/
/************
啟動總線
*************/
void Start()
{
SDA=1;             /*發(fā)送起始條件的數(shù)據(jù)信號*/
_nop_();
SCL=1;     
_nop_();
_nop_();        
SDA=0;             /*發(fā)送起始信號*/
_nop_();
_nop_();
SCL=0;             /*鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù) */
}
/***************************************************************************
停止IIC總線
****************************************************************************/
void Stop()
{
SCL=0;
_nop_();
SDA=0;                 /*發(fā)送結(jié)束條件的數(shù)據(jù)信號*/
_nop_();
SCL=1;                  /*發(fā)送結(jié)束條件的時鐘信號*/
_nop_();             
SDA=1;
}
/***************************************************************************
對總線產(chǎn)生應(yīng)答
****************************************************************************/
void Ack()
{
SDA=0;               /*在此發(fā)出應(yīng)答信號 */
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
SCL=0;               /*清時鐘線,鉗住I2C總線以便繼續(xù)接收*/
_nop_();
_nop_();
SDA=1;
}
/***************************************************************************
不對總線產(chǎn)生應(yīng)答
****************************************************************************/
void NoAck()
{
SDA=1;               /*在此發(fā)出非應(yīng)答信號 */
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
SCL=0;              /*清時鐘線,鉗住I2C總線以便繼續(xù)接收*/
}
/***************************************************************************
檢查應(yīng)答位
/***************************************************************************/
bit TestAck()
{
SDA=1;_nop_();
SCL=0;_nop_();
SCL=1;_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
if(SDA==1)return(1);
SCL=0;_nop_();
return(0);

}
/***************************************************************************
向IIC總線寫一字節(jié)數(shù)據(jù)
****************************************************************************/
void Send(uchar input)
{
uchar j=8;
SCL=0;_nop_();
while(j--)
{
  SDA=(bit)(input&0x80);_nop_();
  input=input<<1;
  SCL=1;_nop_();
  SCL=0;_nop_();
}
}
/***************************************************************************
24C64寫入多字節(jié)
輸入:地址指針,E2ROM地址,字節(jié)數(shù)
****************************************************************************/
uchar Write24C64.html">24C64(uchar *Wdata,uint RomAddr,uchar num)
{
uchar VALUE;
Start();
Send(WriteDeviceAddr);           //設(shè)置控制字
if(TestAck()==1)return(1);
VALUE=RomAddr/256;
Send(VALUE);
if(TestAck()==1)return(1);
VALUE=RomAddr%256;
Send(VALUE);
if(TestAck()==1)return(1);

for(;num>0;num--) {
  Send(*Wdata);
  Wdata++;
  if(TestAck()==1)return(1);
}
Stop();
delayNms(100);
return(0);
}

/*************************
24C64寫入單字節(jié)
輸入:E2ROM地址,數(shù)據(jù)
*************************/
uchar Write24C64.html">24C64_byte(uint address,uchar ddata)
{
  uchar VALUE;
  Start();
  Send(WriteDeviceAddr);
  _nop_();
  if(TestAck()==1)return(1);
  VALUE=address/256;
  Send(VALUE);
  _nop_();
  if(TestAck()==1)return(1);
  VALUE=address%256;
  Send(VALUE);
  _nop_();
  if(TestAck()==1)return(1);
  Send(ddata);
  _nop_();
  if(TestAck()==1)return(1);
  Stop();
  delayNms(100);
  return(0);
  }
  
/***************************************************************************
從IIC總線上讀一字節(jié)數(shù)據(jù)
****************************************************************************/
uchar Receive()
{
uchar j=8,rbyte=0;
while(j--)
{
  SCL=1;
  rbyte=rbyte<<1;
  rbyte=rbyte|SDA;
  SCL=0;_nop_();_nop_();
}
return(rbyte);
}
/***************************************************************************
24C64.html">24C64讀多字節(jié);
輸入:存放的地址指針,E2ROM地址,字節(jié)數(shù)
****************************************************************************/
uchar Read24C64.html">24C64(uchar *RamAddr,uint RomAddr,uchar bytes)
{
uchar VALUE;
Start();
Send(WriteDeviceAddr);
delayNms(1);
if(TestAck()==1)return(1);
VALUE=RomAddr/256;
Send(VALUE);
delayNms(1);
if(TestAck()==1)return(1);
VALUE=RomAddr%256;
Send(VALUE);
delayNms(1);
if(TestAck()==1)return(1);

delayNms(10);
Start();
Send(ReadDviceAddr);
delayNms(1);
if(TestAck()==1)return(1);
  
while(bytes)
{
*RamAddr=Receive();
Ack();
RamAddr++;
bytes--;
}
NoAck();
Stop();
delayNms(100);
return(0);
}

  數(shù)據(jù)寫入正常,讀出不太穩(wěn)定,有時必須讀兩次才能讀出正確的值.

2樓: >>參與討論
isoar
寫入之后不要馬上讀,加個延時后再讀試試
 
3樓: >>參與討論
后學(xué)
看datasheet上寫的需要多少延時
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請教SYNCOMS單片機(jī)的問題
求救:我的板子用RC500非常好,換上FM1702N連request都過不了?
C小程序
視頻信號怎么成了黑白信號了???
請教前輩們幾個問題!
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


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