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

📄 adc_sampling.lst

📁 基于8051F实现数字电压表功能.用液晶作为显示界面,精度很高.
💻 LST
字号:
C51 COMPILER V8.02   ADC_SAMPLING                                                          03/29/2008 22:13:16 PAGE 1   


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

line level    source

   1          /*===============================================================*/
   2          /*函数名称: main.c                                              */
   3          /*函数功能: 主函数,调用各模块                                   */
   4          /*基本思想:  单端输入,定时启动,由T2定时,选择AIN0.3为ADC0转化通道                                       
             -   */
   5          /*修改记录: 有修改记录                                          */
   6          /*编写作者: t483-4-19chenyong                                   */
   7          /*编写日期: 2007-4-06                                           */
   8          /*把realvol变为ad_value                                          */
   9          /**修改日期:2008.3.28/
  10          /*===============================================================*/
  11          #include  "common.h"
  12          #include  "adc.h"
  13          //extern float realvol;                //真实测量电压值
  14          extern long ad_value = 0;
  15          int kk;
  16          int number=0;
  17          extern bit isnewdata;
  18          /*===============================================================*/
  19          /*函数说明:定时器2初始化  
  20          /*修改日期: 2008.3.27                                            */
  21          /*===============================================================*/
  22          void t2_initial()
  23          {
  24   1      //      CKCON= 0x20;             // T2时钟为系统时钟
  25   1      //      T2CON= 0x04;             // T2为16bit定时器模式,并启动定时器运行
  26   1              SFRPAGE = 0x00;
  27   1              TMR2CF = 0x00;                     /*采用系统时钟12分频*/
  28   1              TMR2CN = 0x00;                     /*定时器模式,自动重载*/
  29   1              CKCON = 0x00;                /*采用系统时钟12分频*/
  30   1      //      RCAP2H = 0x00;               /*Init reload values*/
  31   1      //  RCAP2L= 0x00;              /*Init reload values*/
  32   1      //      SFRPAGE = 0x00;
  33   1      //      TMR2L = 0x00;
  34   1      //      TMR2H = 0x00;                     /*定时初始化*/
  35   1      //      IE|=0x20;                 /* T2中断使能 ET2=1 */
  36   1      
  37   1      }
  38          
  39          /*===============================================================*/
  40          /*函数说明:因为是用定时器2益处,中断来启动adc转换               */
  41          /*入口参数:
  42                      t2reload---------------------------------定时脉冲数目*/
  43          /*修改日期: 2008.3.27                                            */
  44          /*===============================================================*/
  45          void t2_baud(uint t2reload)
  46          {                            //每隔t2reload个T2时钟,产生一次定时溢出
  47   1      
  48   1      //      RCAP2H=(~t2reload+1)/256;//相当于65536-t2reload
  49   1      //      RCAP2L=(~t2reload+1)%256;
  50   1      //      TH2=RCAP2H;
  51   1      //      TH2=RCAP2L;
  52   1              SFRPAGE = 0x00;
  53   1              RCAP2H = (~t2reload+1)/256;     /*Init reload values*/
  54   1          RCAP2L = (~t2reload+1)%256;     /*Init reload values*/
C51 COMPILER V8.02   ADC_SAMPLING                                                          03/29/2008 22:13:16 PAGE 2   

  55   1              SFRPAGE = 0x00;
  56   1              TMR2H = RCAP2H;
  57   1              TMR2L = RCAP2L;                   /*装载初值*/
  58   1      //      TF2=0;                                    /*T2没有溢出*/
  59   1      //      TR2=1;                        //启动定时器2 
  60   1              TMR2CN |=0x04;                    /*启动定时器2 */
  61   1      }
  62          /*===============================================================*/
  63          /*函数说明:选择ADC输入的模拟通道                                        */
  64          /*入口参数:
  65                      source----------------------为ADC0通道选择(共有9个通道)
  66                      type-------------------配置测量方式为差动还是单端输入*/
  67          /*===============================================================*/
  68          
  69          void adc0_mux(uchar type,uchar source){
  70   1      
  71   1              SFRPAGE = 0x00;
  72   1              AMX0CF=type;     //AIN67IC,AIN45IC,AIN23IC,AIN01IC,0为单端输入。  
  73   1              AMX0SL=source;   //选择AD输入通道的,有9个,其中第9通道是内部温度输入 /*0000B-0111B通道*/
  74   1                                               /*source = 3选择AIN0.3*/
  75   1      
  76   1      }                                                               
  77          
  78          /*===============================================================*/
  79          /*函数说明:ADC0的初始化函数                                             */
  80          /*修改记录:     有修改记录                                                                                       */
  81          /*修改时间:2008.3.28                                                                     */
  82                      
  83                      
  84          /*===============================================================*/
  85          
  86          void adc0_initial()
  87          {
  88   1              char SFRPAGE_SAVE = SFRPAGE;     // Preserve current SFR page
  89   1              
  90   1              SFRPAGE = ADC0_PAGE;
  91   1              
  92   1              ADC0CF=0x0f;     //ADC0时钟为系统时钟2(/*1*1+1=2*/)分频,PGA增益为0.5/*ADC 0 CONFIGURATION */
  93   1              ADC0CN=0x8c;     //AD0TM=0,ADC0为连续跟踪模式,由T2溢出率启动ADC0/*ADC0开启,必须使BIASE置1*//*ADC 0 CONT
             -ROL */
  94   1          
  95   1              SFRPAGE = ADC0_PAGE; //AD0LJST=0,数据存储格式右对齐,即ADC0H存放12bit高四位
  96   1              REF0CN&=0x0f;    //AD0VRS=0,ADC0参考电压为VREFA
  97   1              REF0CN|=0x07;    //TEMPE=1,内部温度传感器工作/*ADC/DAC工作,须将此位置1 ,内部参考电压输出开启*/
  98   1              /* 
  99   1                 REFBE=1,内部参考电平工作,电路部分须将VREF参考输出(C8051F40的第12管脚)与     VREF0(C8051F040的16管脚相连,
 100   1                 并最好并联一个4.7uF和0.1uF的旁路电容以电平滤波
 101   1              */
 102   1              SFRPAGE = SFRPAGE_SAVE;          // Restore SFR page.   
 103   1      
 104   1              adc0_mux(0x08,3);//PORT3IC=1,ADC0 6、7通道为差动模式 /*P3奇数位和偶数位成差动输入模式*/
 105   1                               //AIN0.0-AIN0.3均为单端模式   /*HVDA为单端输入模式,送入ADC0转换的信号为HVDA输出与AGND之

⌨️ 快捷键说明

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