在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > I2C總線(xiàn)在8051單片機(jī)系統(tǒng)中的應(yīng)用

            I2C總線(xiàn)在8051單片機(jī)系統(tǒng)中的應(yīng)用

            作者: 時(shí)間:2013-01-06 來(lái)源:網(wǎng)絡(luò) 收藏


              4、虛擬軟件結(jié)構(gòu)

              對(duì)于虛擬來(lái)說(shuō)要實(shí)現(xiàn)其功能主要是要軟件要注意I2C器件的操作時(shí)序,總線(xiàn)的運(yùn)行由主機(jī)控制。所謂主機(jī)即啟動(dòng)數(shù)據(jù)的傳送即發(fā)出啟動(dòng)信號(hào),發(fā)出時(shí)鐘信號(hào),傳送結(jié)束時(shí)發(fā)出停止信號(hào)的設(shè)備,通常主機(jī)是微處理器。被主機(jī)尋訪(fǎng)的設(shè)備都稱(chēng)為從機(jī)。為了進(jìn)行通訊,每個(gè)接到的設(shè)備都有一個(gè)唯一的地址,以便于主機(jī)尋訪(fǎng)。主機(jī)和從機(jī)的數(shù)據(jù)傳送,可以由主機(jī)發(fā)送數(shù)據(jù)到從機(jī),也可以是從機(jī)發(fā)到主機(jī)。凡是發(fā)送數(shù)據(jù)到總線(xiàn)的設(shè)備稱(chēng)為發(fā)送器,從總線(xiàn)上接收數(shù)據(jù)的設(shè)備被稱(chēng)為接受器。根據(jù)I2C的時(shí)序,軟件分為開(kāi)始、停止、應(yīng)答、檢查應(yīng)答、不產(chǎn)生應(yīng)答、讀操作、寫(xiě)操作。以下為C程序清單調(diào)試成功。


              #include
              Sbit sda=P1^7;
              Sbit SCL=P1^6;


              啟動(dòng)函數(shù),在SCL為高時(shí),SDA的下降沿為啟動(dòng)信號(hào)。

            void Start(void)

            { scl=0; //SCL處于低電平時(shí),SDA才能改變
            sda=1;// 一個(gè)"開(kāi)始"狀態(tài),該狀態(tài)必須在其他命令之前執(zhí)行
            scl=1; // 當(dāng)scl為高電平時(shí)sda的下降沿表示開(kāi)始狀態(tài)
            _nop_(); _nop_(); _nop_(); //給一個(gè)延時(shí)
            sda=0; //給下降沿表示開(kāi)始
            _nop_(); _nop_(); _nop_(); _nop_();
            scl=0; //恢復(fù)低電平以改變sda的值
            sda=1; }


              停止函數(shù),在SCL為高時(shí),SDA的上升沿為停止信號(hào)。

            void Stop(void)
            {scl=0; //SCL處于低電平時(shí),SDA改變數(shù)值 */
            sda=0; //scl為高電平時(shí),sda的上升沿表示停止,
            scl=1; //scl為高電平時(shí)改變sda的狀態(tài)表示啟動(dòng),停止
            _nop_(); _nop_(); _nop_(); // 延時(shí)
            sda=1;
            _nop_(); _nop_(); _nop_();
            scl=0; }
            /* * * * * 檢查應(yīng)答位 * * * * */
            bit RecAck(void)
            { scl=0; //在scl為0的時(shí)候改變sda的值
            sda=1;
            scl=1; //在scl為1的時(shí)候等待sda值的變化,在器件接受到數(shù)據(jù)后會(huì)把sda拉低。
            _nop_(); _nop_(); _nop_(); _nop_();
            CY=sda; // 因?yàn)榉祷刂悼偸欠旁贑Y中的
            scl=0;
            _nop_();
            return(CY); //如果為CY為低則表示接受成功,如果為高,則表示接受失敗。
            }
            /* * * * *對(duì)I2C總線(xiàn)產(chǎn)生應(yīng)答(一般用在讀操作中) * * * * */
            void Ack(void)
            {
            sda=0;// EEPROM通過(guò)在收到每個(gè)地址或數(shù)據(jù)之后,
            _nop_();_nop_();
            scl=1;//置SDA低電平的方式確認(rèn)表示收到讀SDA口狀態(tài)
            _nop_(); _nop_(); _nop_(); _nop_();
            scl=0;
            _nop_();
            sda=1;
            }

            /* * * * * * * * * 不對(duì)I2C總線(xiàn)產(chǎn)生應(yīng)答 * * * * */
            void NoAck(void)
            { sda=1;
            scl=1;
            _nop_(); _nop_(); _nop_(); _nop_();
            scl=0;
            }


              向I2C總線(xiàn)寫(xiě)數(shù)據(jù),每次寫(xiě)8位數(shù)據(jù)。

            void Send(uchar sendbyte)
            {uchar j=8;
            for(;j>0;j--)
            {scl=0;//拉低scl準(zhǔn)備給上升沿
            delay(5);//延時(shí)
            sendbyte = 1;// 使CY=sendbyte^7;
            sda=CY; // CY 進(jìn)位標(biāo)志位
            scl=1; //給上升沿,發(fā)出sda的狀態(tài)值
            }
            scl=0;
            }


              從I2C總線(xiàn)上讀數(shù)據(jù)子程序 ,每次讀8位數(shù)據(jù)。

            uchar Receive(void)
            { register receivebyte,i=8;
            scl=0;
            while(i--)
            { scl=1; //拉高scl準(zhǔn)備給下降沿
            receivebyte=(receivebyte 1)|sda; //接受值左移一位把低位和sda相或得到sda的狀態(tài)值
            scl=0; //給下降沿發(fā)出sda的狀態(tài)值
            }
            return(receivebyte);
            }


              5、結(jié)論

              本文介紹了I2C總線(xiàn)的組成及時(shí)序,并以ATMEL公司的為例給出了用C語(yǔ)言模擬I2C總線(xiàn)的時(shí)序的起始、停止及CPU向I2C總線(xiàn)的發(fā)送和接收8位字節(jié)的程序。


              6、參考文獻(xiàn)

              【1】馬忠梅.籍順心.張凱.馬巖.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)【M】.北京航空航天大學(xué)出版社.2003

              【2】楊將新.李華軍.劉東駿.單片機(jī)程序設(shè)計(jì)及應(yīng)用從基礎(chǔ)到實(shí)踐【M】.電子工業(yè)出版社.2006

              【3】邊春遠(yuǎn).王志強(qiáng).MCS-51單片機(jī)應(yīng)用開(kāi)發(fā)實(shí)用子程序【M】.人民郵電出版社.2005

              【4】陳小忠.黃寧.趙小俠.單片機(jī)接口技術(shù)實(shí)用子程序【M】.人民郵電出版社.2006

              【5】陳柄和.C語(yǔ)言與C++語(yǔ)言程序設(shè)計(jì)【M】. 北京航空航天大學(xué)出版社.2004

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



            上一頁(yè) 1 2 下一頁(yè)

            關(guān)鍵詞: I2C總線(xiàn) 8051 AT24C256

            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉