在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            IIC總線使用方法

            作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
            #include
            #define uchar unsigned char
            uchar a;
            sbit sda=P2^0;
            sbit scl=P2^1;
            void delay1(uchar z)
            {
            uchar x,y;
            for(x=z;x>0;x--)
            for(y==100;y>0;y--);
            }
            void delay()//延時5微秒左右
            { ;; }
            void start()//起始函數(shù),scl高電平時sda下降沿觸發(fā)起始信號
            {
            sda=1;
            delay();
            scl=1;
            delay();
            sda=0;
            delay();
            }
            void stop()//停止信號,scl高電平時sda下降沿觸發(fā)停止信號
            {
            sda=0;
            delay();
            scl=1;
            delay();
            sda=1;
            delay();
            }
            void respons()//應(yīng)答信號
            {
            uchar i;
            scl=1;
            delay();
            while((sda==1)&&(i<250))//scl=1時候,判斷sda是否=1。sda=1時,沒有應(yīng)答,sda=0時,while內(nèi)部為假,退出while語句。當(dāng)sda總=1時,延時255時間,如果超出255時間,則while語句為假。退while循環(huán),默認(rèn)應(yīng)答了。
            i++;
            scl=0;//應(yīng)答后,將scl變成低電平,因?yàn)槭堑诰艂€時鐘信號,時鐘完了要將電平拉低
            delay();//scl=0,持續(xù)一會
            }
            void init()//初始化函數(shù)
            {
            scl=1;//總線釋放(空閑)是高電平
            sda=1;
            }
            void write_byte(uchar date)//寫字節(jié),一位一位的寫,數(shù)據(jù)左移一位,一位一位的傳送最高位
            {
            uchar i,temp;
            temp=date;//要寫入的值給temp
            scl=0;//scl=0時候數(shù)據(jù)可以不穩(wěn)定,隨便變化
            delay();
            for(i=0;i<8;i++)
            {
            temp=temp<<1;//temp左移一位,將要最高位放入CY,CY就是PSW.7,來源于最近一次數(shù)據(jù)軟件改寫的位存儲區(qū)
            sda=CY;//數(shù)據(jù)線上的第一幀位為temp的最高位,也就是CY當(dāng)中的一位,此時數(shù)據(jù)在sda中保持穩(wěn)定的0或1
            delay();//數(shù)據(jù)保持4.7微秒以上,穩(wěn)定
            scl=1;//scl=1準(zhǔn)備開始傳送數(shù)據(jù)
            delay();//在這個延時過程中將要temp的最高位,CY的值傳送完畢
            scl=0;//傳送完畢后scl=0,此時傳送數(shù)據(jù)可以不穩(wěn)定
            delay();
            }
            sda=1;//將總線釋放
            delay();
            }
            uchar read_byte()//讀函數(shù)
            {
            uchar i,j,k;
            scl=0;//scl先底電平,準(zhǔn)備高電平時候讀取數(shù)據(jù)
            delay();
            sda=1;//釋放數(shù)據(jù)總線,因?yàn)榇藭r不知道sda上是高電平還是低電平
            delay();
            for(i=0;i<8;i++)
            {
            scl=1;
            delay();
            j=sda;//將傳輸?shù)臄?shù)據(jù)的第一個位傳送給j
            k=(k<<1)|j;//k是讀出數(shù)據(jù),將要k與上j(傳輸?shù)奈唬瑐鬏斒裁吹玫绞裁?,然后再左移,最終8次后將要一個字節(jié)傳送給k
            scl=0;
            delay();
            }
            return k;
            }
            void main()
            {
            init();
            start();//起始信號
            write_byte(0xa0);//寫器件地址,首次寫從機(jī)地址1010 0000,前四位固定,后三位是外接口低電平,最后一位是寫的意思
            respons();//應(yīng)答信號,A
            write_byte(3);//寫入首地址,隨便寫個3
            respons();//應(yīng)答信號,A
            write_byte(0x55);//寫進(jìn)去一個數(shù)據(jù)
            respons();//應(yīng)答信號
            stop();//結(jié)束信號,寫入完畢
            delay1(200);
            start();//準(zhǔn)備讀出的開始信號
            write_byte(0xa0);//首先寫進(jìn)去器件地址
            respons();//應(yīng)答信號,A
            write_byte(3);//寫入器件首地址
            respons();//應(yīng)答信號,A
            start();
            write_byte(0xa1);//準(zhǔn)備讀出數(shù)據(jù),給器件地址1010 0001的意思是要讀出數(shù)據(jù)
            respons();//應(yīng)答信號,A
            a=read_byte();
            stop();
            P1=a;
            while(1);
            }


            關(guān)鍵詞: IIC總線使用方

            評論


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

            關(guān)閉