main.lst

来自「遥控避障寻线开发板」· LST 代码 · 共 472 行 · 第 1/2 页

LST
472
字号
 222   1          IAP_CONTR = 0x80;  //允许ISP/IAP操作
 223   1          read_sensors(ad_datas_check);
 224   1      
 225   1          IAP_ADDRL = 0;
 226   1          IAP_CMD = 0x03;  //擦除flash
 227   1          IAP_TRIG = 0x5A;
 228   1          IAP_TRIG = 0xA5;  //启动IAP操作
 229   1          _nop_();
 230   1      
 231   1          IAP_CMD = 0x10;  //写flash
 232   1      
 233   1          for (i = 0; i < 8; i++) {
 234   2              IAP_ADDRL = i;
 235   2              IAP_DATA = ad_datas_check[i];
 236   2      //com_putchar(IAP_DATA);
 237   2              crc += ad_datas_check[i];
 238   2              IAP_CMD = 0x02;  //写flash
 239   2              IAP_TRIG = 0x5A;
 240   2              IAP_TRIG = 0xA5;  //启动IAP操作
 241   2              _nop_();
C51 COMPILER V7.50   MAIN                                                                  11/10/2010 15:11:26 PAGE 5   

 242   2          }
 243   1      
 244   1          IAP_ADDRL = 8;
 245   1          IAP_DATA = crc;
 246   1          IAP_TRIG = 0x5A;
 247   1          IAP_TRIG = 0xA5;  //启动IAP操作
 248   1          _nop_();
 249   1      
 250   1      
 251   1          IAP_CONTR = 0;    //禁止IAP,防止误操作
 252   1          IAP_CMD = 0;
 253   1          IAP_TRIG = 0;
 254   1          IAP_ADDRH = 0xff;
 255   1          IAP_ADDRL = 0xff;
 256   1      }
 257          
 258          void time0_isr() interrupt 1
 259          {
 260   1          tick++;
 261   1          pwm38k++;
 262   1          if (pwm38k == 0)
 263   1          {
 264   2              front_signal = 0;
 265   2              back_signal = 0;
 266   2              left_signal = 0;
 267   2              right_signal = 0;
 268   2          } else if (pwm38k == TEST_PERIOD)
 269   1          {
 270   2      //com_putchar(check);
 271   2              if (front_signal >= IR_VALID_THROLD)
 272   2              {
 273   3                  front_obj = 1;
 274   3              } else
 275   2                  front_obj = 0;
 276   2      
 277   2              if (back_signal >= IR_VALID_THROLD)
 278   2              {
 279   3                  back_obj = 1;
 280   3              } else
 281   2                  back_obj = 0;
 282   2      
 283   2              if (left_signal >= IR_VALID_THROLD)
 284   2              {
 285   3                  left_obj = 1;
 286   3              } else
 287   2                  left_obj = 0;
 288   2      
 289   2              if (right_signal >= IR_VALID_THROLD)
 290   2              {
 291   3                  right_obj = 1;
 292   3              } else
 293   2                  right_obj = 0;
 294   2      
 295   2              pwm38k = 0xFFFF;
 296   2              return;
 297   2          }
 298   1      
 299   1          if (pwm38k == 0)
 300   1          {
 301   2              IR_OUT = 1;
 302   2              test = 0;
 303   2          } else if (pwm38k == IR_SINGAL_PERIOD)
C51 COMPILER V7.50   MAIN                                                                  11/10/2010 15:11:26 PAGE 6   

 304   1          {
 305   2              IR_OUT = 0;
 306   2          }
 307   1      
 308   1      //    if (!test && !IR_FRONT)  //调试接收管的延迟
 309   1      //    {
 310   1      //        test = 1;
 311   1      //        com_putchar(tick);
 312   1      //    }
 313   1      
 314   1          if (pwm38k >= IR_SINGAL_DELAY && pwm38k < IR_SINGAL_DELAY + IR_SINGAL_PERIOD)
 315   1          {
 316   2              if (!IR_FRONT)
 317   2                  front_signal++;
 318   2              else
 319   2              {
 320   3                  if (front_signal)
 321   3                      front_signal--;
 322   3              }
 323   2      
 324   2              if (!IR_BACK)
 325   2                  back_signal++;
 326   2              else
 327   2              {
 328   3                  if (back_signal)
 329   3                      back_signal--;
 330   3              }
 331   2      
 332   2              if (!IR_LEFT)
 333   2                  left_signal++;
 334   2              else
 335   2              {
 336   3                  if (left_signal)
 337   3                      left_signal--;
 338   3              }
 339   2      
 340   2              if (!IR_RIGHT)
 341   2                  right_signal++;
 342   2              else
 343   2              {
 344   3                  if (right_signal)
 345   3                      right_signal--;
 346   3              }
 347   2          }
 348   1      
 349   1              if (pwm_moto == 0)
 350   1              {
 351   2                  if (pwm_moto_left > 0)
 352   2                  {
 353   3                      if (moto_left_forward)
 354   3                          MOTO_IN_A2 = 1;
 355   3                      else
 356   3                          MOTO_IN_A1 = 1;
 357   3                  } else
 358   2                  {
 359   3                      MOTO_IN_A1 = 0;
 360   3                      MOTO_IN_A2 = 0;
 361   3                  }
 362   2                  if (pwm_moto_right > 0)
 363   2                  {
 364   3                      if (moto_right_forward)
 365   3                          MOTO_IN_B2 = 1;
C51 COMPILER V7.50   MAIN                                                                  11/10/2010 15:11:26 PAGE 7   

 366   3                      else
 367   3                          MOTO_IN_B1 = 1;
 368   3                  } else
 369   2                  {
 370   3                      MOTO_IN_B1 = 0;
 371   3                      MOTO_IN_B2 = 0;
 372   3                  }
 373   2              } else
 374   1              {
 375   2                  if (pwm_moto == pwm_moto_left)
 376   2                  {
 377   3                      MOTO_IN_A1 = 0;
 378   3                      MOTO_IN_A2 = 0;
 379   3                  }
 380   2                  if (pwm_moto == pwm_moto_right)
 381   2                  {
 382   3                      MOTO_IN_B1 = 0;
 383   3                      MOTO_IN_B2 = 0;
 384   3                  }
 385   2              }
 386   1              pwm_moto++;
 387   1      }
 388          
 389          void time0_initialize(void)
 390          {
 391   1          TMOD &= ~0x0F;      /* clear timer 0 mode bits */
 392   1          TMOD |= 0x02;       /* put timer 0 into MODE 2 */
 393   1          AUXR |= 0x80;       // timer0工作在1T模式
 394   1              TH0 = 256 - XTAL / 2L / 38400L;  // 256 - XTAL/T1_12/f, f=输出时钟频率 
 395   1              TL0 = 0x0;
 396   1      
 397   1          WAKE_CLKO = 0x01;  // T0在P3.4上输出时钟.
 398   1      
 399   1          PT0 = 1;            /* 时钟0中断高优先级 */
 400   1              TR0 = 1;            //
 401   1              ET0 = 1;
 402   1      }
 403          
 404          static void wakeup (void) interrupt 2
 405          {
 406   1      
 407   1      }
 408          
 409          
 410          static void pca_isr (void) interrupt 6
 411          {
 412   1          unsigned char i, j;
 413   1      
 414   1          if (CCF0) {
 415   2              CCF0 = 0;   //清PCA1中断标志
 416   2              LED1 = IR_BACK;
 417   2              if (!pca_int_count) {   //第一次收到信号
 418   3                  if (!IR_BACK) {
 419   4                      ccap1 = pca_tick * 256 + CCAP0H;
 420   4                      pca_int_count++;
 421   4                  }
 422   3              } else {                //已经收到一些信号
 423   3                   period = pca_tick * 256 + CCAP0H - ccap1;
 424   3                   ccap1 = pca_tick * 256 + CCAP0H;
 425   3      //com_putchar(period / 256);
 426   3      //com_putchar(period % 256);
 427   3      
C51 COMPILER V7.50   MAIN                                                                  11/10/2010 15:11:26 PAGE 8   

 428   3                  if (pca_int_count == 1) {
 429   4                      if (period < MIN9MS || period > MAX9MS) {  //9ms
 430   5                          pca_int_count = 0;
 431   5                          frame_dog = 0;
 432   5                      } else
 433   4                          pca_int_count++;
 434   4                  } else if (pca_int_count == 2) {
 435   4                      if (period > MIN225MS && period < MAX225MS) { //2.25ms
 436   5                          pca_int_total = 3;
 437   5                          pca_int_count++;
 438   5                      } else if (period > MIN45MS && period < MAX45MS) { //4.5ms
 439   5                          pca_int_total = 67;
 440   5                          pca_int_count++;
 441   5                      } else {
 442   5                          pca_int_count = 0;
 443   5                          frame_dog = 0;
 444   5                      }
 445   4                  } else {
 446   4                      if (IR_BACK) {
 447   5                          if (period > MIN056MS && period < MAX056MS) {  //0.56ms
 448   6                              if (pca_int_count >= pca_int_total) {  //帧接收完毕,下面进行有效性分析.
 449   7                                  if (pca_int_total == 67) { //完整信号,含有引导信号,设备码8bit,设备反码8bit,命

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?