⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 Keil C51编写的Aduc812的完整代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -