找回密碼
         注冊會員
        搜索附件  
        MCU資訊論壇 附件中心 單片機(jī)論壇 51單片機(jī)論壇 I_2C總線器件AT24C256的性能特點(diǎn)及應(yīng)用.pdf

        I_2C總線器件AT24C256的性能特點(diǎn)及應(yīng)用.pdf

         

        發(fā)個51讀寫at24c256的程序(附上相關(guān)的參考資料):
        參考資料對AT24C256介紹的很清楚
        #include<reg52.h>
        #include <intrins.h>
        #define uchar unsigned char
        #define uint unsigned int
        sbit sda=P1^7;
        sbit scl=P1^6;

        uint Txmt_Success; //發(fā)送成功
        uint ACK_Error; //應(yīng)答錯誤
        void delay15ms(void) //晶振12
        {
        unsigned char a,b,c;
        for(c=1;c>0;c--)
        for(b=238;b>0;b--)
        for(a=30;a>0;a--);
        }
        void delay(uint z)//延時1ms,晶振12M
        {
        uint x,y;
        for(x=z;x>0;x--)
        for(y=199;y>0;y--);
        }
        void start(void) //TxmtStartBit
        {
        sda=1; //Set a falling edge in sda when scl is high
        scl=1;
        _nop_();
        sda=0;
        _nop_();
        scl=0; //scl need to hold on low
        }
        void stop(void) //TxmtStopBit
        {
        scl=0;
        sda=0; //Set a rising edge is sda when scl is high
        scl=1;
        _nop_();
        sda=1;
        _nop_();
        }
        void SendData(uchar Data_s)
        {
        uchar I2CBitCount;
        Txmt_Success=0; //no Success
        //發(fā)送8個bit,高位在前
        for(I2CBitCount=0;I2CBitCount<8;I2CBitCount++)
        {
        if(Data_s&0x80) //if high then send high
        sda=1;
        else
        sda=0; //if low then send low
        scl=1; //A falling edge to write the bit
        _nop_();
        scl=0;
        _nop_();
        Data_s=Data_s<<1;
        }
        //收應(yīng)答
        sda=1; //A falling edge to receive the ACK
        _nop_();
        scl=1;
        _nop_();
        _nop_();
        _nop_();
        if(sda) //if sda=1 then ACK wrong
        {
        sda=1;
        scl=1;
        ACK_Error=1; //no success
        }
        else //if sda=0 the ACK right
        {
        scl=0;
        Txmt_Success=1; //success
        ACK_Error=0;
        }
        }
        void TxmtSlaveAddr(uchar SlaveAddr)
        {
        ACK_Error=0;
        Txmt_Success=0;
        SendData(SlaveAddr);
        if(!Txmt_Success&&ACK_Error) //if no success and ACK wrong
        stop(); //如果失敗則發(fā)送STOP結(jié)束整個流程
        }
        void Writeone_24c256(uchar Addr_H,uchar Addr_L,uchar W_Data)//寫一個數(shù)據(jù)
        {
        start(); //START
        TxmtSlaveAddr(0xa0); //發(fā)送器件地址(寫)
        SendData(Addr_H);
        SendData(Addr_L); //發(fā)生需讀取的地址
        SendData(W_Data); //寫入數(shù)據(jù)
        stop(); //STOP
        }
        uchar GetData(uchar ack_read)
        {
        uchar I2CBitCount;
        uchar Data_G;
        for(I2CBitCount=0;I2CBitCount<8;I2CBitCount++)
        {
        scl=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();

        scl=1; //A rising edge in scl to read sda
        Data_G=Data_G<<1; //shift letf first
        _nop_();
        if(sda)
        Data_G=Data_G|0x01;
        else
        Data_G=Data_G&0xFE;
        scl=0;
        }
        scl=0;
        if(!ack_read)
        sda=0; /*在此發(fā)出應(yīng)答或非應(yīng)答信號 */
        else sda=1;
        _nop_();
        _nop_();
        _nop_();
        scl=1;
        _nop_();
        _nop_(); /*時鐘低電平周期大于4μs*/
        _nop_();
        _nop_();
        _nop_();
        scl=0; /*清時鐘線,鉗住I2C總線以便繼續(xù)接收*/
        _nop_();
        sda=1;
        _nop_();
        return Data_G; //return the result
        delay(500);
        }
        uchar Readone_24c256(uchar Addr_H,uchar Addr_L)
        {
        uchar ReadData;
        start(); //START
        TxmtSlaveAddr(0xa0); //發(fā)送器件地址(寫)
        SendData(Addr_H); //發(fā)生需讀取的地址
        SendData(Addr_L);
        start(); //START
        TxmtSlaveAddr(0xa1); //發(fā)送器件地址(讀)
        ReadData=GetData(1); //讀取1個字節(jié)數(shù)據(jù)
        stop(); //STOP
        return ReadData;
        }
        void init()
        {
        sda=1;
        delay15ms();
        scl=1;
        delay15ms();
        }
        void main()
        {
        init();
        Writeone_24c256(0x00,0x09,a5);
        delay(200);
        Readone_24c256(0x00,0x09);
        while(1);
        }



        QQ|手機(jī)版|MCU資訊論壇 ( 京ICP備18035221號-2 )|網(wǎng)站地圖

        GMT+8, 2025-5-1 23:37 , Processed in 0.040512 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        返回頂部
        亚洲国产精品一区第二页| 亚洲一二成人精品区| 69久久夜色精品国产69| 日韩精品无码中文字幕一区二区 | 国产精品自产拍在线18禁| 国产成人精品久久一区二区三区av| 99RE8这里有精品热视频| 欧美XXXX黑人又粗又长精品| 中文字幕久久精品| 久久99热只有频精品8| 韩国精品欧美一区二区三区| 国产精品免费在线播放| 扒开粉嫩的小缝喷白浆下| 2022国产精品福利在线观看| 成人精品一区二区久久| 亚洲国产精品一区二区三区久久| 亚洲国产精品福利片在线观看| 精品亚洲欧美高清不卡高清| 久久精品国产99久久丝袜| 久久国产精品99国产精| 国产99久久久国产精品~~牛| 亚洲欧洲自拍拍偷精品 美利坚| 国产精品国产亚洲精品看不卡| 国产精品无码专区在线观看| 亚洲精品无码不卡在线播HE| 亚洲国产精品免费视频| 冲田杏梨在线精品二区| 国产久爱免费精品视频| 黑人巨大精品欧美| 亚洲欧洲久久久精品| 亚洲自偷自偷精品| 亚洲精品中文字幕乱码三区 | 亚洲av无码精品网站| 国产微拍精品一区二区| 乱色精品无码一区二区国产盗 | 黄色网战在线观看| 国产欧美精品区一区二区三区 | 精品久久久久久国产91| 影音先锋男人资源站在线观看| 国产精品亚洲аv无码播放| 手机日韩精品视频在线看网站|