<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      51模擬IIC-頁讀寫操作

      51代碼頁讀寫IIC--模擬IIC

      #include <reg52.h>
      #include <intrins.h>
      
      sbit SDA = P0^0;
      sbit SCL = P0^1;
      sbit LED = P2^0;
      
      unsigned char code table[] = {0x1c,0X3B,0X2C,0X2D,0X5A,0X5C,0XC5,0X5b};
      void delayms(unsigned int t)
      {
          unsigned int i,j;
          for(i = t; i > 0; i --)
          for(j = 110; j > 0; j --);
      }
      void delay()
      {
              _nop_();
              _nop_();
              _nop_();
              _nop_();
              _nop_();
              _nop_();
              
      }
      void start()
      {
              SCL = 1;
              SDA = 1;
              delay();
              SDA = 0;
              delay();
              SCL = 0;
                      
      }
      
      void stop()
      {
              
              SDA = 0;
              delay();
              SCL = 1;
              delay();
              SDA = 1;
              delay();
      
      }
      
      void ack()
      {
              
              SCL = 0;
      
              delay();
              while(SDA);
              SCL = 1;
              delay();
              
              SCL = 0;
      }
      
      void noack()
      {
              SCL = 0;
              
              SDA = 1;
              SCL = 1;
              delay();
              SCL = 0;
      
      }
      
      void writebyte(unsigned char byte)
      {
              //MSB first
              unsigned char i = 0;
              SCL = 0;
              for(i = 0; i < 8; i ++)
              {
                      byte <<= 1;
                      SDA = CY;
                      delay();
                      SCL = 1;
                      delay();
                      SCL = 0;
              }
              
      //        SDA = 1;//waiting for ack
      //        delay();
              
              
      
              
      
      }
      
      unsigned char readbyte()
      {
              unsigned char i = 0,val = 0;
              SCL = 0;
              for(i = 0; i < 8 ; i ++)
              {
                      val <<= 1;
                      delay();
                      SCL = 1;
                      delay();
                      if(SDA)
                      {
                              val |= 0x01;
                      }        
                      else
                      {
                              val |= 0x00;
                      }
                      SCL = 0;
                      
              }
      
              SCL = 0;//release IIC bus
      
              return val;
      
                  
          
      
      }
      
      
      void write_data(unsigned char add, unsigned char byte)
      {
               start();
               writebyte(0xae);
               ack();
               writebyte(add);
               ack();
               writebyte(byte);
               ack();
      
               stop();
      }
      
      unsigned char read_data(unsigned char add)
      {
              unsigned char val = 0;
              start();
              writebyte(0xae);
              ack();
              writebyte(add);
              ack();
              start();
              writebyte(0xaf);
              ack();
              val = readbyte();
              noack();
              stop();
      
              return val;
      }
      
      void pagewrite(unsigned char add)
      {
          unsigned char i;
          start();
          writebyte(0xae);
          ack();
          writebyte(add);
          ack();
          for(i = 0; i < 8; i ++)
          {
              writebyte(table[i]);
              ack();
          }
          stop();
      }
      
      unsigned char *pageread(unsigned char add)
      {
          unsigned char value[8],i;
          start();
          writebyte(0xae);
          ack();
          writebyte(add);
          ack();
      
          start();
          writebyte(0xaf);
          ack();
          for(i = 0; i < 8; i ++)
          {
              value[i] = readbyte();
              if(i == 7)
              {
                  noack();
              }
              else
              {
                  SCL = 0;  //主機來應答
          
                  delay();
                  SDA = 0;
                  delay();
                  SCL = 1;
                  delay();
                  
                  SCL = 0;
                  delay();
                  SDA = 1;
                  delay();
                  
              }
              delay();
          }
          stop();
      
          return value;
          
      
      }
      void main()
      {
              unsigned char *TMP_VAL, Tmp = 0;
      /**     write_data(0x01,0xAC); //TEST 1    
              delayms(500);     
      
              Tmp = read_data(0x01);
              delayms(5);
              if(Tmp == 0xac)
              {
                  P2 = Tmp;
              } 
       **/
      /**        pagewrite(0X00);  //TEST2
      
              delayms(500);     
      
              Tmp = read_data(0x07);
              delayms(5);
              if(Tmp == table[7])
              {
                  P2 = Tmp;
              }         **/
              pagewrite(0X00);
              delayms(600);
              TMP_VAL = pageread(0x00);
              delayms(500);
              if(*(TMP_VAL+1) == table[1])
              {
                  P2 = *(TMP_VAL+1);
              }
              while(1);
      }

      注意以下要點

      過程中出現只能寫入偶數情況,是Stop()函數的問題,在SCL上升沿時發生了SDA改變導致的,調整一下先后順序即可;

      頁讀操作注意ack是主機拉低SDA發出的應答,和單字節讀寫不同;

      如何接收函數返回的數組,以及如何寫這個返回數組的函數。

      調試過程中有EE不拉低SDA應答的情況,后來排查是EE芯片壞了。

      寫完數據不能立刻讀,要有稍長的延時才行。

      posted @ 2024-05-16 22:21  了解2號  閱讀(56)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 未满十八18禁止免费无码网站| 晴隆县| 不卡免费一区二区日韩av| 亚洲2022国产成人精品无码区| 亚洲一区二区三区激情视频| 国产中文字幕精品在线| 成人亚欧欧美激情在线观看| 性做久久久久久久久| 国产精品办公室沙发| 日本欧美大码a在线观看| 国产一区二区三区禁18| 精品久久精品午夜精品久久 | 在线中文字幕国产一区| 视频一区视频二区视频三| 日本a在线播放| 午夜精品福利一区二区三| 野花社区视频www官网| 国产成人午夜在线视频极速观看| 两性午夜刺激性视频| 麻豆精品一区二区三区蜜臀| 中文字幕无线码免费人妻| 午夜免费无码福利视频麻豆| 久久天天躁狠狠躁夜夜avapp| 两个人的视频www免费| 国产欧美日韩高清在线不卡| 免费吃奶摸下激烈视频| 国产成人综合网亚洲第一| 人妻中文字幕精品系列| 伊人狠狠色丁香婷婷综合| 亚洲国产一区二区精品专| 国产不卡精品视频男人的天堂| 国产一区二三区日韩精品| 国产无遮挡又黄又爽高潮| 国产亚洲精品一区二区不卡| 国产av第一次处破| 国产99青青成人A在线| 亚洲精品一区二区三区色| 97精品伊人久久久大香线蕉| 亚洲理论电影在线观看| 国产日韩综合av在线| 国产色无码专区在线观看|