|
|||||||||||
| 技術(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 |
郁悶死了。。 |
| 作者:jingfan 欄目:單片機(jī) |
各位兄弟:小弟近日用C51寫AT24C16的讀寫程序,但兩天了,用盡了各種方法就是無法正確讀。ㄐ〉芟扔镁幊唐髟2416中寫入固定值為了更好驗證)。因為我用的片子無法用仿真器單步調(diào)試,只能編譯后在線下裝下去看運(yùn)行結(jié)果。哪位清楚多幫忙,簡直郁悶死我了。 |
| 2樓: | >>參與討論 |
| 作者: ljw.06 于 2005/3/23 16:49:00 發(fā)布:
呵呵 沒得必要郁悶的 |
|
| 3樓: | >>參與討論 |
| 作者: jingfan 于 2005/3/23 16:58:00 發(fā)布:
請多多捧場。 |
|
| 4樓: | >>參與討論 |
| 作者: mabaoqiu 于 2005/3/23 17:05:00 發(fā)布:
編一個程序: 讀的正確就亮燈,不對燈就閃爍,就知道是否寫的正確了! (簡單的話,在p1口上接個led就可以了!) |
|
| 5樓: | >>參與討論 |
| 作者: jingfan 于 2005/3/23 17:06:00 發(fā)布:
進(jìn)一步說明 我曾經(jīng)參考了網(wǎng)上多個例子,但沒有一個可以直接解決問題,對照時序圖也都檢查了,但就是不知問題出來哪里。我的試驗版本起碼有3個了,沒有一個好用。但同樣是串行E2,寫5043時參考例子一次就成功了。簡直煩透了。! |
|
| 6樓: | >>參與討論 |
| 作者: yang96381 于 2005/3/23 18:05:00 發(fā)布:
你在哪里,如果在西安的話我可以幫助你! 關(guān)鍵是吃透協(xié)議,時序要求比較嚴(yán)格!!!不妨先用匯編試一下!!! |
|
| 7樓: | >>參與討論 |
| 作者: yang96381 于 2005/3/23 18:13:00 發(fā)布:
呵呵,自己動手,豐衣足食!!! |
|
| 8樓: | >>參與討論 |
| 作者: jingfan 于 2005/3/24 9:35:00 發(fā)布:
請繼續(xù)指教 多謝各位捧場,今天又準(zhǔn)備試驗了一下。還望各位給點解決問題的建議。我現(xiàn)在寫入了固定值,但讀出來總是0XFF,肯定是不對的,但不清楚錯在什么地方! |
|
| 9樓: | >>參與討論 |
| 作者: jingfan 于 2005/3/24 9:49:00 發(fā)布:
在此呼喚 高人:幫忙看一下我的程序有何問題。 void StartI2c(void) { uchar i; IO2416SDA=IO2416SCL=1; for(i=0;i<2;i++); IO2416SDA=0; for(i=0;i<2;i++); IO2416SCL=0; } //終止IIC通訊 void EndI2c(void) { uchar i; IO2416SDA=0; IO2416SCL=1; for(i=0;i<2;i++); IO2416SDA=1; } uchar Read2416() { uchar i,n; n=0x00; for ( i=0x80; i>=0x01; i=i>>1 ) { IO2416SCL = 1; IO2416SDA = 1; //置 SDA 為讀 IO2416SCL = 0; if ( IO2416SDA == 1 ) n = ( n | i ); } return( n ); } void Write2416(uchar n) { uchar i; for ( i=0x80; i>=0x01; i=i>>1 ) { IO2416SCL = 0; //SCL=0 if ( ( n & i ) == 0 ) IO2416SDA = 0; else IO2416SDA = 1;//置SDA IO2416SCL = 1; //SCL=1 IO2416SDA=0; //清SDA } //IO2416SCL=0; IO2416SDA=1;//釋放SDA總線 Delayms(1); IO2416SCL=1;//SCL上升沿I2C輸出ACK應(yīng)答 Delayms(2); //while(IO2416SDA==1){}//SDA==0為ACK應(yīng)答信號 IO2416SCL=0;//結(jié)束ACK應(yīng)答信號接收 Delayms(1); } void Read(void) { StartI2c; Delayms(1); Write2416(0xa0); Delayms(1); Write2416(0x00); Delayms(1); StartI2c; Delayms(1); Write2416(0xa1); Delayms(1); AddrNo=Read2416(); Delayms(1); EndI2c; } 我現(xiàn)在就是在2416中寫入了定值,如00中寫入11,然后進(jìn)行讀操作,但總是返回0XFF,關(guān)鍵可能是write2416函數(shù)中等待應(yīng)答信號的地方,因為我只要打開這行程序,則程序就進(jìn)入了死循環(huán),也就是總是沒有應(yīng)答信號,望高人指點! |
|
| 10樓: | >>參與討論 |
| 作者: angelp 于 2005/3/24 9:53:00 發(fā)布:
RE 要保證SDA和SCL的時序的嚴(yán)格,盡量保持高低電平時間相等,典型值T高=T低=47us |
|
| 11樓: | >>參與討論 |
| 作者: jingfan 于 2005/3/24 9:56:00 發(fā)布:
多謝指教,試驗一下 我看時序圖對于電平時間沒有最大值的要求,因此為保險計就給了毫秒級的延時,我試驗一下47US延時。 |
|
| 12樓: | >>參與討論 |
| 作者: jingfan 于 2005/3/24 10:02:00 發(fā)布:
還是不行啊 剛剛試驗了一下,改成47us還是不行啊,肯定是我的程序中有問題,而且極有可能就出在 IO2416SDA=1;//釋放SDA總線 for(j=0;j<15;j++); IO2416SCL=1;//SCL上升沿I2C輸出ACK應(yīng)答 //while(IO2416SDA==1){}//SDA==0為ACK應(yīng)答信號 IO2416SCL=0;//結(jié)束ACK應(yīng)答信號接收 這幾行上。請諸位多幫忙。 |
|
| 13樓: | >>參與討論 |
| 作者: jingfan
繼續(xù)呼吁 |
|
| 14樓: | >>參與討論 |
| 作者: jingfan 于 2005/3/25 9:39:00 發(fā)布:
隔了一天來看還是沒人給予指點,繼續(xù)請教! |
|
| 15樓: | >>參與討論 |
| 作者: yuntian 于 2005/3/25 9:53:00 發(fā)布:
程序操作前要查CLK SDA是否為高電平,否則不操作 |
|
| 16樓: | >>參與討論 |
| 作者: shengm 于 2005/3/26 0:59:00 發(fā)布:
re 首先,電路要對,SDA和SCL要有上拉電阻。再是保證操作時是SCL低才改變SDA,你的程序好象有點亂,不好看下去。 |
|
| 17樓: | >>參與討論 |
| 作者: chen_alex 于 2005/3/26 9:21:00 發(fā)布:
堅決擁護(hù)yang96381。 |
|
| 18樓: | >>參與討論 |
| 作者: polestar95 于 2005/3/26 13:11:00 發(fā)布:
Re: 先確定你的電路是正確的,比如上拉,端口定義,供電等。 按理說網(wǎng)上的程式應(yīng)該可以用的,更何況你有三個啊。 不過,看你上面的程式,為什么read/write時,SDA/SCL電平轉(zhuǎn)換時都不加延時? 要是用12MHZ晶體,時間應(yīng)該不夠的。 在每次操作SDA/SCL的指令后都加個delay,比如5us試試。 |
|
| 19樓: | >>參與討論 |
| 作者: jingfan 于 2005/3/29 9:51:00 發(fā)布:
多謝各位老大,請繼續(xù)幫忙 多謝各位老大幫忙,這兩天出差了。剛剛回來,我用了一段程序用PL/M語言寫好在196芯片下調(diào)試運(yùn)行,對于2416的讀寫都沒有問題。但同樣的程序翻譯為C語言后在51下運(yùn)行則沒有反應(yīng)。51我用的9.6M晶振,只是因為沒有辦法跟蹤調(diào)試才導(dǎo)致現(xiàn)在的局面。實在不行我只能去看看哪里可找到普通51的板子,寫好C程序調(diào)試通過后再在自己的板子上運(yùn)行吧。如果各位有可以直接通過的程序萬望指教。 |
|
| 20樓: | >>參與討論 |
| 作者: bh_wang 于 2005/3/29 10:12:00 發(fā)布:
re: 1.線路有無問題 2.嚴(yán)格按照IIC協(xié)議寫﹐檢查時序 3.檢查read/write時﹐EEPROM有無ack 4.太亂了~~~ |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |