亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? i2c.lst

?? 周立功單片機(jī)上的源程序
?? LST
字號:
C51 COMPILER V7.09   I2C                                                                   07/03/2006 13:45:36 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2                  I2C.c
   3                  標(biāo)準(zhǔn)80C51單片機(jī)模擬I2C總線的主機(jī)程序
   4                  Copyright (c) 2006,廣州周立功單片機(jī)發(fā)展有限公司
   5                  All rights reserved.
   6                  本程序僅供學(xué)習(xí)參考,不提供任何可靠性方面的擔(dān)保;請勿用于商業(yè)目的
   7          */
   8          
   9          
  10          #include "I2C.h"
  11          
  12          
  13          //定義延時變量,用于宏I2C_Delay()
  14          unsigned char data I2C_Delay_t;
  15          
  16          /*
  17          宏定義:I2C_Delay()
  18          功能:延時,模擬I2C總線專用
  19          */
  20          #define I2C_Delay()\
  21          {\
  22                  I2C_Delay_t = (I2C_DELAY_VALUE);\
  23                  while ( --I2C_Delay_t != 0 );\
  24          }
  25          
  26          
  27          /*
  28          函數(shù):I2C_Init()
  29          功能:I2C總線初始化,使總線處于空閑狀態(tài)
  30          說明:在main()函數(shù)的開始處,通常應(yīng)當(dāng)要執(zhí)行一次本函數(shù)
  31          */
  32          void I2C_Init()
  33          {
  34   1              I2C_SCL = 1;
  35   1              I2C_Delay();
  36   1              I2C_SDA = 1;
  37   1              I2C_Delay();
  38   1      }
  39          
  40          
  41          /*
  42          函數(shù):I2C_Start()
  43          功能:產(chǎn)生I2C總線的起始狀態(tài)
  44          說明:
  45                  SCL處于高電平期間,當(dāng)SDA出現(xiàn)下降沿時啟動I2C總線
  46                  不論SDA和SCL處于什么電平狀態(tài),本函數(shù)總能正確產(chǎn)生起始狀態(tài)
  47                  本函數(shù)也可以用來產(chǎn)生重復(fù)起始狀態(tài)
  48                  本函數(shù)執(zhí)行后,I2C總線處于忙狀態(tài)
  49          */
  50          void I2C_Start()
  51          {
  52   1              I2C_SDA = 1;
  53   1              I2C_Delay();
  54   1              I2C_SCL = 1;
  55   1              I2C_Delay();
C51 COMPILER V7.09   I2C                                                                   07/03/2006 13:45:36 PAGE 2   

  56   1              I2C_SDA = 0;
  57   1              I2C_Delay();
  58   1              I2C_SCL = 0;
  59   1              I2C_Delay();
  60   1      }
  61          
  62          
  63          /*
  64          函數(shù):I2C_Write()
  65          功能:向I2C總線寫1個字節(jié)的數(shù)據(jù)
  66          參數(shù):
  67                  dat:要寫到總線上的數(shù)據(jù)
  68          */
  69          void I2C_Write(unsigned char dat)
  70          {
  71   1              unsigned char t = 8;
  72   1              do
  73   1              {
  74   2                      I2C_SDA = (bit)(dat & 0x80);
  75   2                      dat <<= 1;
  76   2                      I2C_SCL = 1;
  77   2                      I2C_Delay();
  78   2                      I2C_SCL = 0;
  79   2                      I2C_Delay();
  80   2              } while ( --t != 0 );
  81   1      }
  82          
  83          
  84          /*
  85          函數(shù):I2C_Read()
  86          功能:從從機(jī)讀取1個字節(jié)的數(shù)據(jù)
  87          返回:讀取的一個字節(jié)數(shù)據(jù)
  88          */
  89          unsigned char I2C_Read()
  90          {
  91   1              unsigned char dat;
  92   1              unsigned char t = 8;
  93   1              I2C_SDA = 1;    //在讀取數(shù)據(jù)之前,要把SDA拉高
  94   1              do
  95   1              {
  96   2                      I2C_SCL = 1;
  97   2                      I2C_Delay();
  98   2                      dat <<= 1;
  99   2                      if ( I2C_SDA ) dat |= 0x01;
 100   2                      I2C_SCL = 0;
 101   2                      I2C_Delay();
 102   2              } while ( --t != 0 );
 103   1              return dat;
 104   1      }
 105          
 106          
 107          /*
 108          函數(shù):I2C_GetAck()
 109          功能:讀取從機(jī)應(yīng)答位
 110          返回:
 111                  0:從機(jī)應(yīng)答
 112                  1:從機(jī)非應(yīng)答
 113          說明:
 114                  從機(jī)在收到每個字節(jié)的數(shù)據(jù)后,要產(chǎn)生應(yīng)答位
 115                  從機(jī)在收到最后1個字節(jié)的數(shù)據(jù)后,一般要產(chǎn)生非應(yīng)答位
 116          */
 117          bit I2C_GetAck()
C51 COMPILER V7.09   I2C                                                                   07/03/2006 13:45:36 PAGE 3   

 118          {
 119   1              bit ack;
 120   1              I2C_SDA = 1;
 121   1              I2C_Delay();
 122   1              I2C_SCL = 1;
 123   1              I2C_Delay();
 124   1              ack = I2C_SDA;
 125   1              I2C_SCL = 0;
 126   1              I2C_Delay();
 127   1              return ack;
 128   1      }
 129          
 130          
 131          /*
 132          函數(shù):I2C_PutAck()
 133          功能:主機(jī)產(chǎn)生應(yīng)答位或非應(yīng)答位
 134          參數(shù):
 135                  ack=0:主機(jī)產(chǎn)生應(yīng)答位
 136                  ack=1:主機(jī)產(chǎn)生非應(yīng)答位
 137          說明:
 138                  主機(jī)在接收完每一個字節(jié)的數(shù)據(jù)后,都應(yīng)當(dāng)產(chǎn)生應(yīng)答位
 139                  主機(jī)在接收完最后一個字節(jié)的數(shù)據(jù)后,應(yīng)當(dāng)產(chǎn)生非應(yīng)答位
 140          */
 141          void I2C_PutAck(bit ack)
 142          {
 143   1              I2C_SDA = ack;
 144   1              I2C_Delay();
 145   1              I2C_SCL = 1;
 146   1              I2C_Delay();
 147   1              I2C_SCL = 0;
 148   1              I2C_Delay();
 149   1      }
 150          
 151          
 152          /*
 153          函數(shù):I2C_Stop()
 154          功能:產(chǎn)生I2C總線的停止?fàn)顟B(tài)
 155          說明:
 156                  SCL處于高電平期間,當(dāng)SDA出現(xiàn)上升沿時停止I2C總線
 157                  不論SDA和SCL處于什么電平狀態(tài),本函數(shù)總能正確產(chǎn)生停止?fàn)顟B(tài)
 158                  本函數(shù)執(zhí)行后,I2C總線處于空閑狀態(tài)
 159          */
 160          void I2C_Stop()
 161          {
 162   1              unsigned int t = I2C_STOP_WAIT_VALUE;
 163   1              I2C_SDA = 0;
 164   1              I2C_Delay();
 165   1              I2C_SCL = 1;
 166   1              I2C_Delay();
 167   1              I2C_SDA = 1;
 168   1              I2C_Delay();
 169   1              while ( --t != 0 );             //在下一次產(chǎn)生Start之前,要加一定的延時
 170   1      }
 171          
 172          
 173          /*
 174          函數(shù):I2C_Puts()
 175          功能:主機(jī)通過I2C總線向從機(jī)發(fā)送多個字節(jié)的數(shù)據(jù)
 176          參數(shù):
 177                  SlaveAddr:從機(jī)地址(高7位是從機(jī)地址,最低位是寫標(biāo)志0)
 178                  SubAddr:從機(jī)的子地址
 179                  Size:數(shù)據(jù)的字節(jié)數(shù)
C51 COMPILER V7.09   I2C                                                                   07/03/2006 13:45:36 PAGE 4   

 180                  *dat:要發(fā)送的數(shù)據(jù)
 181          返回:
 182                  0:發(fā)送成功
 183                  1:在發(fā)送過程中出現(xiàn)異常
 184          */
 185          bit I2C_Puts(unsigned char SlaveAddr, unsigned char SubAddr, unsigned char Size, char *dat)
 186          {
 187   1      //檢查長度
 188   1              if ( Size == 0 ) return 0;
 189   1      //確保從機(jī)地址最低位是0
 190   1              SlaveAddr &= 0xFE;
 191   1      //啟動I2C總線
 192   1              I2C_Start();
 193   1      //發(fā)送從機(jī)地址
 194   1              I2C_Write(SlaveAddr);
 195   1              if ( I2C_GetAck() )
 196   1              {
 197   2                      I2C_Stop();
 198   2                      return 1;
 199   2              }
 200   1      //發(fā)送子地址
 201   1              I2C_Write(SubAddr);
 202   1              if ( I2C_GetAck() )
 203   1              {
 204   2                      I2C_Stop();
 205   2                      return 1;
 206   2              }
 207   1      //發(fā)送數(shù)據(jù)
 208   1              do
 209   1              {
 210   2                      I2C_Write(*dat++);
 211   2                      if ( I2C_GetAck() )
 212   2                      {
 213   3                              I2C_Stop();
 214   3                              return 1;
 215   3                      }
 216   2              } while ( --Size != 0 );
 217   1      //發(fā)送完畢,停止I2C總線,并返回結(jié)果
 218   1              I2C_Stop();
 219   1              return 0;
 220   1      }
 221          
 222          
 223          /*
 224          函數(shù):I2C_Put()
 225          功能:主機(jī)通過I2C總線向從機(jī)發(fā)送1個字節(jié)的數(shù)據(jù)
 226          參數(shù):
 227                  SlaveAddr:從機(jī)地址(高7位是從機(jī)地址,最低位是寫標(biāo)志0)
 228                  SubAddr:從機(jī)的子地址
 229                  dat:要發(fā)送的數(shù)據(jù)
 230          返回:
 231                  0:發(fā)送成功
 232                  1:在發(fā)送過程中出現(xiàn)異常
 233          */
 234          bit I2C_Put(unsigned char SlaveAddr, unsigned char SubAddr, char dat)
 235          {
 236   1              return I2C_Puts(SlaveAddr,SubAddr,1,&dat);
 237   1      }
 238          
 239          
 240          /*
 241          函數(shù):I2C_Gets()
C51 COMPILER V7.09   I2C                                                                   07/03/2006 13:45:36 PAGE 5   

 242          功能:主機(jī)通過I2C總線從從機(jī)接收多個字節(jié)的數(shù)據(jù)
 243          參數(shù):
 244                  SlaveAddr:從機(jī)地址(高7位是從機(jī)地址,最低位是讀標(biāo)志1)
 245                  SubAddr:從機(jī)的子地址
 246                  Size:數(shù)據(jù)的字節(jié)數(shù)
 247                  *dat:保存接收到的數(shù)據(jù)
 248          返回:
 249                  0:接收成功
 250                  1:在接收過程中出現(xiàn)異常
 251          */
 252          bit I2C_Gets(unsigned char SlaveAddr, unsigned char SubAddr, unsigned char Size, char *dat)
 253          {
 254   1      //檢查長度
 255   1              if ( Size == 0 ) return 0;
 256   1      //確保從機(jī)地址最低位是0
 257   1              SlaveAddr &= 0xFE;      //確保最低位是0
 258   1      //啟動I2C總線
 259   1              I2C_Start();
 260   1      //發(fā)送從機(jī)地址
 261   1              I2C_Write(SlaveAddr);
 262   1              if ( I2C_GetAck() )
 263   1              {
 264   2                      I2C_Stop();
 265   2                      return 1;
 266   2              }
 267   1      //發(fā)送子地址
 268   1              I2C_Write(SubAddr);
 269   1              if ( I2C_GetAck() )
 270   1              {
 271   2                      I2C_Stop();
 272   2                      return 1;
 273   2              }
 274   1      //發(fā)送重復(fù)起始條件
 275   1              I2C_Start();
 276   1      //發(fā)送從機(jī)地址
 277   1              SlaveAddr |= 0x01;
 278   1              I2C_Write(SlaveAddr);
 279   1              if ( I2C_GetAck() )
 280   1              {
 281   2                      I2C_Stop();
 282   2                      return 1;
 283   2              }
 284   1      //接收數(shù)據(jù)
 285   1              for (;;)
 286   1              {
 287   2                      *dat++ = I2C_Read();
 288   2                      if ( --Size == 0 )
 289   2                      {
 290   3                              I2C_PutAck(1);
 291   3                              break;
 292   3                      }
 293   2                      I2C_PutAck(0);
 294   2              }
 295   1      //接收完畢,停止I2C總線,并返回結(jié)果
 296   1              I2C_Stop();
 297   1              return 0;
 298   1      }
 299          
 300          
 301          /*
 302          函數(shù):I2C_Get()
 303          功能:主機(jī)通過I2C總線從從機(jī)接收1個字節(jié)的數(shù)據(jù)
C51 COMPILER V7.09   I2C                                                                   07/03/2006 13:45:36 PAGE 6   

 304          參數(shù):
 305                  SlaveAddr:從機(jī)地址(高7位是從機(jī)地址,最低位是讀標(biāo)志1)
 306                  SubAddr:從機(jī)的子地址
 307                  *dat:保存接收到的數(shù)據(jù)
 308          返回:
 309                  0:接收成功
 310                  1:在接收過程中出現(xiàn)異常
 311          */
 312          bit I2C_Get(unsigned char SlaveAddr, unsigned char SubAddr, char *dat)
 313          {
 314   1              return I2C_Gets(SlaveAddr,SubAddr,1,dat);
 315   1      }
 316          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    415    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      16
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
2024国产精品| 国产99久久久国产精品潘金 | 亚洲欧美在线aaa| 久久午夜电影网| 久久这里只有精品首页| 欧美一区二区三区播放老司机| 一本到不卡精品视频在线观看| 精品在线一区二区三区| 青青草伊人久久| 精品中文字幕一区二区| 国产精品99久久久久久似苏梦涵| 精品一区二区日韩| 国产成人一级电影| 91香蕉视频黄| 欧美日韩免费观看一区三区| 538在线一区二区精品国产| 欧美一区二区黄| 国产日本一区二区| 艳妇臀荡乳欲伦亚洲一区| 亚洲香蕉伊在人在线观| 奇米精品一区二区三区在线观看一| 久久精品99久久久| eeuss鲁一区二区三区| 欧美日韩国产一二三| 欧美一级高清片在线观看| 7777精品伊人久久久大香线蕉完整版| 91在线云播放| 国产一区二三区| 蜜臀av国产精品久久久久| 午夜av一区二区三区| 欧美精品一区二区久久婷婷| 7799精品视频| 国产九九视频一区二区三区| 久久精品国产一区二区| 色av综合在线| 亚洲国产色一区| 欧美伊人久久久久久久久影院| 欧美一区二区三区性视频| 久久久久久亚洲综合| 99精品国产99久久久久久白柏| 国产精品国产自产拍在线| 久久色在线观看| 欧美日本一区二区| 激情图片小说一区| 国产精品三级久久久久三级| 久久99精品国产.久久久久| 五月开心婷婷久久| 中文字幕综合网| 欧美精品久久99久久在免费线| 欧美tickling挠脚心丨vk| 欧美日韩成人综合| 色综合久久久久综合体| 国产综合色在线| 日韩一级高清毛片| 成人免费毛片app| 国产精品久久久久影视| 国产成人av资源| 性欧美大战久久久久久久久| 制服丝袜国产精品| 国产三级三级三级精品8ⅰ区| 国产精品色在线观看| 久久久91精品国产一区二区三区| 中文子幕无线码一区tr| 亚洲午夜羞羞片| 日韩高清欧美激情| 高清成人免费视频| 欧美日韩久久久一区| 精品国产91九色蝌蚪| 1000部国产精品成人观看| 午夜精品久久久久久久99水蜜桃| 蜜桃av噜噜一区| 91玉足脚交白嫩脚丫在线播放| 宅男噜噜噜66一区二区66| 国产片一区二区| 婷婷一区二区三区| 在线观看日韩一区| 国产偷v国产偷v亚洲高清| 一级女性全黄久久生活片免费| 久久er精品视频| 色综合色综合色综合| 久久免费午夜影院| 亚洲高清免费观看| 国产福利一区在线| 中文字幕亚洲精品在线观看| 日韩av电影一区| 日本久久一区二区| 精品粉嫩超白一线天av| 亚洲一级不卡视频| 国产91在线观看丝袜| 6080日韩午夜伦伦午夜伦| 欧美国产精品一区二区| 免费在线视频一区| 欧美日本在线看| 国产精品剧情在线亚洲| 国产高清亚洲一区| 精品久久人人做人人爱| 日韩精品亚洲一区二区三区免费| 99久久久精品| 国产精品麻豆欧美日韩ww| 亚洲va欧美va国产va天堂影院| 成人av在线看| 亚洲国产精品高清| 成人午夜电影久久影院| 日本最新不卡在线| 高清av一区二区| 欧美成人a视频| 国产成人午夜电影网| 欧美三级午夜理伦三级中视频| 亚洲欧美在线aaa| 蓝色福利精品导航| 日韩一区二区三区av| 欧美zozo另类异族| 国产一区二区三区四 | 色综合中文字幕| 国产精品高潮久久久久无| 国产成人在线视频免费播放| 2024国产精品视频| 激情综合亚洲精品| 国产午夜三级一区二区三| 麻豆精品国产传媒mv男同| 天堂久久久久va久久久久| 成人ar影院免费观看视频| 一本大道av伊人久久综合| 精品日韩一区二区| 国产乱码精品1区2区3区| 久久视频一区二区| 99精品热视频| 亚洲免费伊人电影| 欧美日韩国产精品自在自线| 日韩高清一区在线| 久久亚洲一区二区三区明星换脸| 国产福利精品导航| 国产精品国产三级国产a| 色综合天天综合网天天狠天天| 伊人性伊人情综合网| 欧美日韩久久一区| 日韩国产在线一| 精品少妇一区二区三区在线视频| 在线观看国产一区二区| 日韩一区精品视频| 精品区一区二区| 日韩1区2区日韩1区2区| 欧美影视一区在线| 精品国一区二区三区| 色综合网色综合| 国产黄色91视频| 亚洲高清不卡在线观看| 久久综合九色综合欧美亚洲| 成人一区二区三区在线观看 | 日韩精品一区二区三区中文精品| 国内精品伊人久久久久影院对白| 91精品国产丝袜白色高跟鞋| 精品在线亚洲视频| 亚洲色图一区二区三区| 日韩精品中午字幕| 99re热这里只有精品视频| wwwwxxxxx欧美| 欧美在线观看一区二区| 日本道免费精品一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩精品一区二区三区四区| 国产精品一区二区三区网站| 欧美影片第一页| 欧美日韩精品欧美日韩精品| 欧美a一区二区| 亚洲视频一区二区在线观看| 欧美性一区二区| 亚洲一区二区三区影院| 久久综合色婷婷| 欧美蜜桃一区二区三区| av在线免费不卡| 成人在线综合网| 精品写真视频在线观看| 五月婷婷激情综合| 亚洲专区一二三| 亚洲免费毛片网站| 在线视频一区二区三区| 久久 天天综合| 日韩av网站在线观看| 亚洲第一成年网| 亚洲一区二区四区蜜桃| 伊人色综合久久天天人手人婷| 国产精品久久久久影院老司| 国产亚洲欧美在线| 久久综合九色综合97婷婷女人| 欧美在线999| 欧美精品久久一区二区三区| 日本韩国欧美在线| 91高清视频在线| 欧洲国内综合视频| 欧美性色欧美a在线播放| 欧美熟乱第一页| 91精品国产高清一区二区三区| 欧美视频在线观看一区二区| 国产美女娇喘av呻吟久久| 成人性生交大片| 色系网站成人免费| 欧美视频中文一区二区三区在线观看| 欧美专区在线观看一区| 日本道免费精品一区二区三区|