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

📄 adc.lst

📁 2008年山东省大学生电子设计大赛 c题 多功能电子计价秤 单片机用的 c8051f005
💻 LST
字号:
C51 COMPILER V7.20   ADC                                                                   09/18/2008 18:08:21 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE ADC
OBJECT MODULE PLACED IN adc.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE adc.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "include.h"
   2          
   3          unsigned char H_AD=0; //H_AD 用于存储高八位A/D转换结果 
   4          unsigned char L_AD=0; //L_AD 用于存储低八位A/D转换结构 
   5          bit SystemError=0; // 从机错误标志位
   6          extern uchar ad_tare_k;
   7          float ad_tare;
   8          
   9          /*--------------------------
  10          计算当前重量 返回重量 
  11          最大99.999KG
  12          ----------------------------*/
  13          
  14          float convs_weight()
  15          {
  16   1              uchar i;
  17   1              float ad=0;
  18   1              float weight=0;
  19   1              for(i=0;i<100;i++)
  20   1              {
  21   2                      READ_ADS100();
  22   2                      ad+=(((H_AD<<8)+L_AD));
  23   2                      delay_ms(10);
  24   2              }
  25   1              ad/=100;
  26   1              if(ad_tare_k)                   //如果按下了初值键 采集ad初值
  27   1              {
  28   2                      ad_tare_k=0;
  29   2                      ad_tare=ad;
  30   2              }
  31   1              else
  32   1              {
  33   2                      weight=(ad-ad_tare)/1.854;
  34   2              }
  35   1      //      delay_ms(1000);
  36   1              return weight;
  37   1      }
  38          
  39          //-------------------------------------------------------------------------------------------------- 
  40          // 函数名称: iic_start() 
  41          // 函数功能: 启动I2C总线子程序 
  42          //-------------------------------------------------------------------------------------------------- 
  43          void iic_start(void)
  44          {
  45   1              EA=0; //时钟保持高,数据线从高到低一次跳变,I2C通信开始 
  46   1              SDA = 1; 
  47   1              SCL = 1; 
  48   1              delay_us(7); // 延时5us 
  49   1              SDA = 0; 
  50   1              delay_us(7); 
  51   1              SCL = 0; 
  52   1      } 
  53          //-------------------------------------------------------------------------------------------------- 
  54          // 函数名称: iic_stop() 
  55          // 函数功能: 停止I2C总线数据传送子程序 
C51 COMPILER V7.20   ADC                                                                   09/18/2008 18:08:21 PAGE 2   

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

 118   3                              SCL = 1; 
 119   3                              delay_us(7);
 120   3                              SCL = 0;
 121   3                              SDA = 0;                         
 122   3                      } 
 123   2                      else 
 124   2                      { 
 125   3                              SDA = 0; // 否则传送位0 
 126   3                              SCL = 1; 
 127   3                              delay_us(7); 
 128   3                              SCL = 0; 
 129   3                      } 
 130   2                      ch = ch<<1; // 数据左移一位
 131   2                      delay_us(7);
 132   2              } 
 133   1      } 
 134          //-------------------------------------------------------------------------------------------------- 
 135          // 函数名称: IICreceiveByte 
 136          // 返回接收的数据 
 137          // 函数功能: 接收一字节子程序 
 138          //-------------------------------------------------------------------------------------------------- 
 139          unsigned char IICreceiveByte(void) 
 140          { 
 141   1              unsigned char idata n=8; // 从SDA线上读取一上数据字节,共八位 
 142   1              unsigned char tdata; 
 143   1              while(n--) 
 144   1              { 
 145   2                      SDA = 1; 
 146   2                      SCL = 1;
 147   2                  delay_us(7);
 148   2                      tdata = tdata<<1; // 左移一位,或_crol_(temp,1) 
 149   2                      if(SDA == 1) 
 150   2                              tdata = tdata|0x01; // 若接收到的位为1,则数据的最后一位置1 
 151   2                      else 
 152   2                              tdata = tdata&0xfe; // 否则数据的最后一位置0 
 153   2                      SCL=0;
 154   2              } 
 155   1              return(tdata); 
 156   1      } 
 157          //-------------------------------------------------------------------------------------------------- 
 158          // 函数名称:setting_ADS100 
 159          // 用户调用自程序 
 160          // 函数功能: 设置配置寄存器 
 161          //-------------------------------------------------------------------------------------------------- 
 162          void setting_ADS100(unsigned char setting_data) //写器件地址和配置字 
 163          { 
 164   1              iic_start(); //开始写 
 165   1              IICSendByte(0x90); //写器件地址(写) 
 166   1              check_ACK(); // 检查应答位 
 167   1              if(F0 == 1) 
 168   1              { 
 169   2                      SystemError = 1; 
 170   2                      return; // 若非应答表明器件错误或已坏,置错误标志位SystemError 
 171   2              } 
 172   1              IICSendByte(setting_data); 
 173   1              check_ACK(); // 检查应答位 
 174   1              if (F0 == 1) 
 175   1              { 
 176   2                      SystemError=1; 
 177   2                      return; // 若非应答表明器件错误或已坏,置错误标志位SystemError 
 178   2              } 
 179   1              iic_stop(); // 全部发完则停止 
C51 COMPILER V7.20   ADC                                                                   09/18/2008 18:08:21 PAGE 4   

 180   1      } 
 181          //-------------------------------------------------------------------------------------------------- 
 182          // 函数名称:READ_ADS100 
 183          // 用户调用自程序 
 184          // 函数功能: 读A/D转换结果 
 185          //-------------------------------------------------------------------------------------------------- 
 186          void READ_ADS100(void) //从ADS1100中读出数据 
 187          { 
 188   1              iic_start(); 
 189   1              IICSendByte(0x91); 
 190   1              check_ACK(); 
 191   1              if(F0 == 1) 
 192   1              { 
 193   2                      SystemError = 1; 
 194   2                      return; 
 195   2              } 
 196   1              H_AD=IICreceiveByte(); 
 197   1              slave_ACK(); // 收到一个字节后发送一个应答位 
 198   1              L_AD=IICreceiveByte(); 
 199   1              slave_NOACK(); // 收到最后一个字节后发送一个非应答位 
 200   1              iic_stop(); 
 201   1      } 
*** WARNING C316 IN LINE 201 OF adc.c: unterminated conditionals


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    539    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =      6      13
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----       1
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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