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