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

📄 text1.lst

📁 一个二维的太阳能跟踪平台的源代码
💻 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 + -