<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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語句。當sda總=1時,延時255時間,如果超出255時間,則while語句為假。退while循環(huán),默認應(yīng)答了。
          i++;
          scl=0;//應(yīng)答后,將scl變成低電平,因為是第九個時鐘信號,時鐘完了要將電平拉低
          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當中的一位,此時數(shù)據(jù)在sda中保持穩(wěn)定的0或1
          delay();//數(shù)據(jù)保持4.7微秒以上,穩(wěn)定
          scl=1;//scl=1準備開始傳送數(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先底電平,準備高電平時候讀取數(shù)據(jù)
          delay();
          sda=1;//釋放數(shù)據(jù)總線,因為此時不知道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);//寫器件地址,首次寫從機地址1010 0000,前四位固定,后三位是外接口低電平,最后一位是寫的意思
          respons();//應(yīng)答信號,A
          write_byte(3);//寫入首地址,隨便寫個3
          respons();//應(yīng)答信號,A
          write_byte(0x55);//寫進去一個數(shù)據(jù)
          respons();//應(yīng)答信號
          stop();//結(jié)束信號,寫入完畢
          delay1(200);
          start();//準備讀出的開始信號
          write_byte(0xa0);//首先寫進去器件地址
          respons();//應(yīng)答信號,A
          write_byte(3);//寫入器件首地址
          respons();//應(yīng)答信號,A
          start();
          write_byte(0xa1);//準備讀出數(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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();