⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iicdemo.lst

📁 压缩包中包括多个常用的汇编
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  IICDEMO                                                                09/23/2005 17:15:48 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE IICDEMO
OBJECT MODULE PLACED IN G:\C51PRJ\IICDEMO\IICDEMO.OBJ
COMPILER INVOKED BY: e:\keil\c51\BIN\C51.EXE G:\C51PRJ\IICDEMO\IICDEMO.C DB SB OE

stmt level    source

   1          /****************************************************************************/
   2          /*                                                                          */
   3          /*               Copyright (c) 2005, 老树工作室                             */
   4          /*                   All rights reserved.                                   */
   5          /*                                                                          */
   6          /*      http://www.saintone.net      Email:hxm0902@163.com                  */
   7          /*      QQ:112431149                 Tel:010-62966630                       */
   8          /*                                                                          */
   9          /****************************************************************************/
  10          /****************************************************************************/
  11          /* 文件名:iicdemo.c                                                        */
  12          /* 版  本:Version 1.0                                                      */
  13          /* 描  述:iic标准代码                                                      */
  14          /* 作  者:spot                                                             */
  15          /* 函  数:                                                                 */
  16          /*         iic_wait                                                         */
  17          /*         iic_start                                                        */
  18          /*         iic_stop                                                         */
  19          /*         iic_ack                                                          */
  20          /*         iic_no_ack                                                       */
  21          /*         iic_wait_ack                                                     */
  22          /*         iic_send_byte                                                    */
  23          /*         iic_receive_byte                                                 */
  24          /*                                                                          */
  25          /* 历史记录:                                                               */
  26          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
  27          /****************************************************************************/
  28          #include <reg52.h>
  29          #include <absacc.h>
  30          #include <intrins.h>
  31          
  32          typedef unsigned char u_char;
  33          typedef unsigned int  u_int;
  34          
  35          sbit SDA = P0^5;           /* iic数据传送位 */
  36          sbit SCL = P0^4;           /* iic时钟控制位 */
  37          
  38          /* 函数声明 */
  39          void iic_wait(void);       /* iic延时       */
  40          void iic_start(void);      /* 开启iic总线   */
  41          void iic_stop(void);       /* 关闭iic总线   */
  42          void iic_ack(void);        /* 发送ACK信号   */
  43          void iic_no_ack(void);     /* 发送NOACK信号 */
  44          bit iic_wait_ack(void);    /* 等待ACK信号   */
  45          void iic_send_byte(u_char demand);               /* MCU向iic设备发送一个字节 */
  46          u_char iic_receive_byte(void);                   /* MCU从iic设备接收一个字节 */
  47          /* 声明结束 */
  48          
  49          /* iic延时       */
  50          void iic_wait(void)
  51          {
  52   1          _nop_();
  53   1          _nop_();
  54   1          _nop_();
  55   1          _nop_();
C51 COMPILER V6.12  IICDEMO                                                                09/23/2005 17:15:48 PAGE 2   

  56   1      }
  57          
  58          /* 开启iic总线   */
  59          void iic_start(void)
  60          {
  61   1          SDA = 1;
  62   1          SCL = 1;
  63   1          iic_wait();
  64   1          SDA = 0;
  65   1          iic_wait();
  66   1          SCL = 0;
  67   1      }
  68          
  69          /* 关闭iic总线   */
  70          void iic_stop(void)
  71          {
  72   1          SDA=0;
  73   1          SCL=0;
  74   1          iic_wait();
  75   1          SCL=1;
  76   1          iic_wait();
  77   1          SDA=1;
  78   1      }
  79          
  80          /* 发送ACK信号   */
  81          void iic_ack(void)
  82          {
  83   1          SDA=0;
  84   1          iic_wait();
  85   1          SCL=1;
  86   1          iic_wait();
  87   1          SCL=0;
  88   1      }
  89          
  90          /* 发送NOACK信号 */
  91          void iic_no_ack(void)
  92          {
  93   1          SDA=1;
  94   1          iic_wait();
  95   1          SCL=1;
  96   1          iic_wait();
  97   1          SCL=0;
  98   1      }
  99          
 100          /****************************************************************************/
 101          /* 函数名:iic_wait_ack                                                     */
 102          /* 功  能:等待ACK信号                                                      */
 103          /* 作  者:spot                                                             */
 104          /* 输  入:无                                                               */
 105          /* 输  出:1-ACK         0-ERROR                                            */
 106          /*                                                                          */
 107          /* 历史记录:                                                               */
 108          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 109          /****************************************************************************/
 110          bit iic_wait_ack(void)
 111          {
 112   1          u_char errtime=255;
 113   1          //u_int errtime = 1000;
 114   1      
 115   1          SDA=1;
 116   1          iic_wait();
 117   1          SCL=1;
C51 COMPILER V6.12  IICDEMO                                                                09/23/2005 17:15:48 PAGE 3   

 118   1          iic_wait();
 119   1      
 120   1          while(SDA)
 121   1          {
 122   2              errtime--;
 123   2              if(!errtime)
 124   2                  return 0;
 125   2          }
 126   1      
 127   1          SCL=0;
 128   1          return 1;
 129   1      }
 130          
 131          /****************************************************************************/
 132          /* 函数名:iic_send_byte                                                    */
 133          /* 功  能:MCU向iic设备发送一个字节                                         */
 134          /* 作  者:spot                                                             */
 135          /* 输  入:                                                                 */
 136          /*         sbyte                  待发送的字节数据                          */
 137          /*                                                                          */
 138          /* 输  出:无                                                               */
 139          /*                                                                          */
 140          /* 历史记录:                                                               */
 141          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 142          /****************************************************************************/
 143          void iic_send_byte(u_char sbyte)
 144          {
 145   1          u_char i = 8;
 146   1      
 147   1          while(i--)
 148   1          {
 149   2              SCL = 0;
 150   2              _nop_();
 151   2              SDA = (bit)(sbyte&0x80);
 152   2              sbyte <<= 1;
 153   2              iic_wait();
 154   2              SCL = 1;
 155   2              iic_wait();
 156   2          }
 157   1      
 158   1          SCL=0;
 159   1      }
 160          
 161          /****************************************************************************/
 162          /* 函数名:iic_receive_byte                                                 */
 163          /* 功  能:MCU从iic设备接收一个字节                                         */
 164          /* 作  者:spot                                                             */
 165          /* 输  入:无                                                               */
 166          /* 输  出:ddata   接收数据                                                 */
 167          /*                                                                          */
 168          /* 历史记录:                                                               */
 169          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 170          /****************************************************************************/
 171          u_char iic_receive_byte(void)
 172          {
 173   1          u_char i=8;
 174   1          u_char ddata=0;
 175   1      
 176   1          SDA=1;
 177   1          while(i--)
 178   1          {
 179   2              ddata <<= 1;
C51 COMPILER V6.12  IICDEMO                                                                09/23/2005 17:15:48 PAGE 4   

 180   2              SCL=0;
 181   2              iic_wait();
 182   2              SCL=1;
 183   2              iic_wait();
 184   2              ddata |= SDA;
 185   2          }
 186   1          SCL=0;
 187   1          return ddata;
 188   1      }
 189          
 190          /****************************************************************************/
 191          /* 函数名:write_iic_data                                                   */
 192          /* 功  能:向iic设备写入N个字节                                             */
 193          /* 作  者:spot                                                             */
 194          /* 输  入:                                                                 */
 195          /*         write_data              存放写入字节的数组                       */
 196          /*         address                 指定从address处开始写入                  */
 197          /*         num                     写入的字节数                             */
 198          /*                                                                          */
 199          /* 输  出:无                                                               */
 200          /*                                                                          */
 201          /* 历史记录:                                                               */
 202          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 203          /****************************************************************************/
 204          void write_iic_data(u_char write_data[], u_int address, u_char num)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -