📄 adcdac.lst
字号:
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 + -