📄 text1.lst
字号:
C51 COMPILER V8.02 TEXT1 03/14/2009 10:05:48 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"STC12C5410AD.H"
2
3
4
5 //AD程序定义
6 unsigned char ad_result_data[10];
7 unsigned char ad_result_low2[10];
8 unsigned char ad_result_total[10];
9 unsigned char ad_average_result;
10 unsigned char r_4,r_5,r_6,r_7;
11 char tp=0;
12 unsigned char m,n,s,b,t,en=1;
13 void get_ad_result();
14 void delay(char t);
15
16
17 unsigned int z=0;
18
19
20
21 /*********************************************************************
22
23
24 AD转换程序
25
26
27 ***********************************************************************/
28 ///////初始化函数
29 void AD_initiate()
30 {
31 1 ES=0;
32 1 TMOD=0x21;
33 1 SCON=0x50;
34 1 TH1=0xfd;
35 1 TL1=0x0fd;
36 1 TR1=1;
37 1 }
38
39
40 /////////////////////////
41
42 void ADC_Power_On()
43 {
44 1 ADC_CONTR|=0x80;
45 1 delay(5);
46 1 }
47
48
49
50 //取AD结果函数
51 void send_ad_result(unsigned char R)
52 { SBUF=R;
53 1
54 1
55 1
C51 COMPILER V8.02 TEXT1 03/14/2009 10:05:48 PAGE 2
56 1 while(TI==0) ;
57 1
58 1 TI=0;
59 1
60 1 }
61
62
63
64
65 //取AD结果函数,它是十位AD转换,每十次平均,最后取低八位作为AD采样数据
66 void get_ad_result()
67 { int i,q=0;
68 1 for(i=0;i<10;i++)
69 1 {
70 2 tp=0;
71 2 ADC_DATA=0; //高八位数据清零
72 2 ADC_LOW2=0; //低两位清零
73 2 ADC_CONTR|=0x08; //启动AD转换
74 2 while(!tp) //判断AD转换是否完成
75 2 {
76 3 tp=0x10;
77 3 tp&=ADC_CONTR;
78 3 }
79 2 ADC_CONTR&=0xe7;
80 2 ADC_DATA=ADC_DATA<<2; //高八位左移两位
81 2 ADC_LOW2 &=0x03;
82 2
83 2 ad_average_result=ADC_DATA+ADC_LOW2;
84 2 q=q+ad_average_result;
85 2
86 2 }
87 1 ad_average_result=q/10;
88 1 }
89
90
91
92 //延时子程序
93 void delay(char t) //160微秒
94 {
95 1 for(s=10;s>0;s--)
96 1 {
97 2 for(m=t;m>0;m--);
98 2 for(n=2;n>0;n--);
99 2 }
100 1 }
101
102
103
104 void delay02s(char t) //延时子程序
105 {
106 1 unsigned char i,j,k;
107 1 for(i=5;i>0;i--)
108 1 for(j=t;j>0;j--)
109 1 for(k=248;k>0;k--);
110 1 }
111
112
113 void yanshi() //延时子程序,延时4分52秒
114 {
115 1 unsigned int i,j,k;
116 1 for(i=1000;i>0;i--)
117 1 for(j=1000;j>0;j--)
C51 COMPILER V8.02 TEXT1 03/14/2009 10:05:48 PAGE 3
118 1 for(k=248;k>0;k--); //
119 1 }
120 /************************************************************
121
122
123 P1口AD转换程序
124
125
126 *************************************************************/
127
128
129 void fP14()
130 {
131 1 P1M0|=0x10; //设P1_4为开漏模式 如: P1_1= #00000010B
132 1 P1M1|=0x10;
133 1 ADC_CONTR=0xe4; //设置通道x, 格式如: P1_x= 0xeX
134 1 delay(2);
135 1 get_ad_result();
136 1 r_4=ad_average_result;
137 1 send_ad_result(r_4);
138 1 }
139
140
141 ///////////////////////////
142 void fP15()
143 {
144 1 P1M0|=0x20;
145 1 P1M1|=0x20;
146 1 ADC_CONTR=0xe5;
147 1 delay(2);
148 1 get_ad_result();
149 1 r_5=ad_average_result;
150 1 send_ad_result(r_5);
151 1 }
152
153
154 void fP16()
155 {
156 1 P1M0|=0x40;
157 1 P1M1|=0x40; //设为开漏模式
158 1 ADC_CONTR=0xe6;
159 1 delay(2);
160 1 get_ad_result();
161 1 r_6=ad_average_result;
162 1 send_ad_result(r_6);
163 1 }
164
165
166 void fP17()
167 {
168 1 P1M0|=0x80;
169 1 P1M1|=0x80; //设为开漏
170 1 ADC_CONTR=0xe7; //设置通道3 20--200微秒
171 1 delay(1);
172 1 get_ad_result(); //取P13结果
173 1 r_7=ad_average_result;
174 1 send_ad_result(r_7); // 把结果送到串口
175 1 }
176
177
178
179
C51 COMPILER V8.02 TEXT1 03/14/2009 10:05:48 PAGE 4
180
181
182 /********************************************************
183
184
185 电机控制程序
186
187
188 ********************************************************/
189
190
191
192
193 /****************** 电机—1 *****************************/
194
195 void zhuan_r4()
196 {
197 1 fP14();
198 1 fP16();
199 1 while(r_4>r_6) //
200 1 {
201 2 P26=1;
202 2 P27=0;
203 2 fP14();
204 2 fP16();
205 2 if(P26==0)
206 2 {break;}
207 2
208 2 }
209 1 P26=0;
210 1 P27=0;
211 1 }
212
213
214 void zhuan_r6()
215 {
216 1
217 1 fP14();
218 1 fP16();
219 1 while((r_6>r_4))
220 1 {
221 2 P26=0;
222 2 P27=1;
223 2 fP14();
224 2 fP16();
225 2 if(P27==0)
226 2 { break;}
227 2 }
228 1 P26=0;
229 1 P27=0;
230 1 }
231
232
233
234 void dianji_1()
235 {
236 1 fP14();
237 1 fP16();
238 1 if((r_4-7)>r_6) {if(P34==0) {zhuan_r4();}}
239 1 if(r_4<(r_6-7)){if(P35==0) {zhuan_r6();}}
240 1 }
241
C51 COMPILER V8.02 TEXT1 03/14/2009 10:05:48 PAGE 5
242
243
244
245 /******************电机—2***************************/
246
247 void zhuan_r5()
248 {
249 1 P10=1;
250 1 P37=0;
251 1 fP15(); //采样
252 1 fP17();
253 1 while(r_5>r_7) //比较采样值,如果P1.0大于P1.1,就向P1.0方向转,其余的同理
254 1 {
255 2
256 2 P10=1;
257 2 P37=0;
258 2 fP15(); //采样
259 2 fP17();
260 2 if(P10==0)
261 2 {break;}
262 2 }
263 1 P10=0;
264 1 P37=0;
265 1
266 1 }
267
268
269 void zhuan_r7()
270 {
271 1 P10=0;
272 1 P37=1;
273 1 fP15(); //采样
274 1 fP17();
275 1
276 1 while(r_7>r_5)
277 1 {
278 2 P10=0;
279 2 P37=1;
280 2 fP15(); //采样
281 2 fP17();
282 2 if(P37==0)
283 2 {break;}
284 2 }
285 1 P10=0;
286 1 P37=0;
287 1
288 1 }
289
290
291 void dianji_2()
292 {
293 1 fP15(); //采样
294 1 fP17();
295 1 if((r_5-7)>r_7) {if(P25==0){zhuan_r5();}}
296 1
297 1 if(r_5<(r_7-7)){if(P24==0){zhuan_r7();}}
298 1 }
299
300
301
302 /***************************************************
303
C51 COMPILER V8.02 TEXT1 03/14/2009 10:05:48 PAGE 6
304
305 定时器延时程序
306
307
308 *****************************************************/
309
310
311 //定时器0初始化
312 void Timer0_ini()
313 { TMOD=0x01; //定时器0工作于方式1
314 1 EA=1; //总中断允许
315 1 ET0=1; //定时器0允许
316 1 TH0=(65536-50000)/256;
317 1 TL0=(65536-50000)%256;
318 1
319 1 }
320
321
322 //定时器0中断子程序
323 Timer0() interrupt 1 using 1
324 {
325 1
326 1 TH0=(65536-50000)/256;
327 1 TL0=(65536-50000)%256;
328 1 z++;
329 1 if(z==400)
330 1 {en=0;TR0=0;}
331 1
332 1 }
333
334 /****************************************************
335
336
337 主程序
338
339
340 ****************************************************/
341
342
343 main()
344 {
345 1 unsigned char i;
346 1 AD_initiate();
347 1 ADC_Power_On();
348 1 P27=0; //电机控制端口初始化
349 1 P26=0;
350 1 P10=0;
351 1 P37=0;
352 1 P24=1; //方向调整端口
353 1 P25=1;
354 1 while(1)
355 1 {
356 2 // for(i=2;i>0;i--)
357 2 // {
358 2 dianji_1();
359 2 dianji_2();
360 2 // }
361 2 // yanshi();
362 2 while(P12==0)
363 2 {
364 3 for(i=2;i>0;i--) //
365 3 {
C51 COMPILER V8.02 TEXT1 03/14/2009 10:05:48 PAGE 7
366 4 dianji_1();
367 4 dianji_2();
368 4
369 4 }
370 3 yanshi();
371 3 //P10=0; P37=1;
372 3 } //向上旋转
373 2 /* while(P25==0)
374 2 { P10=1; P37=0; } //向上旋转
375 2 P24=1; //方向调整端口
376 2 P25=1;
377 2 */
378 2 }
379 1
380 1
381 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 575 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 44 ----
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 + -