📄 aad.lst
字号:
C51 COMPILER V8.02 AAD 03/17/2009 09:25:40 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE AAD
OBJECT MODULE PLACED IN AAD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe AAD.c DB OE
line level source
1 //************************************************************
2
3 // AD采样程序
4
5 //
6
7 // (1)使用C8051F005芯片
8
9 // (2)外部晶振11.0592MHZ ,使用内部2.4V基准电压
10
11 // (2)单端输入方式,两通道输入ANIO、ANI1,向ADBUSY置1启动AD转换
12
13 // (3)对采样10次在求平均值以减小误差
14
15 // (4)经过处理与实际值相差0~3MV
16
17 // 注:测量参考电压和输入电压为同一表
18
19 //*************************************************************
20
21 #include <c8051f000.h>
22
23 #include <stdio.h>
24
25
26
27
28 sfr16 ADC0 = 0xbe; //AD寄存器地址
29
30 sfr16 ADC0GT = 0xc4;
31
32 sfr16 ADC0LT = 0xc6;
33
34
35
36 #define SYSCLK 18432000 //系统时钟 频率
37
38 #define SAMPLE_RATE 50000
39
40 #define VREF 2.4 //参考电压值
41
42
43
44 void ADC0_Init (void); //AD转换初始化设置函数
45
46 void Timer3_Init (int counts); //定时3初始化设置函数
47
48 void ADC0_ISR (void); //AD转换中断函数
49
50 void delay (int t); //延时程序
51
52 void SYSCLK_Init (void); //系统时钟函数
53
54 void WDT_CLOSE(void); //关闭看门狗
55
C51 COMPILER V8.02 AAD 03/17/2009 09:25:40 PAGE 2
56
57
58 int result; //数据存储
59
60 float value; //存储测量值
61
62 char flag; //标志
63
64 //***********************************************************
65
66 //关闭看们狗
67
68 //***********************************************************
69
70 void WDT_CLOSE(void)
71
72 { EA=0;
73 1
74 1 WDTCN = 0xde;
75 1
76 1 WDTCN = 0xad;
77 1
78 1 EA=1;
79 1
80 1 }
81
82 //***********************************************************
83
84 //系统时钟设置
85
86 //晶振振荡方式,F>6.7mhz
87
88 //选用外部时钟
89
90 //允许时钟复位
91
92 //************************************************************
93
94 void SYSCLK_Init (void)
95
96 { int i;
97 1
98 1
99 1
100 1 OSCXCN = 0x67;
101 1
102 1 for (i=0; i < 256; i++) ;
103 1
104 1 while (!(OSCXCN & 0x80)) ; //等待外部准备
105 1
106 1 OSCICN = 0x88;
107 1
108 1
109 1
110 1 }
111
112
113
114 //**********************************************************
115
116 //AD初始化设置
117
C51 COMPILER V8.02 AAD 03/17/2009 09:25:40 PAGE 3
118 //AIN0 独立输入
119
120 //使用内部参考电压, PGA= 2,使用4系统时钟
121
122 //转换数据右对齐
123
124 //**********************************************************
125
126 void ADC0_Init (void)
127
128 {
129 1
130 1 ADC0CN = 0x44; //右对齐
131 1
132 1 REF0CN = 0x03; //使用内部参考电压
133 1
134 1
135 1
136 1 AMX0SL = 0x00; //AIN0 独立输入
137 1
138 1 AMX0CF = 0x00;
139 1
140 1
141 1
142 1 ADC0CF = 0x20; // 4系统时钟 PGA 1
143 1
144 1
145 1
146 1 EIE2 |= 0x02; // 中断开
147 1
148 1 }
149
150 //**********************************************
151
152 //AD转换程序
153
154 //**********************************************
155
156 void ADC0_ISR (void) interrupt 15
157
158 {
159 1
160 1 TMR3CN &=0x20; //关定时器3 清除标准位
161 1
162 1 ADCINT = 0x00; //清除中断标准位
163 1
164 1 delay (10); //延时等待AD转换稳定
165 1
166 1
167 1
168 1 result = ADC0; //数据转存
169 1
170 1
171 1
172 1 TMR3CN |= 0x04; //定时器3开
173 1
174 1 flag = 1;
175 1
176 1 }
177
178 //***********************************************
179
C51 COMPILER V8.02 AAD 03/17/2009 09:25:40 PAGE 4
180 //延时子程序
181
182 //***********************************************
183
184 void delay (int t)
185
186 { int i,j;
187 1
188 1 for (i=0;i<t;i++)
189 1
190 1 for(j=0;j<10;j++) ;
191 1
192 1 }
193
194 //******************************************
195
196 //MAIN
197
198 //******************************************
199
200 void main (void)
201
202 { int i=0;
203 1
204 1 float voltage=0;
205 1
206 1 WDT_CLOSE(); //关闭看门狗
207 1
208 1 SYSCLK_Init ( ); //系统时钟设置
209 1
210 1 Timer3_Init (SYSCLK/SAMPLE_RATE); //定时器3初始化设置
211 1
212 1 ADC0_Init (); //AD初始化
213 1
214 1 ADCEN = 1; //AD转换允许打开
215 1
216 1 EA = 1;
217 1
218 1 flag = 0;
219 1
220 1 while (1) //循环
221 1
222 1 {
223 2
224 2 while (flag == 1)
225 2
226 2 { flag = 0;
227 3
228 3 value = VREF*((float)result/4096.0)/2; //单次测量值
229 3
230 3 i++;
231 3
232 3 voltage+=value;
233 3
234 3 }
235 2
236 2 while(i==100) //测量100次的值求平均值
237 2
238 2 { i=0;
239 3
240 3 voltage=(float)voltage/100;
241 3
C51 COMPILER V8.02 AAD 03/17/2009 09:25:40 PAGE 5
242 3 value=0;
243 3
244 3 }
245 2
246 2 }
247 1
248 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 350 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 6
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -