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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? i2c.lst

?? 正弦波發生電路如果其他會員下載一次您上載的源碼
?? LST
字號:
C51 COMPILER V8.09   I2C                                                                   11/28/2004 05:44:22 PAGE 1   


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

line level    source

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

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

 118   1              I2C_SCL = 0;
 119   1              I2C_Delay();
 120   1              return ack;
 121   1      }
 122          
 123          /*
 124          函數:I2C_PutAck()
 125          功能:主機產生應答位或非應答位
 126          參數:
 127                  ack=0:主機產生應答位
 128                  ack=1:主機產生非應答位
 129          說明:
 130                  主機在接收完每一個字節的數據后,都應當產生應答位
 131                  主機在接收完最后一個字節的數據后,應當產生非應答位
 132          */
 133          void I2C_PutAck(bit ack)
 134          {
 135   1              I2C_SDA = ack;
 136   1              I2C_Delay();
 137   1              I2C_SCL = 1;
 138   1              I2C_Delay();
 139   1              I2C_SCL = 0;
 140   1              I2C_Delay();
 141   1      }
 142          
 143          /*
 144          函數:I2C_Stop()
 145          功能:產生I2C總線的停止狀態
 146          說明:
 147                  SCL處于高電平期間,當SDA出現上升沿時停止I2C總線
 148                  不論SDA和SCL處于什么電平狀態,本函數總能正確產生停止狀態
 149                  本函數執行后,I2C總線處于空閑狀態
 150          */
 151          void I2C_Stop()
 152          {
 153   1              unsigned int t = I2C_STOP_WAIT_VALUE;
 154   1              I2C_SDA = 0;
 155   1              I2C_Delay();
 156   1              I2C_SCL = 1;
 157   1              I2C_Delay();
 158   1              I2C_SDA = 1;
 159   1              I2C_Delay();
 160   1              while ( --t != 0 );             //在下一次產生Start之前,要加一定的延時
 161   1      }
 162          
 163          /*
 164          函數:I2C_Puts()
 165          功能:I2C總線綜合發送函數,向從機發送多個字節的數據
 166          參數:
 167                  SlaveAddr:從機地址(7位純地址,不含讀寫位)
 168                  SubAddr:從機的子地址
 169                  SubMod:子地址模式,0-無子地址,1-單字節子地址,2-雙字節子地址
 170                  *dat:要發送的數據
 171                  Size:數據的字節數
 172          返回:
 173                  0:發送成功
 174                  1:在發送過程中出現異常
 175          說明:
 176                  本函數能夠很好地適應所有常見的I2C器件,不論其是否有子地址
 177                  當從機沒有子地址時,參數SubAddr任意,而SubMod應當為0
 178          */
 179          bit I2C_Puts
C51 COMPILER V8.09   I2C                                                                   11/28/2004 05:44:22 PAGE 4   

 180          (
 181                  unsigned char SlaveAddr,
 182                  unsigned int SubAddr,
 183                  unsigned char SubMod,
 184                  char *dat,
 185                  unsigned int Size
 186          )
 187          {
 188   1      //定義臨時變量
 189   1              unsigned char i;
 190   1              char a[3];
 191   1      //檢查長度
 192   1              if ( Size == 0 ) return 0;
 193   1      //準備從機地址
 194   1              a[0] = (SlaveAddr << 1);
 195   1      //檢查子地址模式
 196   1              if ( SubMod > 2 ) SubMod = 2;
 197   1      //確定子地址
 198   1              switch ( SubMod )
 199   1              {
 200   2              case 0:
 201   2                      break;
 202   2              case 1:
 203   2                      a[1] = (char)(SubAddr);
 204   2                      break;
 205   2              case 2:
 206   2                      a[1] = (char)(SubAddr >> 8);
 207   2                      a[2] = (char)(SubAddr);
 208   2                      break;
 209   2              default:
 210   2                      break;
 211   2              }
 212   1      //發送從機地址,接著發送子地址(如果有子地址的話)
 213   1              SubMod++;
 214   1              I2C_Start();
 215   1              for ( i=0; i<SubMod; i++ )
 216   1              {
 217   2                      I2C_Write(a[i]);
 218   2                      if ( I2C_GetAck() )
 219   2                      {
 220   3                              I2C_Stop();
 221   3                              return 1;
 222   3                      }
 223   2              }
 224   1      //發送數據
 225   1              do
 226   1              {
 227   2                      I2C_Write(*dat++);
 228   2                      if ( I2C_GetAck() ) break;
 229   2              } while ( --Size != 0 );
 230   1      //發送完畢,停止I2C總線,并返回結果
 231   1              I2C_Stop();
 232   1              if ( Size == 0 )
 233   1              {
 234   2                      return 0;
 235   2              }
 236   1              else
 237   1              {
 238   2                      return 1;
 239   2              }
 240   1      }
 241          
C51 COMPILER V8.09   I2C                                                                   11/28/2004 05:44:22 PAGE 5   

 242          /*
 243          函數:I2C_Gets()
 244          功能:I2C總線綜合接收函數,從從機接收多個字節的數據
 245          參數:
 246                  SlaveAddr:從機地址(7位純地址,不含讀寫位)
 247                  SubAddr:從機的子地址
 248                  SubMod:子地址模式,0-無子地址,1-單字節子地址,2-雙字節子地址
 249                  *dat:保存接收到的數據
 250                  Size:數據的字節數
 251          返回:
 252                  0:接收成功
 253                  1:在接收過程中出現異常
 254          說明:
 255                  本函數能夠很好地適應所有常見的I2C器件,不論其是否有子地址
 256                  當從機沒有子地址時,參數SubAddr任意,而SubMod應當為0
 257          */
 258          bit I2C_Gets
 259          (
 260                  unsigned char SlaveAddr,
 261                  unsigned int SubAddr,
 262                  unsigned char SubMod,
 263                  char *dat,
 264                  unsigned int Size
 265          )
 266          {
 267   1      //定義臨時變量
 268   1              unsigned char i;
 269   1              char a[3];
 270   1      //檢查長度
 271   1              if ( Size == 0 ) return 0;
 272   1      //準備從機地址
 273   1              a[0] = (SlaveAddr << 1);
 274   1      //檢查子地址模式
 275   1              if ( SubMod > 2 ) SubMod = 2;
 276   1      //如果是有子地址的從機,則要先發送從機地址和子地址
 277   1              if ( SubMod != 0 )
 278   1              {
 279   2              //確定子地址
 280   2                      if ( SubMod == 1 )
 281   2                      {
 282   3                              a[1] = (char)(SubAddr);
 283   3                      }
 284   2                      else
 285   2                      {
 286   3                              a[1] = (char)(SubAddr >> 8);
 287   3                              a[2] = (char)(SubAddr);
 288   3                      }
 289   2              //發送從機地址,接著發送子地址
 290   2                      SubMod++;
 291   2                      I2C_Start();
 292   2                      for ( i=0; i<SubMod; i++ )
 293   2                      {
 294   3                              I2C_Write(a[i]);
 295   3                              if ( I2C_GetAck() )
 296   3                              {
 297   4                                      I2C_Stop();
 298   4                                      return 1;
 299   4                              }
 300   3                      }
 301   2              }
 302   1      //這里的I2C_Start()對于有子地址的從機是重復起始狀態
 303   1      //對于無子地址的從機則是正常的起始狀態
C51 COMPILER V8.09   I2C                                                                   11/28/2004 05:44:22 PAGE 6   

 304   1              I2C_Start();
 305   1      //發送從機地址
 306   1              I2C_Write(a[0]+1);
 307   1              if ( I2C_GetAck() )
 308   1              {
 309   2                      I2C_Stop();
 310   2                      return 1;
 311   2              }
 312   1      //接收數據
 313   1              for (;;)
 314   1              {
 315   2                      *dat++ = I2C_Read();
 316   2                      if ( --Size == 0 )
 317   2                      {
 318   3                              I2C_PutAck(1);
 319   3                              break;
 320   3                      }
 321   2                      I2C_PutAck(0);
 322   2              }
 323   1      //接收完畢,停止I2C總線,并返回結果
 324   1              I2C_Stop();
 325   1              return 0;
 326   1      }


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


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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产视频直播| 成熟亚洲日本毛茸茸凸凹| 国产一区二区女| 色欧美88888久久久久久影院| 日韩一级高清毛片| 亚洲精品午夜久久久| 国产精品一区二区三区乱码| 欧美日本在线视频| 亚洲精品第1页| 成人一区二区三区| 久久久综合激的五月天| 午夜伦理一区二区| 欧美亚洲动漫制服丝袜| 中文字幕不卡的av| 国产一级精品在线| 欧美成人精品1314www| 亚洲国产美国国产综合一区二区| zzijzzij亚洲日本少妇熟睡| 国产欧美日韩久久| 国产真实乱偷精品视频免| 欧美一区二区三区四区久久 | 久久蜜桃一区二区| 免费成人av在线| 欧美人妇做爰xxxⅹ性高电影| 亚洲狼人国产精品| 色香蕉成人二区免费| 亚洲欧美综合另类在线卡通| 不卡av免费在线观看| 欧美国产禁国产网站cc| 国产精品18久久久久久久久 | 日精品一区二区三区| 日本韩国一区二区三区视频| 亚洲男女毛片无遮挡| 99免费精品视频| 中文字幕一区视频| aaa欧美色吧激情视频| 18成人在线视频| 在线视频一区二区三区| 亚洲成人免费看| 欧美日韩精品一区二区三区| 亚洲国产一区二区三区青草影视| 欧美日韩在线综合| 日本欧美加勒比视频| 欧美成人精品1314www| 国产精品一线二线三线精华| 欧美激情在线一区二区三区| 9i在线看片成人免费| 亚洲第一福利一区| 欧美成人aa大片| 国产福利电影一区二区三区| 国产精品国产三级国产有无不卡 | 久久久激情视频| 99久久久久久| 亚洲电影在线播放| 日韩视频永久免费| 国产成人精品1024| 亚洲精品亚洲人成人网在线播放| 欧美群妇大交群中文字幕| 美国av一区二区| 国产精品高潮呻吟| 51精品秘密在线观看| 国产v综合v亚洲欧| 午夜精品久久久久久久久久久| 91精品婷婷国产综合久久竹菊| 国产酒店精品激情| 亚洲精品久久嫩草网站秘色| 欧美xxxxx牲另类人与| 不卡电影一区二区三区| 日韩电影网1区2区| 国产精品亲子乱子伦xxxx裸| 欧美日韩国产三级| 成人福利视频网站| 日韩av电影免费观看高清完整版在线观看 | 日韩精品专区在线| 91在线高清观看| 日本不卡在线视频| 亚洲精品乱码久久久久| 久久噜噜亚洲综合| 欧美精品99久久久**| aaa国产一区| 国产在线一区二区综合免费视频| 亚洲一级二级三级| 国产精品美女久久久久av爽李琼 | 成人aa视频在线观看| 美国三级日本三级久久99| 亚洲三级在线免费| 精品国产乱码久久久久久牛牛| 日本韩国一区二区三区视频| 久久99国产精品免费| 亚洲最大色网站| 亚洲欧美自拍偷拍色图| 久久婷婷久久一区二区三区| 欧美高清视频www夜色资源网| 99精品视频中文字幕| 国产精品中文字幕一区二区三区| 免费成人av在线| 天堂成人国产精品一区| 亚洲激情中文1区| 国产精品三级av在线播放| 精品国产伦一区二区三区观看方式 | k8久久久一区二区三区| 国产曰批免费观看久久久| 日本不卡不码高清免费观看| 亚洲国产精品久久久久婷婷884| 亚洲色欲色欲www| 欧美国产1区2区| 久久久噜噜噜久久中文字幕色伊伊| 4438x亚洲最大成人网| 欧美日韩免费观看一区二区三区 | 日韩欧美色电影| 日韩欧美一区中文| 日韩欧美一区二区久久婷婷| 91精品国产麻豆国产自产在线| 欧美日韩在线三级| 欧美色图第一页| 7777精品伊人久久久大香线蕉 | 欧美熟乱第一页| 欧美吻胸吃奶大尺度电影 | 亚洲综合av网| 亚洲国产精品一区二区久久恐怖片 | 风间由美一区二区三区在线观看| 国产一区二区剧情av在线| 精品一区精品二区高清| 国产精品小仙女| 丁香六月综合激情| 91视频精品在这里| 欧美午夜宅男影院| 7777女厕盗摄久久久| 日韩精品一区二区三区四区视频| 精品国产1区二区| 国产精品人人做人人爽人人添| 亚洲人被黑人高潮完整版| 亚洲一区中文在线| 美女免费视频一区二区| 国产一区二区三区久久久 | 国产精品自拍一区| 国产91富婆露脸刺激对白| av在线这里只有精品| 欧美亚洲国产一区二区三区va| 7777精品久久久大香线蕉| 日韩免费观看高清完整版| 久久久国产精华| 一区二区三区国产| 青青草原综合久久大伊人精品| 国产精品小仙女| 91成人看片片| 欧美精品一区二区三区视频| 最新不卡av在线| 麻豆一区二区三| 99re66热这里只有精品3直播 | 激情图片小说一区| 91免费观看视频在线| 日韩欧美一级片| 亚洲日本韩国一区| 九九在线精品视频| 色呦呦一区二区三区| 欧美大片在线观看一区| 中文字幕一区av| 久久成人羞羞网站| 欧美性色综合网| 国产色产综合产在线视频| 亚洲va在线va天堂| 成人天堂资源www在线| 欧美日韩成人在线| 亚洲私人黄色宅男| 国产九九视频一区二区三区| 欧美日韩在线综合| 亚洲欧洲色图综合| 国产一区二区视频在线播放| 欧美日韩国产一级二级| 国产精品久久久99| 国产精品一二三| 日韩视频免费直播| 午夜久久福利影院| 日本丶国产丶欧美色综合| 国产女人水真多18毛片18精品视频| 日韩国产欧美在线视频| 欧美一区二区日韩一区二区| 中文字幕亚洲区| 国产精品香蕉一区二区三区| 日韩一区二区电影网| 亚洲国产精品久久久久秋霞影院 | 亚洲国产精品久久久久婷婷884| 成人av电影在线播放| 久久婷婷色综合| 精品一区二区三区蜜桃| 欧美精品九九99久久| 亚洲成av人片在www色猫咪| 99re热这里只有精品免费视频| 中文字幕精品三区| 成人中文字幕电影| 国产日韩欧美综合一区| 国产成人亚洲综合a∨婷婷 | 九色综合国产一区二区三区| 日韩欧美高清在线| 免费高清在线一区| 日韩一区二区三区观看| 丝袜脚交一区二区| 日韩欧美一区在线| 黄网站免费久久|