|
|||||||||||
| 技術(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 |
24C02問題,防真讀出來的值為什么不對滴? |
| 作者:piter_tan 欄目:單片機(jī) |
#include <REGX51.h> //頭文件 #define uCHAR unsigned CHAR //定義一下方便使用 #define uint unsigned int #define uLONG unsigned LONG //CHAR code dx516[3] _at_0x003b //這是為了仿真設(shè)置 #define WriteDeviceAddress 0xa0 //定義器件在IIC總線中的地址 #define ReadDviceAddress 0xa1 sbit SCL=P2^7; sbit SDA=P2^6; sbit P10=P1^0; //定時函數(shù) void DelayMs(unsigned int NUMBER) { unsigned CHAR TEMP; for(;NUMBER!=0;NUMBER--) { for(TEMP=112;TEMP!=0;TEMP--); } } //開始總線 void start() { SDA=1; SCL=1; SDA=0; SCL=0; } //結(jié)束總線 void stop() { SCL=0; SDA=0; SCL=1; SDA=1; } //發(fā)ACKO void NoAck() { SDA=1; SCL=1; SCL=0; } //測試ACK bit TestAck() { bit ErrorBit; SDA=1; SCL=1; ErrorBit=SDA; SCL=0; return(ErrorBit); } //定入8個bit到24C02 Write8Bit(unsigned CHAR input) { unsigned CHAR TEMP; for(TEMP=8;TEMP!=0;TEMP--) { SDA=(bit)(input&0x80); SCL=1; SCL=0; input=input<<1; } } //寫入一個字節(jié)到24C02中 void Write24C02(uCHAR ch,uCHAR address) { start(); Write8Bit(WriteDeviceAddress); TestAck(); Write8Bit(address); TestAck(); Write8Bit(ch); TestAck(); stop(); DelayMs(10); } //從24C02中讀出8個bit uCHAR Read8Bit() { unsigned CHAR TEMP,rbyte=0; for(TEMP=8;TEMP!=0;TEMP--) { SCL=1; rbyte=rbyte<<1; rbyte=rbyte|((unsigned CHAR)(SDA)); SCL=0; } return(rbyte); } //從24C02中讀出1個字節(jié) uCHAR Read24C02(uCHAR address) { uCHAR ch; start(); Write8Bit(WriteDeviceAddress); TestAck(); Write8Bit(address); TestAck(); start(); Write8Bit(ReadDviceAddress); TestAck(); ch=Read8Bit(); NoAck(); stop(); return(ch); } //*********************************** void main(void) //主程序 { uCHAR c1,c2; P2=0xc0; while(1) //主程序掛起 { Write24C02(0x7c,0x02); c1=Read24C02(0x02); Write24C02(0x99,0x03); c2=Read24C02(0x03); P10=0; } } 防真時,0x02,0x03讀出來的值都是FF!怪了..... |
| 2樓: | >>參與討論 |
| 作者: piter_tan 于 2006/12/16 15:00:00 發(fā)布:
這部分讀過后就不對了 uCHAR Read8Bit() { unsigned CHAR TEMP,rbyte=0; for(TEMP=8;TEMP!=0;TEMP--) { SCL=1; rbyte=rbyte<<1; rbyte=rbyte|((unsigned CHAR)(SDA)); SCL=0; } return(rbyte); } 難道這樣讀不行嗎? |
|
| 3樓: | >>參與討論 |
| 作者: NE5532 于 2006/12/17 17:01:00 發(fā)布:
如下 你拿個電阻,330歐姆的,把SDA線拉到地,看能不能讀到0x00 |
|
| 4樓: | >>參與討論 |
| 作者: xplore 于 2006/12/17 17:28:00 發(fā)布:
仿真時,比如單步運行時 可能太慢, 破壞了24C02的時序 |
|
| 5樓: | >>參與討論 |
| 作者: NE5532 于 2006/12/17 17:36:00 發(fā)布:
不至于,I2C是同步總線,中間停下來都可以 * - 本貼最后修改時間:2006-12-17 17:36:35 修改者:NE5532 |
|
| 6樓: | >>參與討論 |
| 作者: piter_tan 于 2006/12/19 8:59:00 發(fā)布:
呵呵,謝謝各位 真的是不能單步運行來看或是中間停下來的 直接燒寫到目標(biāo)板就OK啦 |
|
| 7樓: | >>參與討論 |
| 作者: 千尋喬子 于 2006/12/19 12:18:00 發(fā)布:
回復(fù)主題:24C02問題,防真讀出來的值為什么不對滴? 我是ATMEL一級代理,希望可以幫助到你,我手機(jī):13713758355,QQ:499340587 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |