在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用c語言實現(xiàn)24LC256讀寫(非軟件模擬方式)

            用c語言實現(xiàn)24LC256讀寫(非軟件模擬方式)

            作者: 時間:2011-02-16 來源:網(wǎng)絡(luò) 收藏


            #include
            unsignedchari=0;
            unsignedcharreceive=0x00;

            voidi2c_start()
            {
            SEN=1;//啟動
            do{
            }while(SSPIF==0);
            SSPIF=0;
            }

            voidi2c_stop()
            {
            PEN=1;//產(chǎn)生停止條件
            do{
            ;
            }while(SSPIF==0);
            SSPIF=0;
            }

            voidi2c_restart()
            {
            RSEN=1;//啟動,反復(fù)啟動
            do{
            ;
            }while(SSPIF==0);
            SSPIF=0;
            }

            voidi2c_dataout()//數(shù)據(jù)發(fā)送等待過程
            {
            do{
            ;
            }while(SSPIF==0);
            SSPIF=0;
            }

            voidi2c_datain()//讀取24LC256時,不是讀的最后一個字節(jié)時使用
            {
            RCEN=1;
            do{
            ;
            }while(SSPIF==0);
            SSPIF=0;
            receive=SSPBUF;
            ACKDT=0;
            ACKEN=1;
            do{
            ;
            }while(SSPIF==0);
            SSPIF=0;
            }

            voidi2c_datainlast()//讀取最后一個字節(jié),或只讀取24lc256中一個字節(jié)
            {
            SSPIF=0;
            RCEN=1;
            do{
            ;
            }while(SSPIF==0);
            SSPIF=0;
            receive=SSPBUF;
            ACKDT=1;
            ACKEN=1;
            do{
            ;
            }while(SSPIF==0);
            SSPIF=0;

            }

            voidi2c_error()
            {
            i2c_stop();
            return;
            }

            voidwrite(unsignedintaddr,unsignedchardata,unsignedintn)//向iic寫入一字節(jié)數(shù)據(jù)地址,數(shù)據(jù),字節(jié)個數(shù)
            {
            i2c_start();
            SSPBUF=0xA0;//EEPROM尋址碼和寫操作命令碼
            i2c_dataout();//發(fā)送

            if(ACKSTAT)
            i2c_error();//無應(yīng)答,錯誤!
            elseif(!ACKSTAT)
            SSPBUF=addr/256;
            //高eeaddr/256,取eeprom數(shù)據(jù)地址高字節(jié)
            i2c_dataout();//發(fā)送

            if(ACKSTAT)
            i2c_error();//無應(yīng)答,錯誤!
            elseif(!ACKSTAT)
            SSPBUF=addr%256;//低eeaddr%256,取eeprom數(shù)據(jù)地址低字節(jié)
            i2c_dataout();//發(fā)送

            for(i=0;i{
            if(ACKSTAT)//應(yīng)答
            i2c_error();//無應(yīng)答,錯誤!
            elseif(!ACKSTAT)
            SSPBUF=data;//eedata入eeprom的數(shù)據(jù)
            i2c_dataout();//發(fā)送
            }

            if(ACKSTAT)//應(yīng)答
            i2c_error();

            i2c_stop();//產(chǎn)生停止位,啟動eeprom內(nèi)部些過程

            do{
            i2c_start();
            SSPBUF=0xA0;
            i2c_dataout();
            i2c_stop();
            if(!ACKSTAT)break;
            }while(ACKSTAT);
            }

            unsignedintcurrent_read(void)//currentaddressreadok!
            {
            i2c_start();
            SSPBUF=0xA1;//尋址命令碼0xA0和讀命令
            i2c_dataout();
            if(ACKSTAT)//應(yīng)答
            i2c_error();
            elseif(!ACKSTAT)
            i2c_datainlast();
            i2c_stop();

            return((unsignedint)receive);
            }

            unsignedintrandom_read(unsignedinteepromaddress)
            {
            i2c_start();
            SSPBUF=0xA0;//EEPROM尋址碼和寫操作命令碼
            i2c_dataout();//發(fā)送

            if(ACKSTAT)
            i2c_error();//無應(yīng)答,錯誤!
            elseif(!ACKSTAT)
            SSPBUF=eepromaddress/256;
            //高eeaddr/256,取eeprom數(shù)據(jù)地址高字節(jié)
            i2c_dataout();//發(fā)送

            if(ACKSTAT)
            i2c_error();//無應(yīng)答,錯誤!
            elseif(!ACKSTAT)
            SSPBUF=eepromaddress%256;//低eeaddr%256,取eeprom數(shù)據(jù)地址低字節(jié)
            i2c_dataout();//發(fā)送

            if(ACKSTAT)
            i2c_error();//無應(yīng)答,錯誤!
            elseif(!ACKSTAT)

            i2c_restart();
            SSPBUF=0xA1;//尋址命令碼0xA0和讀命令
            i2c_dataout();

            if(ACKSTAT)//應(yīng)答
            i2c_error();
            elseif(!ACKSTAT)
            i2c_datainlast();
            i2c_stop();
            return((unsignedint)receive);

            }

            voidi2c_init()
            {
            SSPSTAT=0x00;
            TRISC=0xD8;
            SSPADD=19;
            SSPIE=0;
            SSPCON=0x28;
            }


            //在主程序中,先i2c_init();然后開始讀/寫24LC256中數(shù)據(jù),經(jīng)多次運行
            nobug
            //程序中的寄存器必須芯片內(nèi)部包含,否則無法實現(xiàn)硬件iic讀寫。



            c語言相關(guān)文章:c語言教程




            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉