|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe |
24c64的問題 |
| 作者:sophiewang 欄目:測控之家 |
/*********************24C64.html">24C64讀寫操作************************/ /************ 啟動總線 *************/ void Start() { SDA=1; /*發(fā)送起始條件的數據信號*/ _nop_(); SCL=1; _nop_(); _nop_(); SDA=0; /*發(fā)送起始信號*/ _nop_(); _nop_(); SCL=0; /*鉗住I2C總線,準備發(fā)送或接收數據 */ } /*************************************************************************** 停止IIC總線 ****************************************************************************/ void Stop() { SCL=0; _nop_(); SDA=0; /*發(fā)送結束條件的數據信號*/ _nop_(); SCL=1; /*發(fā)送結束條件的時鐘信號*/ _nop_(); SDA=1; } /*************************************************************************** 對總線產生應答 ****************************************************************************/ void Ack() { SDA=0; /*在此發(fā)出應答信號 */ _nop_(); _nop_(); SCL=1; _nop_(); _nop_(); SCL=0; /*清時鐘線,鉗住I2C總線以便繼續(xù)接收*/ _nop_(); _nop_(); SDA=1; } /*************************************************************************** 不對總線產生應答 ****************************************************************************/ void NoAck() { SDA=1; /*在此發(fā)出非應答信號 */ _nop_(); _nop_(); SCL=1; _nop_(); _nop_(); SCL=0; /*清時鐘線,鉗住I2C總線以便繼續(xù)接收*/ } /*************************************************************************** 檢查應答位 /***************************************************************************/ 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é)數據 ****************************************************************************/ 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é)數 ****************************************************************************/ uchar Write24C64.html">24C64(uchar *Wdata,uint RomAddr,uchar num) { uchar VALUE; Start(); Send(WriteDeviceAddr); //設置控制字 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地址,數據 *************************/ 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é)數據 ****************************************************************************/ 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é)數 ****************************************************************************/ 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); } 寫入數據時正常,讀數據很不穩(wěn)定,有時讀出的數據正確,有時就不對(除了第一個全是ff),不明白是什么原因。 |
|
|
| 免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |