?? key.lst
字號:
C51 COMPILER V8.08 KEY 08/13/2007 11:03:18 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN key.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE key.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //#include<reg51.h>
2 #include<yh.h>
3 #include<absacc.h>
4 #include<math.h>
5 //按鍵響應函數
6 float V0,VI0; // 電壓比較值,失調電壓值
7 float VL0,VL1; // K1,K2閉合或斷開時測得的輔助運放的輸出電壓
8 float II0; // 失調電流值
9 float AVD; // 測試交流差模開環電壓增益AVD
10 float KCMR; //交流共模抑制比KCMR
11 uint VIB; //電壓采集測量值
12 uchar sw,gw,xsw1,xsw2;
13 extern uchar key_value ; //外部中斷返回鍵值
14 xdata float ad_buf[50];
15
16 //AD0809轉換函數
17
18 void ad_tran(void)
19 {
20 1 adbusy=1;
21 1 AD0809=0; // 啟動A/D轉換
22 1 while(adbusy==1); // 待轉換結束
23 1 delay(10);
24 1 VIB=AD0809;
25 1 // VIB=0xaa ;
26 1 V0=(float)((float)VIB/0xff)*5 ; // 十進制轉換 成比較值
27 1
28 1 // VI0=(float)((float)VIB/0xff)*5 ; // 測 試
29 1
30 1 }
31
32 //輸出數值轉換
33 void in_tran(float tt)
34 {
35 1
36 1 sw=(uchar)tt/10; //轉換得出十位的值
37 1 gw=(uchar)tt%10; //轉換得出個位的值
38 1 xsw1=(uchar)(tt*10)%10; //轉換得出小數點后第一位的值
39 1 xsw2=(uchar)(tt*100)%10; //轉換得出小數點后第二位的值
40 1 }
41
42 //led顯示錯誤 EFF
43 void led_showEFF(void)
44 {
45 1 COM8279=0x87; // 寫顯示器RAM 000H
46 1 DAT8279=table[15]; // 顯示 F
47 1 COM8279=0x86; // 001H
48 1 DAT8279=table[15]; // 顯示 F
49 1 COM8279=0x85; // 002H
50 1 DAT8279=table[14]; // 顯示 E
51 1 }
52
53 //led顯示
54 void led_show(void)
55 {
C51 COMPILER V8.08 KEY 08/13/2007 11:03:18 PAGE 2
56 1 COM8279=0X87;
57 1 DAT8279=table[xsw2];
58 1 COM8279=0x86; // 寫顯示器RAM 000H
59 1 DAT8279=table[xsw1]; // 顯示小數位
60 1 COM8279=0x85; // 001H
61 1 DAT8279=table[gw]|0x80; // 顯示各位并小數點
62 1 COM8279=0x84; // 002H
63 1 DAT8279=table[sw]; // 顯示十位
64 1 }
65 /*
66 //取采樣出來的最大值
67 void cy_max(void)
68 {
69 uchar i;
70 for(i=0;i<50;i++)
71 {
72 ad_tran(); // ad采樣 50次
73 ad_buf[i]=V0; // 把計算完后的比較值送給數組
74 delay(10); // 延時10ms
75 }
76 for(i=1;i<50;i++)
77 if(ad_buf[0]<ad_buf[i])
78 ad_buf[0]=ad_buf[i]; //取采樣出來的最大值
79 V0=ad_buf[0];
80 }
81 */
82 //取采樣平均值
83 void cy_ary(void)
84 {
85 1 uchar i;
86 1 for(i=0;i<50;i++)
87 1 {
88 2 ad_tran(); // ad采樣 50次
89 2 ad_buf[i]=V0; // 把計算完后的比較值送給數組
90 2 delay(10); // 延時10ms
91 2 }
92 1 for(i=0;i<50;i++)
93 1 {
94 2 V0=V0+ad_buf[i];
95 2 }
96 1 V0=V0/50;
97 1 }
98
99
100 //測試失調電壓VI0
101 void key0(void)
102 {
103 1 PA8255=0x00;//相應的繼電器設置 1000
104 1 delay(1000); //延時 100ms
105 1 cy_ary(); //取出采樣50次的最大值
106 1 VI0=V0; //計算出失調電壓
107 1 /*
108 1 if(VI0>4) //如果大于4則再一次進行采樣
109 1 {
110 1 PA8255=0x40;//相應的繼電器設置 100
111 1 delay(100); //延時
112 1 cy_ary();
113 1 VI0=V0*10;
114 1 if(VI0>40)
115 1 {
116 1 PA8255=0x00;//關閉所有繼電器
117 1 delay(100);
C51 COMPILER V8.08 KEY 08/13/2007 11:03:18 PAGE 3
118 1 led_showEFF();
119 1 goto loop0;
120 1 }
121 1
122 1 }
123 1 */
124 1 in_tran(VI0);
125 1 led_show();
126 1 //loop0:
127 1 COM8279=0x80;
128 1 DAT8279=table[1];
129 1 // PC8255=; //顯示單位LED燈 mV
130 1 // VI0=(float)23.22; // 測試
131 1 // ad_tran(); // 測試
132 1
133 1 }
134
135 //測試失調電流 II0
136 void key1(void)
137 {
138 1 //while(!){
139 1 PA8255=0x00;//0~0.4uA的繼電器設置
140 1 delay(1000);
141 1 cy_ary();
142 1 VL0=V0;
143 1 PA8255=0x30;//0~0.4uA的繼電器的設置
144 1 delay(1000);
145 1 cy_ary();
146 1 VL1=V0;
147 1 II0=VL1-VL0; //uA 0uA~0.4uA
148 1 /*
149 1 if(II0>0.4)
150 1 {
151 1 PA8255=0x40;//0.4uA~4uA的繼電器設置
152 1 delay(100);
153 1 cy_ary();
154 1 VL0=V0;
155 1 PA8255=0x70;//0.4uA~4uA的繼電器的設置
156 1 delay(100);
157 1 cy_ary();
158 1 VL1=V0;
159 1 II0=VL1-VL0; // uA 0.4uA~4uA
160 1 if(II0>4)
161 1 {
162 1 PA8255=0x00;//關閉所有繼電器
163 1 delay(100);
164 1 led_showEFF();
165 1 goto loop1;
166 1
167 1 }
168 1
169 1 }
170 1 */
171 1 in_tran(II0);
172 1 led_show();
173 1 //loop1:
174 1 COM8279=0x80;
175 1 DAT8279=table[2];
176 1 // PC8255=; //顯示單位LED燈 uA
177 1
178 1 }
179
C51 COMPILER V8.08 KEY 08/13/2007 11:03:18 PAGE 4
180 //測試交流差模開環電壓增益AVD
181 void key2(void)
182 {
183 1 //相應繼電器的設置
184 1 delay(100);
185 1 cy_ary();//采樣最大值
186 1 VL0=2*V0*0.707;//求出有效值
187 1 if(VL0>4)//VL0大于4V則錯誤
188 1 {
189 2 //關閉所有繼電器
190 2 delay(100);
191 2 led_showEFF();
192 2 goto loop2;
193 2 }
194 1
195 1 AVD=20*log((4/VL0)*1000);
196 1 in_tran(AVD);
197 1 led_show();
198 1 loop2:
199 1 COM8279=0x80;
200 1 DAT8279=table[3];
201 1 // PC8255=;
202 1
203 1
204 1 }
205
206 //交流共模抑制比KCMR
207 void key3(void)
208 {
209 1 /* //相應繼電器的設置
210 1 delay(100);
211 1 cy_ary();//采樣最大值
212 1 VL0=2*V0*0.707;//求出有效值
213 1 if(VL0>4)//VL0大于4V則錯誤
214 1 {
215 1 //關閉所有繼電器
216 1 delay(100);
217 1 led_showEFF();
218 1 goto loop3;
219 1 }
220 1
221 1
222 1 KCMR=20*log((4/VL0)*1000);
223 1 in_tran(KCMR);
224 1 led_show();
225 1 loop3:
226 1 COM8279=0x80;
227 1 DAT8279=table[4];
228 1 // PC8255=;
229 1 */
230 1 while(1)
231 1 {
232 2 cy_ary();
233 2 //V0=V0-1.06;
234 2 in_tran(V0);
235 2 led_show();
236 2 delay(100);
237 2 }
238 1 }
239
240 //測試單位增益帶寬BWG
241 void key4(void)
C51 COMPILER V8.08 KEY 08/13/2007 11:03:18 PAGE 5
242 {
243 1
244 1 uchar i,a,b,c;
245 1 PC8255=0x00;
246 1 a=0x00;
247 1 b=0x87;
248 1
249 1 for(i=0;i<8;i++)
250 1 {
251 2 c=a&0x01;
252 2 COM8279=b;
253 2 DAT8279=table[a];
254 2 a=a>>1;
255 2 b--;
256 2 }
257 1
258 1
259 1
260 1 /* uchar i,a,b,c;
261 1 a=0xff;
262 1 b=0x87;
263 1 for(i=0;i<8;i++)
264 1 {
265 1 c=a&0x01;
266 1 COM8279=b;
267 1 DAT8279=table[c];
268 1 a=a>>1;
269 1 b--;
270 1 } */
271 1
272 1
273 1 }
274
275
276 //用于測試采集的信號
277 void key5(void)
278 { /*
279 1 while(1)
280 1 {
281 1 cy_ary();
282 1 V0=V0-1.06;
283 1 in_tran(V0);
284 1 led_show();
285 1 delay(100);
286 1 } */
287 1 while(1){
288 2 //測試8255;
289 2 uchar i,a,b,c;
290 2 PC8255=0xff;
291 2 /* delay(500);
292 2 PA8255=0x00;
293 2 delay(500);
294 2 */
295 2 a=0xff;
296 2 b=0x87;
297 2 for(i=0;i<8;i++)
298 2 {
299 3 c=a&0x01;
300 3 COM8279=b;
301 3 DAT8279=table[c];
302 3 a=a>>1;
303 3 b--;
C51 COMPILER V8.08 KEY 08/13/2007 11:03:18 PAGE 6
304 3 }
305 2 }
306 1 /* while(1)
307 1 {
308 1 ad_tran();
309 1 in_tran(V0);
310 1 led_show();
311 1 COM8279=0x80;
312 1 DAT8279=table[6];
313 1 delay(100);
314 1 }
315 1 */
316 1 }
317
318 //大概延時1ms
319 void delay(uchar x)
320 {
321 1 uchar i;
322 1 while(x--)
323 1 {
324 2 for(i=0;i<53;i++)
325 2 {}
326 2 }
327 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 786 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 200 ----
PDATA SIZE = ---- ----
DATA SIZE = 34 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 + -