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

📄 adc.lst

📁 8051F02X系列单片机的A/D转换子程序
💻 LST
字号:
C51 COMPILER V7.05   ADC                                                                   01/12/2007 14:41:31 PAGE 1   


C51 COMPILER V7.05, COMPILATION OF MODULE ADC
OBJECT MODULE PLACED IN ADC.OBJ
COMPILER INVOKED BY: C:\Keil\MCU\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          
  12          #define MUX_TEMP                        0x08
  13          #define MUX_VOLT                        0x01
  14          #define MUX_PRESS                       0x02
  15          
  16          unsigned int idata  Temp, Press, Volt;
  17          unsigned char  idata mux_select;
  18          
  19          sfr16 ADC0     = 0xbe;                 // ADC0 data
  20          
  21          void init_adc(void)
  22          {
  23   1              ADC0CN = 0x81;                      // ADC0 enabled; normal tracking
  24   1                                              // mode; ADC0 conversions are initiated 
  25   1                                              // on write to AD0BUSY; ADC0 data is
  26   1                                              // left-justified
  27   1              REF0CN = 0x07;                      // enable temp sensor, on-chip VREF,
  28   1                                              // and VREF output buffer
  29   1              mux_select = MUX_TEMP;                          // CPU on-chip temp sensor
  30   1              AMX0SL = MUX_TEMP;      
  31   1      
  32   1              ADC0CF = (SYSCLK/2500000) << 3;     // ADC conversion clock = 2.5MHz
  33   1              //ADC0CF |= 0x01;                     // PGA gain = 2
  34   1              EIE2 &= ~0x02;                      // disable ADC0 EOC interrupt
  35   1              EIE1 &= ~0x04;                      // disable ADC0 window compare interrupt
  36   1      }
  37          
  38          //  On-chip temperature
  39          //  AN1. 电位器
  40          //  AN2. 应变片
  41          
  42          void read_analog_inputs(void)
  43          {
  44   1              long temp_long;
  45   1          AD0INT = 0;                      // clear conversion complete indicator
  46   1          AD0BUSY = 1;                     // initiate conversion
  47   1          while (AD0INT == 0);             // wait for conversion complete
  48   1      
  49   1              switch (mux_select)
  50   1              {
  51   2                      case MUX_TEMP:
  52   2                      temp_long = ADC0 - 42380/2;
  53   2                          temp_long = (temp_long * 200L) / 156;
  54   2                              Temp=temp_long;
  55   2                              AMX0SL = MUX_VOLT;              // Select AIN1 for next read
C51 COMPILER V7.05   ADC                                                                   01/12/2007 14:41:31 PAGE 2   

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


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    295    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       5
   IDATA SIZE       =      7    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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