📄 main.lst
字号:
239 1
240 1 }
241
C51 COMPILER V7.10 MAIN 05/22/2006 14:37:00 PAGE 5
242 void Put_AEC(uchar DA1_H,uchar DA1_L)
243 {
244 1
245 1 DACCON=0x1F;
246 1 DAC1H=DA1_H;
247 1 DAC1L=DA1_L;
248 1
249 1 }
250 void Delay(unsigned int D_time)
251 {
252 1 unsigned int i;
253 1 for(i=0;i<D_time;i++)
254 1 {
255 2
256 2 }
257 1 }
258
259 void Serial_Port_Trans(unsigned int T_Data) //串口发送函数 在发送的过程中没有禁止中断
260 {
261 1 unsigned char *p;
262 1 p=(unsigned char *)&T_Data;
263 1 SBUF=*p;
264 1 while (!TI) //用指针将1个int型数分成2个char型
265 1 {
266 2 }
267 1 TI=0;
268 1 SBUF=*(p+1);
269 1 while (!TI) //将2个char数分别发送
270 1 {
271 2 }
272 1 TI=0;
273 1 }
274
275 void Service_int0() interrupt 0
276 {
277 1 if(Filter_ND_INVAL_Flag==0xFF)
278 1 {
279 2 TR0=0; //停止计数
280 2
281 2 FILTER_RUN=1;
282 2 FILTER_DIR=1;
283 2 Filter_ND_INVAL_Flag=0x00; //停止滤光片电机转动
284 2 Counter_Time=0x00;
285 2 TL0=0x00;
286 2 TH0=0x00; //设定定时器初值
287 2
288 2 }
289 1 }
290
291 void Service_int1() interrupt 2
292 {
293 1 if(Filter_ND_VAL_Flag==0xFF)
294 1 {
295 2 TR0=0; //停止计数
296 2
297 2 FILTER_RUN=1;
298 2 FILTER_DIR=1;
299 2 Filter_ND_VAL_Flag=0x00; //停止滤光片电机转动
300 2 Counter_Time=0x00;
301 2 TL0=0x00;
302 2 TH0=0x00; //设定定时器初值
303 2
C51 COMPILER V7.10 MAIN 05/22/2006 14:37:00 PAGE 6
304 2 }
305 1 }
306
307 void Time0() interrupt 1
308 {
309 1 Counter_Time++;
310 1 if(Counter_Time==0x05)
311 1 {
312 2 FILTER_RUN=1;
313 2 FILTER_DIR=1;
314 2 Filter_ND_VAL_Flag=0x00;
315 2 Filter_ND_INVAL_Flag=0x00;
316 2 Counter_Time=0x00;
317 2 TR0=0; //停止计数
318 2 TL0=0x00;
319 2 TH0=0x00; //设定定时器初值
320 2 }
321 1 }
322
323 void Serial_Port() interrupt 4
324 {
325 1 unsigned char R_Data;
326 1 EA=0;
327 1 if(RI)
328 1 { /* judge the data transmitted by PC */
329 2 RI=0;
330 2 if(SBUF!=0x01)
331 2 {
332 3 EA=1;
333 3 return;
334 3 }
335 2 while(!RI)
336 2 {}
337 2 RI=0;
338 2 if(SBUF!=0x01)
339 2 {
340 3 EA=1;
341 3 return;
342 3 }
343 2 while(!RI)
344 2 {}
345 2 if(SBUF==0x00||SBUF==0x01||SBUF==0x02||SBUF==0x03||SBUF==0x04||SBUF==0x05) //if it is not 0101**** ,exi
-t interrupt
346 2 {
347 3 RI=0;
348 3 switch(SBUF)
349 3 {
350 4 case 0x00:
351 4 {
352 5 while(!RI)
353 5 {}
354 5 RI=0;
355 5 R_Data=SBUF;
356 5 IRIS_TgtPos=(unsigned int)R_Data;
357 5 IRIS_TgtPos=IRIS_TgtPos<<4;
358 5 if(IRIS_TgtPos>IRIS_CurPos) //如果目标值大于当前值
359 5 {
360 6
361 6 R_IRIS_Run_Flag=0xFF; //置电机右传标志位
362 6 L_IRIS_Run_Flag=0x00; //清楚电机左转标志位
363 6 Cnt=0; //电机转动计数清0
364 6 }
C51 COMPILER V7.10 MAIN 05/22/2006 14:37:00 PAGE 7
365 5 else if(IRIS_TgtPos<IRIS_CurPos) //如果目标值小于当前值
366 5 {
367 6 L_IRIS_Run_Flag=0xFF; //置电机左传标志位
368 6 R_IRIS_Run_Flag=0x00; //清楚电机右转标志位
369 6 Cnt=0; //电机转动计数清0
370 6 }
371 5
372 5
373 5 if(ND_VAL&&(Filter_ND_INVAL_Flag!=0xFF)) //如果ND_VAL=0则目标位置既是当前位置,不转动ND_Filte
-r
374 5 {
375 6 Filter_ND_VAL_Flag=0xFF;
376 6 Filter_Run_L();
377 6 } //在已经有一个标志位被置位的情况下,不设定另一个标志位
378 5
379 5 }
380 4 break;
381 4 case 0x01:
382 4 {
383 5 while(!RI)
384 5 {}
385 5 RI=0;
386 5 R_Data=SBUF;
387 5 IRIS_TgtPos=(unsigned int)R_Data;
388 5 IRIS_TgtPos=IRIS_TgtPos<<4;
389 5 if(IRIS_TgtPos>IRIS_CurPos) //如果目标值大于当前值
390 5 {
391 6
392 6 R_IRIS_Run_Flag=0xFF; //置电机右传标志位
393 6 L_IRIS_Run_Flag=0x00; //清楚电机左转标志位
394 6 Cnt=0; //电机转动计数清0
395 6 }
396 5 else if(IRIS_TgtPos<IRIS_CurPos) //如果目标值小于当前值
397 5 {
398 6 L_IRIS_Run_Flag=0xFF; //置电机左传标志位
399 6 R_IRIS_Run_Flag=0x00; //清楚电机右转标志位
400 6 Cnt=0; //电机转动计数清0
401 6 }
402 5
403 5
404 5 if(ND_INVAL&&(Filter_ND_VAL_Flag!=0xFF)) //如果ND_INVAL=0则目标位置既是当前位置,不转动ND_Filte
-r
405 5 {
406 6 Filter_ND_INVAL_Flag=0xFF;
407 6 Filter_Run_R();
408 6 }
409 5 }
410 4 break;
411 4 case 0x02: //发送的第3组数是0x02时 接着发送的是ABS的调节参数
412 4 {
413 5 while(!RI)
414 5 {}
415 5 RI=0;
416 5 ABS_M=SBUF;
417 5
418 5 }
419 4 break;
420 4 case 0x03:
421 4 {
422 5 while(!RI)
423 5 {}
424 5 RI=0;
C51 COMPILER V7.10 MAIN 05/22/2006 14:37:00 PAGE 8
425 5 ABS_N=SBUF;
426 5 ABS_N=ABS_N<<4;
427 5 }
428 4 break;
429 4 case 0x04:
430 4 {
431 5 while(!RI)
432 5 {}
433 5 RI=0;
434 5 AEC_M=SBUF;
435 5 }
436 4 break;
437 4 case 0x05:
438 4 {
439 5 while(!RI)
440 5 {}
441 5 RI=0;
442 5 AEC_N=SBUF;
443 5 AEC_N=AEC_N<<4;
444 5 }
445 4 break;
446 4 }
447 3 }
448 2 }
449 1 EA=1;
450 1 }
451
452 void IRIS_Moto_Run() //光圈电机转动
453 {
454 1 unsigned char i=0x00;
455 1
456 1 if(IRIS_TgtPos==IRIS_CurPos)
457 1 {
458 2 L_IRIS_Run_Flag=0x00;
459 2 R_IRIS_Run_Flag=0x00;
460 2 return;
461 2 }
462 1 else if(IRIS_TgtPos>IRIS_CurPos)
463 1 {
464 2 UpdataCurPos();
465 2 IRIS_RUN=1;
466 2
467 2 while(R_IRIS_Run_Flag==0xFF)
468 2 {
469 3 IRIS_DIR=0; // 目标地址大于当前地址,光圈应减小,电机向右转
470 3 for(i=0;i<unPulseHigh;i++);
471 3 {}
472 3
473 3 IRIS_DIR=1; //停止
474 3 for(i=0;i<unPulseLow;i++);
475 3 {}
476 3
477 3 UpdataCurPos();
478 3 if((IRIS_TgtPos<=IRIS_CurPos)&&(R_IRIS_Run_Flag==0xFF))
479 3 {
480 4 IRIS_RUN=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -