📄 adc_sampling.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 + -