adc.lst

来自「宏晶单片机的AD演示程序」· LST 代码 · 共 164 行

LST
164
字号
C51 COMPILER V8.02   ADC                                                                   07/05/2010 14:59:40 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE ADC
OBJECT MODULE PLACED IN ADC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ADC.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*------------------------------------------------------------------*/
   2          /* --- STC MCU International Limited -------------------------------*/
   3          /* --- STC 1T Series MCU A/D Conversion Demo -----------------------*/
   4          /* --- Mobile: (86)13922805190 -------------------------------------*/
   5          /* --- Fax: 86-755-82944243 ----------------------------------------*/
   6          /* --- Tel: 86-755-82948412 ----------------------------------------*/
   7          /* --- Web: www.STCMCU.com -----------------------------------------*/
   8          /* If you want to use the program or the program referenced in the  */
   9          /* article, please specify in which data and procedures from STC    */
  10          /*------------------------------------------------------------------*/
  11          
  12          #include "reg51.h"
  13          #include "intrins.h"
  14          
  15          #define FOSC    18432000L
  16          #define BAUD    9600
  17          
  18          typedef unsigned char BYTE;
  19          typedef unsigned int WORD;
  20          
  21          /*Declare SFR associated with the ADC */
  22          sfr ADC_CONTR   =   0xC5;           //ADC control register
  23          sfr ADC_RES     =   0xC6;           //ADC high 8-bit result register
  24          sfr ADC_LOW2    =   0xBE;           //ADC low 2-bit result register
  25          sfr P1M0        =   0x91;           //P1 mode control register0
  26          sfr P1M1        =   0x92;           //P1 mode control register1
  27          
  28          /*Define ADC operation const for ADC_CONTR*/
  29          #define ADC_POWER   0x80            //ADC power control bit
  30          #define ADC_FLAG    0x10            //ADC complete flag
  31          #define ADC_START   0x08            //ADC start control bit
  32          #define ADC_SPEEDLL 0x00            //420 clocks
  33          #define ADC_SPEEDL  0x20            //280 clocks
  34          #define ADC_SPEEDH  0x40            //140 clocks
  35          #define ADC_SPEEDHH 0x60            //70 clocks
  36          
  37          void InitUart();
  38          void InitADC();
  39          void SendData(BYTE dat);
  40          BYTE GetADCResult(BYTE ch);
  41          void Delay(WORD n);
  42          void ShowResult(BYTE ch);
  43          
  44          void main()
  45          {
  46   1          InitUart();                     //Init UART, use to show ADC result
  47   1          InitADC();                      //Init ADC sfr
  48   1          while (1)
  49   1          {
  50   2              ShowResult(0);              //Show Channel0
  51   2              ShowResult(1);              //Show Channel1
  52   2              ShowResult(2);              //Show Channel2
  53   2              ShowResult(3);              //Show Channel3
  54   2              ShowResult(4);              //Show Channel4
  55   2              ShowResult(5);              //Show Channel5
C51 COMPILER V8.02   ADC                                                                   07/05/2010 14:59:40 PAGE 2   

  56   2              ShowResult(6);              //Show Channel6
  57   2              ShowResult(7);              //Show Channel7
  58   2          }
  59   1      }
  60          
  61          /*----------------------------
  62          Send ADC result to UART
  63          ----------------------------*/
  64          void ShowResult(BYTE ch)
  65          {
  66   1          SendData(ch);                   //Show Channel NO.
  67   1          SendData(GetADCResult(ch));     //Show ADC high 8-bit result
  68   1      
  69   1      //if you want show 10-bit result, uncomment next line
  70   1      //    SendData(ADC_LOW2);             //Show ADC low 2-bit result
  71   1      }
  72          
  73          /*----------------------------
  74          Get ADC result
  75          ----------------------------*/
  76          BYTE GetADCResult(BYTE ch)
  77          {
  78   1          ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  79   1          _nop_();                        //Must wait before inquiry
  80   1          _nop_();
  81   1          _nop_();
  82   1          _nop_();
  83   1          while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
  84   1          ADC_CONTR &= ~ADC_FLAG;         //Close ADC
  85   1      
  86   1          return ADC_RES;                 //Return ADC result
  87   1      }
  88          
  89          /*----------------------------
  90          Initial UART
  91          ----------------------------*/
  92          void InitUart()
  93          {
  94   1          SCON = 0x5a;                    //8 bit data ,no parity bit
  95   1          TMOD = 0x20;                    //T1 as 8-bit auto reload
  96   1          TH1 = TL1 = -(FOSC/12/32/BAUD); //Set Uart baudrate
  97   1          TR1 = 1;                        //T1 start running
  98   1      }
  99          
 100          /*----------------------------
 101          Initial ADC sfr
 102          ----------------------------*/
 103          void InitADC()
 104          {
 105   1          P1 = P1M0 = P1M1 = 0xff;        //Set all P1 as Open-Drain mode
 106   1          ADC_RES = 0;                    //Clear previous result
 107   1          ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
 108   1          Delay(2);                       //ADC power-on and delay
 109   1      }
 110          
 111          /*----------------------------
 112          Send one byte data to PC
 113          Input: dat (UART data)
 114          Output:-
 115          ----------------------------*/
 116          void SendData(BYTE dat)
 117          {
C51 COMPILER V8.02   ADC                                                                   07/05/2010 14:59:40 PAGE 3   

 118   1          while (!TI);                    //Wait for the previous data is sent
 119   1          TI = 0;                         //Clear TI flag
 120   1          SBUF = dat;                     //Send current data
 121   1      }
 122          
 123          /*----------------------------
 124          Software delay function
 125          ----------------------------*/
 126          void Delay(WORD n)
 127          {
 128   1          WORD x;
 129   1      
 130   1          while (n--)
 131   1          {
 132   2              x = 5000;
 133   2              while (x--);
 134   2          }
 135   1      }
 136          


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


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

⌨️ 快捷键说明

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