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

📄 iic.lst

📁 温度仪表软件
💻 LST
字号:
C51 COMPILER V8.02   IIC                                                                   05/31/2008 12:47:21 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN .\hex\iic.obj
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE src\iic.c BROWSE INCDIR(.\h) DEBUG OBJECTEXTEND PRINT(.\lst\i
                    -ic.lst) OBJECT(.\hex\iic.obj)

line level    source

   1          #include"reg52.h"
   2          #include"intrins.h"
   3          #include"interface.h"
   4          #include"my_type.h"
   5          #include"function.h"
   6          #include"global_var.h"
   7          
   8          /*******************IIC开始信号**************************/
   9          void start_iic()
  10          {
  11   1              IIC_SDA = 1;
  12   1              IIC_SCL = 1;
  13   1              Wait5us;
  14   1              IIC_SDA = 0;//下跳开始
  15   1              Wait5us;
  16   1              IIC_SCL = 0;//钳住iic总线,准备发送和接收数据
  17   1              Wait2us;
  18   1      }
  19          
  20          /*******************IIC结束信号**************************/
  21          void stop_iic()
  22          {
  23   1              IIC_SDA = 0;
  24   1              IIC_SCL = 1;
  25   1              Wait5us;
  26   1              IIC_SDA = 1;//上跳结束
  27   1              Wait5us;
  28   1              IIC_SCL = 0;//只有关闭I2C总线时才使IIC_SCL为低电平
  29   1              Wait2us;
  30   1      }
  31          
  32          /*******************IIC应答信号**************************/
  33          void ack_iic()
  34          {
  35   1              IIC_SDA = 0;
  36   1              IIC_SCL = 1;
  37   1              Wait5us;
  38   1              IIC_SCL = 0;
  39   1              IIC_SDA = 1;
  40   1              Wait2us;
  41   1      }
  42          
  43          /******************IIC非应答信号**************************/
  44          void nack_iic()
  45          {
  46   1              IIC_SDA = 1;
  47   1              IIC_SCL = 1;
  48   1              Wait5us;
  49   1              IIC_SCL = 0;
  50   1              IIC_SDA = 0;
  51   1              Wait2us;
  52   1      }
  53          
  54          /*******************IIC主写1字节数据**********************/
C51 COMPILER V8.02   IIC                                                                   05/31/2008 12:47:21 PAGE 2   

  55          void write_byte(uchar c)
  56          {
  57   1              uchar i;
  58   1              for(i=0;i<8;i++)
  59   1              {
  60   2                      if(c&0x80)
  61   2                              IIC_SDA = 1;
  62   2                      else
  63   2                              IIC_SDA = 0;
  64   2                      IIC_SCL = 1;
  65   2                      Wait5us;
  66   2                      IIC_SCL = 0;
  67   2                      c<<=1;//准备下一位
  68   2              }
  69   1              IIC_SDA = 1;
  70   1              IIC_SCL = 1;//释放数据线,等待接收从机应答信号
  71   1              Wait5us;
  72   1              if(IIC_SDA == 0)
  73   1                      iic_ack = 1;//有应答信号
  74   1              else
  75   1                      iic_ack = 0;
  76   1              IIC_SCL = 0;
  77   1      }
  78          
  79          /*******************IIC主读1字节数据**********************/
  80          uchar read_byte()
  81          {
  82   1              uchar i;
  83   1              uchar r = 0;
  84   1              IIC_SDA = 1;//设置数据线为输入方式
  85   1              for(i=0;i<8;i++)
  86   1              {
  87   2                      r<<=1;
  88   2                      IIC_SCL = 1;//时钟高,数据有效
  89   2                      Wait5us;
  90   2                      if(1 == IIC_SDA)
  91   2                              r++;
  92   2                      IIC_SCL = 0;
  93   2              }
  94   1              return r;//主机作为接收器,单字节不应答也就相当与产生非应答信号
  95   1      }
  96          
  97          /*******************IIC主发n字节数据**********************/
  98          bit write_nbyte(uchar slave,uchar addr,uchar *s,uchar n)
  99          {
 100   1              uchar i;
 101   1              start_iic();//发开始信号
 102   1              write_byte(slave);//发从器件地址
 103   1              if(0 == iic_ack)
 104   1                      return 0;//没有收到应答信号
 105   1              write_byte(addr);//要写的首地址
 106   1              if(0 == iic_ack)
 107   1                      return 0;//没有收到应答信号
 108   1              for(i=0;i<n;i++)
 109   1              {
 110   2                      write_byte(*s);//数据地址指向的数据
 111   2                      if(0 == iic_ack)
 112   2                              return 0;//没有收到应答信号
 113   2                      s++;
 114   2              }
 115   1              stop_iic();
 116   1              return 1;
C51 COMPILER V8.02   IIC                                                                   05/31/2008 12:47:21 PAGE 3   

 117   1      }
 118          
 119          /*******************IIC主读n字节数据**********************/
 120          bit read_nbyte(uchar slave,uchar addr,uchar *s,uchar n)
 121          {
 122   1              uchar i;
 123   1              start_iic();//发开始信号
 124   1              write_byte(slave);//写硬件地址
 125   1              if(0 == iic_ack)
 126   1                      return 0;//没有收到应答信号
 127   1              write_byte(addr);
 128   1              if(0 == iic_ack)
 129   1                      return 0;//没有收到应答信号
 130   1              start_iic();
 131   1              write_byte(slave|1);//读硬件地址
 132   1              if(0 == iic_ack)
 133   1                      return 0;//没有收到应答信号
 134   1              for(i=0;i<n;i++)
 135   1              {
 136   2                      *s = read_byte();
 137   2                      ack_iic();//主机应答从机,保证报文顺利进行
 138   2                      s++;
 139   2              }
 140   1              nack_iic();
 141   1              stop_iic();
 142   1              return 1;
 143   1      }
*** WARNING C316 IN LINE 143 OF src\iic.c: unterminated conditionals


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    283    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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