?? aad.lst
字號(hào):
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 ,使用內(nèi)部2.4V基準(zhǔn)電壓
10
11 // (2)單端輸入方式,兩通道輸入ANIO、ANI1,向ADBUSY置1啟動(dòng)AD轉(zhuǎn)換
12
13 // (3)對(duì)采樣10次在求平均值以減小誤差
14
15 // (4)經(jīng)過處理與實(shí)際值相差0~3MV
16
17 // 注:測(cè)量參考電壓和輸入電壓為同一表
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 //系統(tǒng)時(shí)鐘 頻率
37
38 #define SAMPLE_RATE 50000
39
40 #define VREF 2.4 //參考電壓值
41
42
43
44 void ADC0_Init (void); //AD轉(zhuǎn)換初始化設(shè)置函數(shù)
45
46 void Timer3_Init (int counts); //定時(shí)3初始化設(shè)置函數(shù)
47
48 void ADC0_ISR (void); //AD轉(zhuǎn)換中斷函數(shù)
49
50 void delay (int t); //延時(shí)程序
51
52 void SYSCLK_Init (void); //系統(tǒng)時(shí)鐘函數(shù)
53
54 void WDT_CLOSE(void); //關(guān)閉看門狗
55
C51 COMPILER V8.02 AAD 03/17/2009 09:25:40 PAGE 2
56
57
58 int result; //數(shù)據(jù)存儲(chǔ)
59
60 float value; //存儲(chǔ)測(cè)量值
61
62 char flag; //標(biāo)志
63
64 //***********************************************************
65
66 //關(guān)閉看們狗
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 //系統(tǒng)時(shí)鐘設(shè)置
85
86 //晶振振蕩方式,F(xiàn)>6.7mhz
87
88 //選用外部時(shí)鐘
89
90 //允許時(shí)鐘復(fù)位
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)) ; //等待外部準(zhǔn)備
105 1
106 1 OSCICN = 0x88;
107 1
108 1
109 1
110 1 }
111
112
113
114 //**********************************************************
115
116 //AD初始化設(shè)置
117
C51 COMPILER V8.02 AAD 03/17/2009 09:25:40 PAGE 3
118 //AIN0 獨(dú)立輸入
119
120 //使用內(nèi)部參考電壓, PGA= 2,使用4系統(tǒng)時(shí)鐘
121
122 //轉(zhuǎn)換數(shù)據(jù)右對(duì)齊
123
124 //**********************************************************
125
126 void ADC0_Init (void)
127
128 {
129 1
130 1 ADC0CN = 0x44; //右對(duì)齊
131 1
132 1 REF0CN = 0x03; //使用內(nèi)部參考電壓
133 1
134 1
135 1
136 1 AMX0SL = 0x00; //AIN0 獨(dú)立輸入
137 1
138 1 AMX0CF = 0x00;
139 1
140 1
141 1
142 1 ADC0CF = 0x20; // 4系統(tǒng)時(shí)鐘 PGA 1
143 1
144 1
145 1
146 1 EIE2 |= 0x02; // 中斷開
147 1
148 1 }
149
150 //**********************************************
151
152 //AD轉(zhuǎn)換程序
153
154 //**********************************************
155
156 void ADC0_ISR (void) interrupt 15
157
158 {
159 1
160 1 TMR3CN &=0x20; //關(guān)定時(shí)器3 清除標(biāo)準(zhǔn)位
161 1
162 1 ADCINT = 0x00; //清除中斷標(biāo)準(zhǔn)位
163 1
164 1 delay (10); //延時(shí)等待AD轉(zhuǎn)換穩(wěn)定
165 1
166 1
167 1
168 1 result = ADC0; //數(shù)據(jù)轉(zhuǎn)存
169 1
170 1
171 1
172 1 TMR3CN |= 0x04; //定時(shí)器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 //延時(shí)子程序
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(); //關(guān)閉看門狗
207 1
208 1 SYSCLK_Init ( ); //系統(tǒng)時(shí)鐘設(shè)置
209 1
210 1 Timer3_Init (SYSCLK/SAMPLE_RATE); //定時(shí)器3初始化設(shè)置
211 1
212 1 ADC0_Init (); //AD初始化
213 1
214 1 ADCEN = 1; //AD轉(zhuǎn)換允許打開
215 1
216 1 EA = 1;
217 1
218 1 flag = 0;
219 1
220 1 while (1) //循環(huán)
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; //單次測(cè)量值
229 3
230 3 i++;
231 3
232 3 voltage+=value;
233 3
234 3 }
235 2
236 2 while(i==100) //測(cè)量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)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -