📄 main.lst
字号:
186 1 ADC_Index = 0;
187 1 SampeEnable = 0;
188 1 MesuState = 0;
189 1 IE = 0x80; //中断使能
190 1 }
191 /*=================================================================================================
192 02.名称:PrtChr
193 入口:tem - 要发送的字符,占一个字节
194 出口:无
195 功能:通过串口与主板通讯
196 =================================================================================================*/
197 void PrtChr(unsigned char TemChr)
198 {
199 1 SendChar(0xDD); //无效
200 1 SendChar(TemChr); //千位
201 1 SendChar(TemChr);
202 1 SendChar(TemChr);
203 1 SendChar(TemChr);
204 1 SendChar(0x0D);
205 1 }
206 /*=================================================================================================
207 01.名称:MeasureDistance
208 入口:无
209 出口:DisVal0:返回单次测距值
210 功能:单次测量函数
211 =================================================================================================*/
212 float MeasureDistance(void)
213 {
214 1 float xdata DisVal0,DisVal1,DisVal2,DisVal3;//;
215 1 unsigned char N0,N1,N2;
216 1
217 1 RuleFor();
218 1 DisVal3=RULER3-SignleMeasure(RULER3);
219 1
220 1 RuleThr();
221 1 DisVal2=SignleMeasure(RULER2);
222 1
223 1 RuleTwo();
224 1 DisVal1=SignleMeasure(RULER1);
225 1
226 1 RuleOne();
227 1 DisVal0=SignleMeasure(RULER0);
228 1
229 1
230 1
231 1 /*
232 1 RuleOne();
233 1 //JstOutLgh();
234 1 DisVal0=SignleMeasure(RULER0);
235 1 P2&=~0x01;
236 1 //SelChlZer();
237 1
238 1 RuleTwo();
239 1 DisVal1=SignleMeasure(RULER1);
240 1 //SelChlSix();
241 1
C51 COMPILER V7.50 MAIN 01/08/2008 15:08:10 PAGE 5
242 1 RuleThr();
243 1 DisVal2=SignleMeasure(RULER2);
244 1 //SelChlSix();
245 1
246 1 RuleFor();
247 1 DisVal3=SignleMeasure(RULER3);
248 1 //SelChlSix();
249 1 */
250 1 DisVal3+=((float)HALFRULER2-DisVal2/2);
251 1 DisVal2+=((float)HALFRULER1-DisVal1/2);
252 1 DisVal1+=((float)HALFRULER0-DisVal0/2);
253 1
254 1 N0=(unsigned char)(((DisVal1-DisVal0)/RULER0)+0.5);
255 1 N1=(unsigned char)(((DisVal2-DisVal1)/RULER1)+0.5);
256 1 N2=(unsigned char)(((DisVal3-DisVal2)/RULER2)+0.5);
257 1 DisVal0+=(10*N1+N0)*RULER0;//100*N2+
258 1
259 1 return DisVal0;
260 1 }
261 /*=================================================================================================
262 01.名称:SignleMeasure
263 入口:RulerLenght: 测尺长度
264 出口:返回单测尺测距值
265 功能:单测尺一次测量函数
266 =================================================================================================*/
267 float SignleMeasure(float rl)
268 {
269 1 float xdata Ph1,Ph2,Ph3;
270 1 long DelayA,DelayB;
271 1 unsigned char i;
272 1
273 1 DelayA=65000;
274 1 DelayB=65000;
275 1 ADC_Index = 0;
276 1 SampeEnable=0;
277 1 MesuState=0;
278 1 MesuEnable=0;
279 1
280 1 for(i=0;i<NUM_FFT;i++)
281 1 {
282 2 Real[i]=0;
283 2 }
284 1 GoToInSide();//内
285 1 while(DelayA--);
286 1 MesuState=1;
287 1 AvgeTimes=AVGNUM;
288 1 EnableInt();
289 1 while(MesuState);
290 1 for(i=0;i<NUM_FFT;i++)
291 1 {
292 2 Real[i]=(int)(((float)Real[i]/AVGNUM)+0.5);//Real[i]/AVGNUM;
293 2 }
294 1 Ph1=rl*(GetPhaseFromMeasDat(Real)/2500.0);
295 1 for(i=0;i<NUM_FFT;i++)
296 1 {
297 2 Real[i]=0;
298 2 }
299 1 GoToOutSide();//外
300 1 while(DelayB--);
301 1 MesuState=1;
302 1 AvgeTimes=AVGNUM;
303 1 while(MesuState);
C51 COMPILER V7.50 MAIN 01/08/2008 15:08:10 PAGE 6
304 1 UnEnableInt();
305 1 for(i=0;i<NUM_FFT;i++)
306 1 {
307 2 Real[i]=(int)(((float)Real[i]/AVGNUM)+0.5);//Real[i]/AVGNUM;
308 2 }
309 1 Ph2=rl*(GetPhaseFromMeasDat(Real)/2500.0);
310 1
311 1 if(Ph1-Ph2<0.0000001) Ph3=Ph2-Ph1; //NOW
312 1 else Ph3=rl-(Ph1-Ph2);
313 1
314 1 return Ph3;
315 1 }
316
317 /*=================================================================================================
318 12.名称:ADC0_ISR
319 入口:无
320 出口:无
321 功能:ADC0中断服务子程序
322 =================================================================================================*/
323 void ADC0_ISR(void) interrupt 15 using 3
324 {
325 1 int ADCSamp;
326 1
327 1 ADCINT=0; //清ADC转换标志位
328 1 if(SampeEnable==1)
329 1 {
330 2 ADCSamp=ADC0; //存ADC的转换值
331 2 if(MaxVal<=ADCSamp) MaxVal=ADCSamp;
332 2 if(MinVal>=ADCSamp) MinVal=ADCSamp;
333 2 Real[ADC_Index]+=ADCSamp;
334 2 ADC_Index++; //采样次数加1
335 2 if(ADC_Index>=NUM_FFT) //达到采样数
336 2 {
337 3 ADC_Index=0;
338 3 AvgeTimes--;
339 3 if(AvgeTimes==0)
340 3 {
341 4 SampeEnable=0;
342 4 MesuState=0;
343 4 }
344 3 }
345 2 }
346 1 else
347 1 {
348 2 ADC_Index++;
349 2 if(ADC_Index>=NUM_FFT||MesuState==1)
350 2 {
351 3 if(MesuState==1&&ADC_Index==NUM_FFT)
352 3 {
353 4 SampeEnable=1;
354 4 MaxVal=0;
355 4 MinVal=4096;
356 4 ADC_Index=0;
357 4 }
358 3 else if(ADC_Index==NUM_FFT) ADC_Index=0;
359 3 }
360 2 }
361 1 }
362 /*-----------------------------------------------------------------------------------------------*/
363 //End FFT_New_test.c
C51 COMPILER V7.50 MAIN 01/08/2008 15:08:10 PAGE 7
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2214 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 28
PDATA SIZE = ---- ----
DATA SIZE = 16 24
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -