久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機EEPROM 24C02 不能寫入奇數(shù),請高手解答 [打印本頁]

作者: banqiao    時間: 2018-3-18 14:12
標題: 單片機EEPROM 24C02 不能寫入奇數(shù),請高手解答
在向EEPROM 24c02 寫數(shù)據(jù)時出現(xiàn)一個怪事,向一個地址寫入偶數(shù)如:2、4、6...,可以寫入,并且可以讀出,但是寫入奇數(shù)如:1、3、5...,則不能寫入,讀出的數(shù)還是以前的數(shù)據(jù),不知為啥,請高手解答,謝謝!!!!

單片機程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit scl=P2^1;
sbit sda=P2^0;

void delay()
{;;}

void delay_ms(uint j)
{
        uint i;
        for(j;j>0;j--)
                for(i=110;i>0;i--);
}



void IIC_init()          //IIC初始化
{
        scl=1;
        sda=1;
}

void IIC_start()  //IIC開始信號
{
        scl=1;
        sda=1;
        delay();
        sda=0;
        delay();
}

void IIC_stop()                //IIC終止
{
        scl=1;
        sda=0;
        delay();
        sda=1;
        delay();
}

void IIC_check()                   //查看IIC器件是否應(yīng)答
{
        scl=1;
        delay();
        while(sda);
        delay();  
        scl=0;        
}

void IIC_w_bite(uchar bite)                 //向IIC器件寫1比特數(shù)據(jù)
{
        uchar i;
        for(i=8;i>0;i--)
        {
                scl=0;
                delay();
                bite=bite<<1;
                sda=CY;               
                delay();
                scl=1;
                delay();
                scl=0;
        }
}

uchar IIC_r_bite()                 //讀取IIC器件1比特數(shù)據(jù)
{
        uchar i,dd;
        for(i=8;i>0;i--)
        {
                scl=1;
                delay();
                dd=dd<<1|sda;
                delay();
                scl=0;
                delay();                        
        }
        return dd;        
}

void main()
{
        IIC_init();
        IIC_start();
        IIC_w_bite(0xa0);                //尋址并發(fā)送給IIC器件準備寫數(shù)據(jù)
        IIC_check();                                //應(yīng)答
        IIC_w_bite(0x1);                //發(fā)送存儲器存儲地址
        IIC_check();
        IIC_w_bite(0x2);                //發(fā)送要給IIC器寫入的數(shù)據(jù)
        IIC_check();
        IIC_stop();

        delay_ms(5);

        IIC_start();
        IIC_w_bite(0xa0);          //尋址并發(fā)送給IIC器件準備寫數(shù)據(jù)
        IIC_check();                          //應(yīng)答
        IIC_w_bite(0x1);          //發(fā)送存儲器存儲地址
        IIC_check();
        IIC_start();
        IIC_w_bite(0xa1);          //發(fā)送信息給IIC準備讀數(shù)據(jù)
        IIC_check();
        P1=IIC_r_bite();          //讀數(shù)據(jù)到P1口
        IIC_stop();
        while(1);
}



作者: zl2168    時間: 2018-3-18 16:04
換一片24c02試試
作者: hds1988_xjtu    時間: 2018-3-18 16:11
24C02應(yīng)該是很簡單的的,建議樓主不要自己寫,網(wǎng)上找一大堆例子
作者: banqiao    時間: 2018-3-18 16:47
24c02是好的,用另一個程序就可以,兩個程序比較也沒找出問題

作者: zl2168    時間: 2018-3-18 19:15
本帖最后由 zl2168 于 2018-3-18 19:20 編輯

實例49  讀寫AT24C02
Proteus仿真一下,確認有效。
實例49 讀寫IIC AT24C02.rar (38.96 KB, 下載次數(shù): 22)

有關(guān)AT24Cxx頁寫緩沖的概念說明如下:
由于E2PROM的半導(dǎo)體工藝特性,對E2PROM的寫入時間需要5~10ms,但AT24Cxx系列串行E2PROM芯片內(nèi)部設(shè)置了一個具有SRAM性質(zhì)的輸入緩沖器,稱為頁寫緩沖器。CPU對該芯片寫操作時,AT24Cxx系列芯片先將CPU輸入的數(shù)據(jù)暫存在頁寫緩沖器內(nèi),然后,慢慢寫入E2PROM中。因此,CPU對AT24Cxx系列E2PROM一次寫入的字節(jié)數(shù),受到該芯片頁寫緩沖器容量的限制。頁寫緩沖器的容量為16B,若CPU寫入字節(jié)數(shù)超過芯片頁寫緩沖器容量,應(yīng)在一頁寫完后,隔5~10ms重新啟動一次寫操作。

以上摘自張志良編著《80C51單片機仿真設(shè)計實例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1內(nèi)有常用的單片機應(yīng)用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設(shè)計有詳細說明,程序語句條條有注解。

作者: zl2168    時間: 2018-3-18 19:17
本帖最后由 zl2168 于 2018-3-18 19:19 編輯

實例50  非零地址讀寫AT24C02
上節(jié)已提到AT24Cxx頁寫緩沖的特性,需要補充說明的是,一次寫入AT24Cxx字節(jié)數(shù)不但不能超過芯片頁寫緩沖器容量,而且,若不是從頁寫緩沖器頁內(nèi)零地址0000寫起,一次寫入地址不能超出頁內(nèi)最大地址1111。例如,若從頁內(nèi)地址0000寫起,一次最多可寫16字節(jié);若從頁內(nèi)地址0010寫起,一次最多只能寫16-2=14字節(jié)。若要寫16字節(jié),超出頁內(nèi)地址1111,將會引起地址翻卷,導(dǎo)致出錯。因此,本例16字節(jié)從AT24C02 5BH開始寫起,須分兩次寫入。第1次寫0x5b0x5f單元,第2次寫0x600x62單元,中間還必須有頁寫延時。
實例50 非零地址讀寫AT24C02.rar (39.09 KB, 下載次數(shù): 28)


作者: Mr.haohao    時間: 2020-4-23 20:48
我也遇到了這樣的問題,剛解決,24c02寫入是需要時間的,叫寫入周期Twr,寫入的字節(jié)并沒有立即寫入儲存器,而是暫時儲存到了另一個地方,寫入存儲器還需要一段時間(即Twr),寫完一個字節(jié)后需延時Twr,這段時間是比較長的。
作者: fendouzhe    時間: 2020-4-24 10:11
24C02是2K的i2c,看是模擬的還是外設(shè)的i2c,ARM的外設(shè)i2c操作起來有時會出問題,建議試試模擬i2c方式。
作者: dsy5555    時間: 2021-3-31 13:59
不管讀寫,都要延時,不然導(dǎo)致波形不對,在寫完一字節(jié)后,馬上讀出也不行,我仿真搞了好久才明白,寫進后馬上讀出就出現(xiàn)問題
作者: 740071911    時間: 2021-8-2 14:09
dsy5555 發(fā)表于 2021-3-31 13:59
不管讀寫,都要延時,不然導(dǎo)致波形不對,在寫完一字節(jié)后,馬上讀出也不行,我仿真搞了好久才明白,寫進后馬 ...

讀不需要延時,不要用仿真
作者: dkdie    時間: 2021-10-20 18:00
banqiao 發(fā)表于 2018-3-18 16:47
24c02是好的,用另一個程序就可以,兩個程序比較也沒找出問題

我用24c02寫數(shù)據(jù)時也出現(xiàn)了一樣的問題(寫奇數(shù)寫無效,寫偶數(shù)正常,時延設(shè)的是10ms,應(yīng)該不是時延的問題),樓主目前解決了嗎?望告知。另外,如果還有的話,能把成功寫奇數(shù)程序發(fā)我看一下嗎。
作者: 合金裝備布狼牙    時間: 2021-10-26 14:39
樓主解決了嗎,我也遇到了
作者: ybftl    時間: 2021-11-1 18:31
void IIC_stop()                 //IIC終止
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
把原來的IIC終止子程序改為這樣就行了。
作者: sunjielayout    時間: 2021-11-1 21:06
不管讀寫,都要延時,不然導(dǎo)致波形不對,在寫完一字節(jié)后,馬上讀出也不行,我仿真搞了好久才明白,寫進后馬上讀出就出現(xiàn)問題
作者: 2844746961    時間: 2021-11-1 21:55
寫數(shù)據(jù)之前要先把以前的數(shù)據(jù)擦除,再寫新數(shù)據(jù)才不會出錯
作者: 快樂眼淚    時間: 2021-11-29 20:55
你們怎么解決的?我也遇到這樣的問題了,有的能寫入有的不能
作者: ping264888    時間: 2021-11-30 13:41
我之前也遇到過這個問題, 后來發(fā)現(xiàn)時延時的問題.
http://www.zg4o1577.cn/bbs/dpj-151160-1.html
作者: shumivan    時間: 2021-11-30 17:11
IIC操作,只要出了問題,肯定是IIC的時序不對,自己找問題就行了,對照時序表查看。
作者: 玉萌業(yè)余發(fā)展    時間: 2021-12-7 14:46
片內(nèi)要提升電壓到20V左右
作者: 蒼月一號    時間: 2022-2-4 00:31
ybftl 發(fā)表于 2021-11-1 18:31
void IIC_stop()                 //IIC終止
{
sda=0;

解決了我的問題謝謝
作者: pios    時間: 2022-6-2 20:55
ybftl 發(fā)表于 2021-11-1 18:31
void IIC_stop()                 //IIC終止
{
sda=0;

牛比牛比牛比
作者: 天ノ憶    時間: 2022-6-3 10:20
直接用示波器采集波形,對照時序圖分析,比在這讓人給你猜原因快得多
作者: 電子狂人1    時間: 2022-6-3 13:30
AT24Cxx系列芯片先將CPU輸入的數(shù)據(jù)暫存在頁寫緩沖器內(nèi),然后,慢慢寫入E2PROM中。因此,CPU對AT24Cxx系列E2PROM一次寫入的字節(jié)數(shù),受到該芯片頁寫緩沖器容量的限制。頁寫緩沖器的容量為16B,若CPU寫入字節(jié)數(shù)超過芯片頁寫緩沖器容量,應(yīng)在一頁寫完后,隔5~10ms重新啟動一次寫操作。
作者: joyb    時間: 2023-4-19 15:16
用Proteus仿真,不用買開發(fā)板了?
作者: TTQ001    時間: 2023-4-20 09:10
奇數(shù)與偶數(shù)對EEPROM芯片沒有區(qū)別,是否嘗試在代碼中將奇數(shù)與偶數(shù)切換?
作者: yuxuesuixing    時間: 2023-4-20 09:49

看看你寫的錯誤:
void IIC_stop()                //IIC終止
{
        scl=1;
        sda=0;
        delay();
        sda=1;
        delay();
}
如果你的數(shù)據(jù)為偶數(shù) 即最后一位為0,程序執(zhí)行正常
如果,你數(shù)據(jù)為奇數(shù),你最后一位為1 那 執(zhí)行就是 sda=1;scl=1;sda=0;是不是和起始信號一樣?

讓你去學(xué)習(xí),你就非要自己閉門造車,如果你自己寫的程序我敬你是個漢子,如果你抄的別人的我建議你給他一巴掌,如果是你照葫蘆畫瓢畫出來的,建議你給自己兩巴掌

作者: hi等你    時間: 2023-4-20 13:25
看了一下要笑死,一個24c02基礎(chǔ)東西都玩的五花八門,有提高電壓的,有先擦后寫的

還有直接仿真的,難道你們的產(chǎn)品都是在仿真上想出來的嗎。還有抄的,這個程序

還要抄,以后還能做啥大工程,樓主的問題更離譜:非得去寫奇數(shù)或偶數(shù),寫00000000

不行嗎,寫11111111不行嗎。我這個匯編兩年的新手要被你們笑死,不說了,送外賣了,要超時了




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 天天干天天爱天天操 | 91精品国产自产精品男人的天堂 | 国产精品免费看 | 91青娱乐在线 | 日韩一二区 | 精品久久国产 | 一区二区日韩 | 免费一区 | 五月婷婷激情 | 亚洲欧美一区二区三区国产精品 | 伊人久久一区二区 | 亚洲网站在线播放 | 久久国产综合 | 欧美成人精品一区二区男人看 | 亚洲精品久久久久久宅男 | 999久久久| 婷婷中文在线 | 日韩精品在线观看一区二区三区 | 欧美三区 | 99这里只有精品 | 精品国产乱码一区二区三区 | 一区二区三区中文字幕 | aaaaaaa片毛片免费观看 | 激情欧美日韩一区二区 | 亚洲精品久久久久中文字幕二区 | 午夜视频在线观看视频 | 91精品国产一区二区三区 | www.99re | 欧洲亚洲一区二区三区 | 欧美一区二区三区在线免费观看 | 欧洲一区二区三区 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 日韩精品二区 | 懂色av蜜桃av | 午夜看片 | 国产一级电影在线 | caoporn免费在线视频 | 最近日韩中文字幕 | 黄网站免费在线观看 | 国产成人精品视频在线观看 | 国产高清精品一区二区三区 |