日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          24C02的存儲(chǔ)與讀取

          作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò) 收藏
          /*

          ------24C02存儲(chǔ)與讀取-----------
          1、用24C02來(lái)保存一個(gè)數(shù)組的內(nèi)容,然后再把它讀出來(lái);
          2、應(yīng)熟練掌握IIC總線(xiàn)的操作方法;
          3、啟動(dòng)信號(hào)、停止信號(hào),應(yīng)答與非應(yīng)答信號(hào)、測(cè)忙信號(hào)
          從當(dāng)前位置讀一個(gè)字節(jié)數(shù)據(jù)子程序,從當(dāng)前位置寫(xiě)一個(gè)字節(jié)子程序,
          從指定位置讀一個(gè)字節(jié)數(shù)據(jù)子程序,從指定位置寫(xiě)一個(gè)字節(jié)子程序。

          本文引用地址:http://yuyingmama.com.cn/article/201611/315576.htm

          4、各種信號(hào)的操作時(shí)序;
          5、該程序也可作為IIC的通用子程序使用;
          6、該程序在普中單片機(jī)實(shí)訓(xùn)箱上通過(guò)測(cè)試;

          */

          #include
          #include
          #define uint unsigned int
          #define uchar unsigned char
          unsigned char code dula[] = {0x3f,0x06,0x5b,0x4f,
          0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
          uchar wula[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
          sbit sda=P2^1; //定義串行數(shù)據(jù)口
          sbit scl=P2^0; //定義串行時(shí)鐘口
          void delay(uint z);
          void start();
          void stop();
          void ack(bit aa);
          uchar iic_readbyte();
          void iic_writebyte(uchar date1);
          void checkack();
          uchar iic_addr_read(uchar addr);
          void iic_addr_write(uchar addr,uchar date1);
          void iic_addr_readn(uchar addr,uchar *s,uchar n);
          void iic_addr_writen(uchar addr,uchar *s,uchar n);
          void disp();
          void nop5();
          uchar write1[]={1,2,10,0,0,10,4,8,9,3};
          uchar read1[]={0,0,0,0,0,0,0,0,0,0};
          bit ack1;
          uchar temp3;
          //uchar flag1,flag2,num1,num2;
          void main()
          {
          /* 第一種方法從24C02中讀取和寫(xiě)入多個(gè)字節(jié)
          uchar jj;
          for(jj=0;jj<8;jj++)
          {
          iic_addr_write(jj+5,write1[jj]);
          delay(10);//此延時(shí)很重要;
          }

          delay(10);
          for(jj=0;jj<8;jj++)
          {
          read1[jj]=iic_addr_read(jj+5);
          delay(10);//此延時(shí)很重要;
          } */
          //
          //第二種方法從24C02中讀取和寫(xiě)入多個(gè)字節(jié)
          iic_addr_writen(8,write1,8);
          delay(50);
          iic_addr_readn(8,read1,8);

          while(1)
          {disp();
          }
          }


          //-----5US的延時(shí)子程序--------------
          void nop5()
          {
          _nop_();_nop_();_nop_();_nop_();_nop_();
          }
          //-------XMS延時(shí)子程序----------------
          void delay(uint z)
          {
          uint x,y;
          for(x=0;xfor(y=0;y<112;y++);
          }

          //-------啟動(dòng)信號(hào)-----------
          void start()
          {
          sda=1;
          nop5();
          scl=1;
          nop5();
          sda=0;
          nop5();
          scl=0;
          nop5();
          }
          //-------停止信號(hào)-----------
          void stop()
          {
          sda=0;
          nop5();
          scl=1;
          nop5();
          sda=1;
          nop5();
          scl=1;
          nop5();
          }
          //=------應(yīng)答與非應(yīng)答信號(hào)---------
          void ack(bit aa)
          {
          scl=0;
          nop5();
          if(aa==1)
          sda=1;
          else
          sda=0;
          scl=1;
          nop5();
          scl=0;
          nop5();
          }
          //-------測(cè)忙信號(hào)------------
          void checkack()
          { uchar i;
          sda=1;
          scl=0;
          nop5();
          scl=1;
          nop5();
          while((sda==1)&&(i<250))
          {i++;}
          scl=0;
          nop5();
          }
          //-------從當(dāng)前位置讀一個(gè)字節(jié)數(shù)據(jù)子程序---------------

          uchar iic_readbyte()
          {
          uchar i,temp;
          sda=1;
          scl=0;
          nop5();
          for(i=0;i<8;i++)
          {
          temp=temp<<1;
          scl=1;
          nop5();
          temp=temp|sda;
          scl=0;
          // nop5();
          // nop5();
          }
          scl=0;
          nop5();
          return(temp);
          }
          //-----從當(dāng)前位置寫(xiě)一個(gè)字節(jié)子程序-------------
          void iic_writebyte(uchar date1 )
          {
          uchar i,temp;
          temp=date1;
          for(i=0;i<8;i++)
          {
          temp=temp<<1;
          sda=CY;
          scl=1;
          nop5();
          scl=0;
          //nop5();
          // nop5();
          }
          checkack();
          delay(1);
          scl=0;
          nop5();
          }
          //---從指定位置讀一個(gè)字節(jié)數(shù)據(jù)子程序-----------------
          uchar iic_addr_read(uchar addr)
          { uchar k2;
          start();
          iic_writebyte(0xa0);
          delay(1);
          iic_writebyte(addr);
          delay(1);
          start();
          delay(10);
          iic_writebyte(0xa1);
          delay(10);
          k2=iic_readbyte();
          ack(1);
          stop();
          return(k2);
          }

          //---從指定位置寫(xiě)一個(gè)字節(jié)子程序-------------
          void iic_addr_write(uchar addr,uchar date1)
          {
          start();
          iic_writebyte(0xa0);
          delay(1);
          iic_writebyte(addr);
          delay(1);
          iic_writebyte(date1);
          delay(1);
          stop();
          }
          //----------從指定位置寫(xiě)多個(gè)字節(jié)子程序-------------------
          void iic_addr_writen(uchar addr,uchar *s,uchar n)
          {
          uchar i;
          start();
          iic_writebyte(0xa0);
          //delay(1);
          iic_writebyte(addr);
          // delay(1);
          for(i=0;i {
          iic_writebyte(*s);
          delay(20);//此延時(shí)一定要長(zhǎng)一些,否則易出錯(cuò)
          s++; //因?yàn)槠骷磻?yīng)時(shí)間慢,給它留足夠的時(shí)間;
          }
          stop();
          }
          //-------從指定位置讀多個(gè)字節(jié)數(shù)據(jù)子程序-------------------------
          void iic_addr_readn(uchar addr,uchar *s,uchar n)
          {
          uchar i;
          start();
          iic_writebyte(0xa0);
          //delay(1);
          iic_writebyte(addr);
          //delay(10);
          start();
          //delay(15);
          iic_writebyte(0xa1);
          //delay(10);
          for(i=0;i{
          *s=iic_readbyte();
          delay(1);
          ack(0);
          delay(20);//此延時(shí)一定要長(zhǎng)一些,否則易出錯(cuò)
          s++; //因?yàn)槠骷磻?yīng)時(shí)間慢,給它留足夠的時(shí)間;
          }
          *s=iic_readbyte();
          ack(1);
          stop();
          }

          //-----顯示數(shù)據(jù)----------
          void disp()
          {uchar i;
          for(i=0;i<8;i++)
          {P0=dula[read1[i]];
          P1=wula[i];
          delay(3);
          P0=0;
          }
          }



          關(guān)鍵詞: 24C02存儲(chǔ)與讀

          評(píng)論


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

          關(guān)閉