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

📄 main.lst

📁 遥控避障寻线开发板
💻 LST
📖 第 1 页 / 共 2 页
字号:
 223   1          IAP_CONTR = 0x80;  //允许ISP/IAP操作
 224   1          read_sensors(ad_datas_check);
 225   1      
 226   1          IAP_ADDRL = 0;
 227   1          IAP_CMD = 0x03;  //擦除flash
 228   1          IAP_TRIG = 0x5A;
 229   1          IAP_TRIG = 0xA5;  //启动IAP操作
 230   1          _nop_();
 231   1      
 232   1          IAP_CMD = 0x10;  //写flash
 233   1      
 234   1          for (i = 0; i < 8; i++) {
 235   2              IAP_ADDRL = i;
 236   2              IAP_DATA = ad_datas_check[i];
 237   2      //com_putchar(IAP_DATA);
 238   2              crc += ad_datas_check[i];
 239   2              IAP_CMD = 0x02;  //写flash
 240   2              IAP_TRIG = 0x5A;
 241   2              IAP_TRIG = 0xA5;  //启动IAP操作
C51 COMPILER V7.50   MAIN                                                                  10/28/2010 16:20:56 PAGE 5   

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

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

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

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

⌨️ 快捷键说明

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