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

📄 shtxx_iic.lst

📁 基于AT89C2051的SHT11温湿度传感器嵌入式程序KEIL环境
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.00  SHTXX_IIC                                                              10/10/2007 14:42:10 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE SHTXX_IIC
OBJECT MODULE PLACED IN SHTXX_iic.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SHTXX_iic.c OPTIMIZE(SIZE) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //温湿度传感器SHTXX系列,I2C接口程序
   2          //2007-06-06
   3          //-----------------------函数声明,变量定义--------------------------------------------------------
   4          #include <reg52.h>
   5          #include <intrins.h>
   6          sbit SDA=P1^6;                          // 将p1.6口模拟数据口
   7          sbit SCL=P1^7;                          // 将p1.7口模拟时钟口
   8          #define uchar unsigned char 
   9          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};                  
  10          #define BIT7  0X80                       
  11          #define BIT6  0X40                       
  12          #define BIT5  0X20                       
  13          #define BIT4  0X10                       
  14          #define BIT3  0X08                       
  15          #define BIT2  0X04                       
  16          #define BIT1  0X02                       
  17          #define BIT0  0X01                       
  18          //#define  NUM  10                          //  接收和发送缓存区的深度
  19          //unsigned char idata sendbuf[NUM];       // 数据发送缓冲区
  20          //unsigned char idata receivebuf[NUM];    // 数据接收缓冲区
  21          //bit   bdata SystemError;                // 从机错误标志位
  22          //--------------------------------------------------------------------------------------------------
  23          // 函数名称: iic_start()
  24          // 函数功能: 启动I2C总线子程序
  25          //--------------------------------------------------------------------------------------------------
  26          void iic_start(void)
  27          {
  28   1      //:当SCK 时钟高电平时DATA 翻转为低电平,紧接着SCK 变为低电平,随后是在SCK时钟高电平时DATA 翻转为高电平。
  29   1      //      EA=0;           
  30   1               SDA = 1;         
  31   1               SCL = 1;
  32   1              SDA = 0;         
  33   1                      SCL = 0; 
  34   1                      SCL = 1;
  35   1              SDA = 1;         
  36   1              SCL = 0;
  37   1              _nop_();_nop_();
  38   1      
  39   1      }
  40          //--------------------------------------------------------------------------------------------------
  41          // 函数名称: iic_reset()
  42          // 函数功能: 停止I2C总线数据传送子程序
  43          //--------------------------------------------------------------------------------------------------
  44          /*void iic_reset(void)
  45          { 
  46                  SDA = 1;           //当DATA 保持高电平时,触发SCK 时钟9 次或更多。
  47                  SCL = 1;SCL = 0;
  48                  SCL = 1;SCL = 0;
  49                  SCL = 1;SCL = 0;
  50                  SCL = 1;SCL = 0;
  51                  SCL = 1;SCL = 0;
  52                  SCL = 1;SCL = 0;
  53                  SCL = 1;SCL = 0;
  54                  SCL = 1;SCL = 0;
  55                  SCL = 1;SCL = 0;
C51 COMPILER V7.00  SHTXX_IIC                                                              10/10/2007 14:42:10 PAGE 2   

  56                  SCL = 1;SCL = 0;
  57          }*/
  58          //--------------------------------------------------------------------------------------------------
  59          // 函数名称: iic_stop()
  60          // 函数功能: 停止I2C总线数据传送子程序
  61          //--------------------------------------------------------------------------------------------------
  62          /*void iic_stop(void)
  63          { 
  64                  SDA = 1;           //通过保持确认位ack 高电平,来中止通讯。
  65                  SCL = 1;SCL = 0;
  66          }*/
  67          //--------------------------------------------------------------------------------------------------
  68          // 函数名称: slave_ACK
  69          // 函数功能: 从机发送应答位子程序
  70          //--------------------------------------------------------------------------------------------------
  71          void slave_ACK(void)
  72          {
  73   1              SDA = 0;    
  74   1              SCL = 1;SCL = 0;
  75   1      }
  76          //--------------------------------------------------------------------------------------------------
  77          // 函数名称: slave_NOACK
  78          // 函数功能: 从机发送非应答位子程序,迫使数据传输过程结束
  79          //--------------------------------------------------------------------------------------------------
  80          void slave_NOACK(void)
  81          { 
  82   1              SDA = 1;           //通过保持确认位ack 高电平,来中止通讯。
  83   1              SCL = 1;SCL = 0;
  84   1      }
  85          //--------------------------------------------------------------------------------------------------
  86          // 函数名称: check_ACK
  87          // 函数功能: 主机应答位检查子程序,迫使数据传输过程结束
  88          //--------------------------------------------------------------------------------------------------
  89          void check_ACK(void)
  90          { 
  91   1              SDA = 1;      // 将p1.0设置成输入,必须先向端口写1
  92   1              SCL = 1;
  93   1              F0 = 0;
  94   1              if(SDA == 1)    // 若SDA=1表明非应答,置位非应答标志F0
  95   1                      F0 = 1;
  96   1              SCL = 0;
  97   1      }
  98          
  99          //--------------------------------------------------------------------------------------------------
 100          // 函数名称: IICSendByte
 101          // 入口参数: ch
 102          // 函数功能: 发送一个字节
 103          //--------------------------------------------------------------------------------------------------
 104          void IICSendByte(unsigned char ch)
 105          { 
 106   1              unsigned char idata n=8;     // 向SDA上发送一位数据字节,共八位
 107   1              while(n--)
 108   1              { 
 109   2                      if((ch&0x80) == 0x80)    // 若要发送的数据最高位为1则发送位1
 110   2                      {
 111   3                              SDA = 1;    // 传送位1
 112   3                              SCL = 1;SCL = 0;
 113   3                      }
 114   2                      else
 115   2                      {  
 116   3                              SDA = 0;    // 否则传送位0
 117   3                              SCL = 1;SCL = 0;
C51 COMPILER V7.00  SHTXX_IIC                                                              10/10/2007 14:42:10 PAGE 3   

 118   3                      }
 119   2                      ch = ch<<1;    // 数据左移一位
 120   2              }
 121   1      }
 122          //--------------------------------------------------------------------------------------------------
 123          // 函数名称: IICreceiveByte
 124          // 返回接收的数据
 125          // 函数功能: 接收一字节子程序
 126          //--------------------------------------------------------------------------------------------------
 127          unsigned char IICreceiveByte(void)
 128          {
 129   1              unsigned char idata n=8;    // 从SDA线上读取一上数据字节,共八位
 130   1              unsigned char tdata;
 131   1              while(n--)
 132   1              {
 133   2                      SDA = 1;
 134   2                      SCL = 1;
 135   2                      tdata = tdata<<1;    // 左移一位,或_crol_(temp,1)
 136   2                      if(SDA == 1)
 137   2                              tdata = tdata|0x01;    // 若接收到的位为1,则数据的最后一位置1
 138   2                      else 
 139   2                              tdata = tdata&0xfe;    // 否则数据的最后一位置0
 140   2                      SCL=0;
 141   2              }
 142   1              return(tdata);
 143   1      }
 144          //--------------------------------------------------------------------------------------------------
 145          // 函数名称: InitSHTXX
 146          // 函数功能: 初始化SHTXX
 147          //--------------------------------------------------------------------------------------------------
 148          void InitSHTXX(void)

⌨️ 快捷键说明

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