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

📄 adcdac.lst

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   ADCDAC                                                                01/31/2007 10:20:44 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE ADCDAC
OBJECT MODULE PLACED IN ADCDAC.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\c51.exe ADCDAC.c DB OE

line level    source

   1          /****************************************************************************
   2           **
   3           ** 文件名:  ADCDAC.c
   4           ** 功能:    C8051Fxxx的A/D、D/A驱动;
   5           ** 创建时间:2005.08.05
   6          
   7           ** 修改时间:2005.12.01
   8           ** 修改说明:
   9          
  10           ** 作者:    李立学
  11           ** 版权申明:可以拷贝,可以修改,但必须保留修改时间和作者信息
  12           ** 
  13           ****************************************************************************/
  14          
  15          
  16          #include "LZK.H"
  17          
  18          /****************************************************************************
  19          ** 函数名称: InVref_Init()
  20          ** 功能描述: C8051F040内部基准使能和初始化.
  21          ** 入口参数: Ref_EN:内部基准使能.
  22          ** 出口参数: 无
  23          ** 全局变量: 无
  24          ** 调用模块: 无
  25          ** 说明: 
  26          ****************************************************************************/
  27          void InVref_Init(bit Ref_EN)
  28          {
  29   1         SFRPAGE = LEGACY_PAGE;
  30   1         if( Ref_EN == 1 )  
  31   1           REF0CN = 0x07;     // 0000 0111: Enable  REF
  32   1         else  
  33   1           REF0CN = 0x00;     // 0000 0000: Disable REF
  34   1      // REF0CN(00000000): Reference Control Register
  35   1      // Bits7-5: UNUSED. Read = 000b; Write = don’t care.
  36   1      // Bit4: AD0VRS: ADC0 Voltage Reference Select
  37   1      //       0/1: ADC0 voltage reference from VREF0 / DAC0 output.
  38   1      // Bit3: AD2VRS: ADC2 Voltage Reference Select
  39   1      //       0/1: ADC2 voltage reference from VREF2 / AV+.
  40   1      // Bit2: TEMPE: Temperature Sensor Enable Bit.
  41   1      //       0/1: Internal Temperature Sensor Off / On.
  42   1      // Bit1: BIASE: ADC/DAC Bias Generator Enable Bit.
  43   1      //       0/1: Internal BiasGenerat or Off / ON.
  44   1      // Bit0: REFBE: Internal Reference Buffer Enable Bit.
  45   1      //       0/1: Internal Reference Buffer Off / On.
  46   1         SFRPAGE = 0x00;
  47   1      }
  48          
  49          /****************************************************************************
  50          ** 函数名称: ADC0_Init()
  51          ** 功能描述: 初始化CAN控制器定时、波特率,使能CAN控制器
  52          ** 入口参数: ADC0_EN:    0,ADC0 Disabled; 1,ADC0 Enabled; 
  53                       ADC0_Mode:  0,AD0BUSY; 1,T3; 2,CNVSTR; 3,T2
  54                       ADC0_ChNum: The Channal to ADC
  55                       ADC0_GAIN:  GAIN of ADC0: 000,1; 001,2; 010,4; 011,8; 10x,16; 11x,0.5
C51 COMPILER V7.20   ADCDAC                                                                01/31/2007 10:20:44 PAGE 2   

  56                       HVA_EN:     0/1, HVA Channal Disabled/Enabled.
  57                       HVA_GAIN:   HVA GAIN, 00~11 <====> 0.5~14. 
  58                       ADC0_LJST:  ADC0 DATA Format,Left/Right Justified.  
  59          ** 出口参数: 无
  60          ** 全局变量: 无
  61          ** 调用模块: 无
  62          ** 说明: 
  63          ****************************************************************************/
  64          void ADC0_Init(bit ADC0_EN,unsigned char ADC0_Mode,unsigned char ADC0_ChNum,unsigned char ADC0_GAIN,bit HV
             -A_EN,unsigned char HVA_GAIN,bit ADC0_LJST)
  65          {
  66   1         unsigned char ucTMP;
  67   1              SFRPAGE = ADC0_PAGE;   // Switch to adc0 page
  68   1         AMX0CF = 0x00;        // All Channals are Single-Ended input  
  69   1      //      AMUX0CF(00000000): AMUX0 Configuration Register
  70   1      //      Bits7-4: UNUSED. Read = 0000b; Write = don’t care.
  71   1      //      Bit3: PORT3IC: Port 3 even/odd Pin Input Pair Configuration Bit.
  72   1      //            0/1: Port 3 even and odd input channels are Single-Ended / Difference input pair
  73   1      //      Bit2: HVDA2C: HVDA 2's Compliment Bit.
  74   1      //            0/1: HVDA output is single-ended / Result for 2’s compliment value
  75   1      //      Bit1: AIN23IC: AIN0.2, AIN0.3 Input Pair Configuration Bit
  76   1      //            0/1: AIN0.2 and AIN0.3 are single-ended / difference input.
  77   1      //      Bit0: AIN01IC: AIN0.0, AIN0.1 Input Pair Configuration Bit
  78   1      //            0/1: AIN0.0 and AIN0.1 are single-ended / difference input.
  79   1              AMX0SL = ADC0_ChNum;
  80   1      //      AMX0SL(00000000): AMUX0 Channel Select Register
  81   1      //      Bits7-4: UNUSED. Read = 0000b; Write = don’t care
  82   1      //      Bits3-0: AMX0AD3-0: AMX0 Address Bits
  83   1          AMX0PRT = 0x00;
  84   1      //  AMX0PRT(00000000): Port 3 Pin Selection Register
  85   1      //    BitN: PAIN7EN: Pin N Analog Input Enable Bit (N = 7..0)
  86   1      //          0/1: P3.N is Not Selected / Selected as an analog input to the AMUX.
  87   1          if( HVA_EN )
  88   1             ucTMP = 0x80;
  89   1              ucTMP = ucTMP | HVA_GAIN;
  90   1          HVA0CN = ucTMP; // 1000 0100: Av = 0.25
  91   1      //      HVA0CN(00000000): High Voltage Difference Amplifier Control Register
  92   1      //      Bit7: HVDAEN: High Voltage Difference Amplifier (HVDA) Enable Bit.
  93   1      //            0/1: The HVDA is Disabled Enabled.
  94   1      //      Bits6-3: Reserved.
  95   1      //      Bits2-0: HVGAIN3-HVGAIN0: HVDA Gain Control Bits.
  96   1      //          Gain: 0.05~14.
  97   1              ADC0CF = 0x58 | ADC0_GAIN;      // 01011 000, Use the 2.0M SAR CLOCK ( <=100k SPS )
  98   1      //  ADC0CF(00000000): ADC0 Configuration Register
  99   1      //      Bits7-3: AD0SC4-0: ADC0 SAR Conversion Clock Period Bits
 100   1      //           AD0SC[4..0] = (SYSCLK/ADC0_SAR_CLK)-1. SYSCLK: 24.000MHz
 101   1      //  Bits2-0: AMP0GN2-0: ADC0 Internal Amplifier Gain (PGA)
 102   1      //                   000  001  010  011  10x  11x
 103   1      //     GAIN:  1    2    4    8   16   0.5  
 104   1          if( ADC0_EN == 1 )
 105   1            ADC0CN = 0xC0;              // ADC0 Enabled,Right-justified.
 106   1          else
 107   1                ADC0CN = 0x40;              // ADC0 Disabled,Right-justified.
 108   1          if( ADC0_LJST == 1 )
 109   1            ADC0CN = ADC0CN | 0x01;     // ADC0 Left-justified.
 110   1      
 111   1          ucTMP = ADC0_Mode;
 112   1          ucTMP = (ucTMP << 2) & 0x0C;  // Only Bit[3..2](Periours Bit[1..0]) is Valid.  
 113   1              ADC0CN = ADC0CN | ucTMP;      // 1100 | ucTMP[4..0].
 114   1      //      ADC0CN: ADC0 Control Register
 115   1      //      Bit7: AD0EN: ADC0 Enable Bit.
 116   1      //            0/1: ADC0 Disabled / Enabled.
C51 COMPILER V7.20   ADCDAC                                                                01/31/2007 10:20:44 PAGE 3   

 117   1      //      Bit6: AD0TM: ADC Track Mode Bit
 118   1      //            0/1: ADC Tracking is continuous / Tracking Defined by ADSTM1-0 bits.
 119   1      //      Bit5: AD0INT: ADC0 Conversion Complete Interrupt Flag,and Cleared by software.
 120   1      //            0/1: ADC0 has not completed / completed a data conversion.
 121   1      //      Bit4: AD0BUSY: ADC0 Busy Bit.
 122   1      //            Read: 0/1: ADC0 Conversion is complete / ADC0 Conversion is in progress.
 123   1      //                Write:0/1: No Effect / Initiates ADC0 Conversion if AD0STM1-0 = 00b.
 124   1      //      Bit3-2: AD0CM1-0: ADC0 Start of Conversion Mode Select,
 125   1      //            If AD0TM = 0:
 126   1      //                         00: ADC0 conversion initiated on every write of ‘1’ to AD0BUSY.
 127   1      //                         01: ADC0 conversion initiated on overflow of Timer 3.
 128   1      //                         10: ADC0 conversion initiated on rising edge of external CNVSTR.
 129   1      //                         11: ADC0 conversion initiated on overflow of Timer 2.
 130   1      //        If AD0TM = 1:
 131   1      //                     00: Tracking starts with the write of ‘1’ to AD0BUSY.
 132   1      //                         01: Tracking started by the overflow of Timer 3.
 133   1      //                         10: ADC0 tracks only when CNVSTR '0'; Starts on rising CNVSTR edge.
 134   1      //                         11: Tracking started by the overflow of Timer 2.
 135   1      //      Bit1: AD0WINT: ADC0 Window Compare Interrupt Flag;and Cleared by software.
 136   1      //        0/1: ADC0 Window Comparison Data match has Not Occurred / Occurred.
 137   1      //      Bit0: AD0LJST: ADC0 Left Justify Select.
 138   1      //            0/1: Data in ADC0H:ADC0L registers are Right/Left-justified.
 139   1      
 140   1      //  ADC0H/ADC0L:     ADC0 Data Word MSB/LSB Register.
 141   1      //  ADC0GTH/ADC0GTL: ADC0 Greater-Than Data High/Low Byte Register.
 142   1      //  ADC0LTH/ADC0LTL: ADC0 Less-Than Data High/Low Byte Register.
 143   1      }
 144          
 145          /****************************************************************************
 146          ** 函数名称: ADC0_CH_Setting()
 147          ** 功能描述: ADC0采样通道设置.
 148          ** 入口参数: ADC0_ChNum:要采样的通道.
 149          ** 出口参数: 无
 150          ** 全局变量: 无
 151          ** 调用模块: 无
 152          ** 说明: 
 153          ****************************************************************************/
 154          void ADC0_CH_Setting(unsigned char ADC0_ChNum)
 155          {
 156   1              SFRPAGE = ADC0_PAGE;         // Switch to ADC0 page.
 157   1              AMX0SL = ADC0_ChNum;         // The ChNum'th Channal to ADC
 158   1      }
 159          
 160          /****************************************************************************
 161          ** 函数名称: ADC0_Mode_Setting()
 162          ** 功能描述: ADC0采样模式设置.
 163          ** 入口参数: ADC0_Mode:  0,AD0BUSY; 1,T3; 2,CNVSTR; 3,T2.
 164          ** 出口参数: 无
 165          ** 全局变量: 无
 166          ** 调用模块: 无
 167          ** 说明: 
 168          ****************************************************************************/
 169          void ADC0_Mode_Setting(unsigned char ADC0_Mode)
 170          {
 171   1          unsigned char ucTMP;
 172   1              SFRPAGE = ADC0_PAGE;         // Switch to ADC0 page.
 173   1          ucTMP = ADC0_Mode;           // ADC0_Mode:  0,AD0BUSY; 1,T3; 2,CNVSTR; 3,T2
 174   1          ucTMP = (ucTMP << 2) & 0x0C; // Only Bit[3..2](Periours Bit[1..0]) is Valid.  
 175   1              ADC0CN = 0xC0 | ucTMP;       // 1100 | ucTMP[4..0].
 176   1      }
 177          
 178          /****************************************************************************
C51 COMPILER V7.20   ADCDAC                                                                01/31/2007 10:20:44 PAGE 4   

 179          ** 函数名称: ADC0_GAIN_Setting()
 180          ** 功能描述: ADC0输入PGA放大倍数设置.
 181          ** 入口参数: ADC0_GAIN:000,1; 001,2; 010,4; 011,8; 10x,16; 11x,0.5
 182          ** 出口参数: 无
 183          ** 全局变量: 无
 184          ** 调用模块: 无
 185          ** 说明: 
 186          ****************************************************************************/
 187          void ADC0_GAIN_Setting(unsigned char ADC0_GAIN)
 188          {
 189   1          unsigned char ucTMP;
 190   1              SFRPAGE = ADC0_PAGE;          // Switch to ADC0 page.
 191   1              ucTMP = ADC0CF & 0xf8;
 192   1              ADC0CF = ucTMP | ADC0_GAIN;   // .
 193   1      }
 194          
 195          /****************************************************************************
 196          ** 函数名称: ADC0_Cal()
 197          ** 功能描述: ADC0自校准,除去直流偏移.
 198          ** 入口参数: 无
 199          ** 出口参数: 无
 200          ** 全局变量: 无
 201          ** 调用模块: 无
 202          ** 说明: 
 203          ****************************************************************************/
 204          unsigned char ADC0_Cal(void)     // ADC0 Offset Calibration.
 205          {
 206   1         unsigned char i;
 207   1         unsigned int  uiTMP;
 208   1         ADC0_Mode_Setting(0x00);      // ADC0_Mode: 0,AD0BUSY.
 209   1         ADC0_CH_Setting(0x05);        // AMUX0 Connect with AGND.
 210   1         ADC0_GAIN_Setting(0x00);      // ADC0 GAIN: 1. 
 211   1         uiTMP = 0;
 212   1         for(i=0;i<101;i++)
 213   1         {
 214   2            AD0INT = 0;                             // RST ADC Convert Complete Flag.

⌨️ 快捷键说明

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