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

📄 adc.lst

📁 针对c8051十二位的AD转换c程序转换精度比较高
💻 LST
字号:
C51 COMPILER V7.05   ADC                                                                   07/27/2005 09:36:36 PAGE 1   


C51 COMPILER V7.05, COMPILATION OF MODULE ADC
OBJECT MODULE PLACED IN ADC.OBJ
COMPILER INVOKED BY: C:\Cygnal\IDEfiles\C51\BIN\C51.exe ADC.c DB OE

stmt level    source

   1          #include "c8051F020.h"
   2          #include <intrins.h>
   3          
   4          /*
   5                  压力应变片ADC试验
   6          
   7                  运行此程序,压力值将在数码管上显示.用手触摸应变片
   8                  观察压力变化.
   9          
  10          */
  11          /
*** ERROR C141 IN LINE 11 OF ADC.C: syntax error near '/'
  12          
  13          #define MUX_TEMP                        0x08
  14          #define MUX_VOLT                        0x01
  15          #define MUX_PRESS                       0x02
  16          
  17          unsigned int idata  Temp, Press, Volt;
  18          unsigned char  idata mux_select;
  19          
  20          sfr16 ADC0     = 0xbe;                 // ADC0 data
  21          
  22          void init_adc(void)
  23          {
  24   1              ADC0CN = 0x81;                      // ADC0 enabled; normal tracking
  25   1                                              // mode; ADC0 conversions are initiated 
  26   1                                              // on write to AD0BUSY; ADC0 data is
  27   1                                              // left-justified
  28   1              REF0CN = 0x07;                      // enable temp sensor, on-chip VREF,
  29   1                                              // and VREF output buffer
  30   1              mux_select = MUX_TEMP;                          // CPU on-chip temp sensor
  31   1              AMX0SL = MUX_TEMP;      
  32   1      
  33   1              ADC0CF = (SYSCLK/2500000) << 3;     // ADC conversion clock = 2.5MHz
  34   1              //ADC0CF |= 0x01;                     // PGA gain = 2
  35   1              EIE2 &= ~0x02;                      // disable ADC0 EOC interrupt
  36   1              EIE1 &= ~0x04;                      // disable ADC0 window compare interrupt
  37   1      }
  38          
  39          //  On-chip temperature
  40          //  AN1. 电位器
  41          //  AN2. 应变片
  42          
  43          void read_analog_inputs(void)
  44          {
  45   1              long temp_long;
  46   1          AD0INT = 0;                      // clear conversion complete indicator
  47   1          AD0BUSY = 1;                     // initiate conversion
  48   1          while (AD0INT == 0);             // wait for conversion complete
  49   1      
  50   1              switch (mux_select)
  51   1              {
  52   2                      case MUX_TEMP:
  53   2                      temp_long = ADC0 - 42380/2;
  54   2                          temp_long = (temp_long * 200L) / 156;
C51 COMPILER V7.05   ADC                                                                   07/27/2005 09:36:36 PAGE 2   

  55   2                              Temp=temp_long;
  56   2                              AMX0SL = MUX_VOLT;              // Select AIN1 for next read
  57   2                              mux_select = MUX_VOLT;
  58   2                      break;
  59   2      
  60   2                      case MUX_VOLT:
  61   2                              temp_long = ADC0;
  62   2                              Volt = 24*temp_long/655;
  63   2                              AMX0SL = MUX_PRESS;             // Select on-chip temp sensor
  64   2                              mux_select = MUX_PRESS;
  65   2                      break;
  66   2              
  67   2                      case MUX_PRESS:
  68   2                              temp_long = ADC0;
  69   2                              temp_long = 24*temp_long/655;
  70   2                              Press = temp_long;
  71   2                      AMX0SL = MUX_TEMP;       
  72   2                      mux_select = MUX_TEMP;
  73   2                      break;
  74   2                      default:
  75   2                      AMX0SL = MUX_TEMP;
  76   2                      mux_select = MUX_TEMP;
  77   2                      break;
  78   2              }
  79   1      }
  80           
  81          unsigned int GetADCValue(char No)
  82          {
  83   1              read_analog_inputs();
  84   1              read_analog_inputs();
  85   1              read_analog_inputs();
  86   1              switch (No)
  87   1              {
  88   2                      case 1:
  89   2                              return Temp;
  90   2                      case 2:
  91   2                              return Volt;
  92   2                      case 3:
  93   2                              if (Press<10) Press=0;
  94   2                              return Press;
  95   2              }
  96   1      }
  97          
  98          

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

⌨️ 快捷键说明

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