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

📄 osc2_0929.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 227   4                                                              {
 228   5                                                                      excursion_dir=0;
 229   5                                                                      center_excursion=1;
 230   5                                                              }
 231   4                                                      }
 232   3                                              }break;
 233   2                      case com_osc_r:         {
 234   3                                                      if(work==0)                     //点动
 235   3                                                      {
 236   4                                                              if(osc_r==0)
 237   4                                                                      osc_r=1;
 238   4                                                      }
 239   3                                                      else
 240   3                                                      {
 241   4                                                              if(center_excursion==0&&judge_ok==0)
C51 COMPILER V7.06   OSC2_0929                                                             03/27/2006 17:02:25 PAGE 5   

 242   4                                                              {
 243   5                                                                      excursion_dir=1;
 244   5                                                                      center_excursion=1;
 245   5                                                              }
 246   4                                                      }
 247   3                                              }break;
 248   2      
 249   2                      case com_breadth_add:   if(osc_ok==1&&osc==0)
 250   2                                              {
 251   3                                                              osc=1;          //启动横摆
 252   3                                                              osc_change=1;
 253   3                                              }break;
 254   2                      case com_breadth_dec:   if(osc_ok==1&&osc==0)
 255   2                                              {
 256   3                                                              osc=1;          //启动横摆
 257   3                                                              osc_change=0;
 258   3                                              }break;
 259   2      
 260   2                      case com_goto_begin:    to_begin=1;break;
 261   2                      case com_err_ok:        err_ok=1;break;
 262   2                      default:                 break;
 263   2              }
 264   1      }
 265          
 266          void data_type()                                                //对接收到的数据分辨类型
 267          {
 268   1              switch(rbuffer[1])
 269   1              {
 270   2                      case command:   com_type();break;
 271   2                      case infor:     {
 272   3                                              if(rbuffer[2]==com_sector)
 273   3                                              {
 274   4                                                      in_sector=1;
 275   4                                                      new_sector=1;
 276   4                                                      nonce_sec=rbuffer[3];
 277   4                                                      K4=pp.x[nonce_sec][0];
 278   4                                              }
 279   3                                      }break;
 280   2                      case p_out_sec: receive_p_out=1;break;
 281   2      
 282   2                      case p_in_sec:  {
 283   3                                              nonce_sec=rbuffer[2];
 284   3                                              receive_p_in=1;
 285   3                                      }break;
 286   2                      default:        break;
 287   2              }
 288   1      }
 289          
 290          
 291          void EX0_INT (void) interrupt 0                 //急停
 292          {
 293   1              EX0=0;
 294   1              message_enable=1;                               //关发送使能
 295   1              REN=1;
 296   1              gate=0;
 297   1              CTCON=CTCON&0xF0;
 298   1      
 299   1              while(err_ok==0)
 300   1              {
 301   2                      if(called==1)
 302   2                      {
 303   3                              if(osc_err==0)
C51 COMPILER V7.06   OSC2_0929                                                             03/27/2006 17:02:25 PAGE 6   

 304   3                              {
 305   4                                      ini_sbuf(M_main,answer,OK,0,0,0);
 306   4                                      s_byte_nums=4;
 307   4                                      TR_noans();
 308   4                              }
 309   3                              else
 310   3                              {
 311   4                                      ini_sbuf(M_main,err_infor,M_OSC,err,0,0);
 312   4                                      s_byte_nums=5;
 313   4                                      TR_noans();
 314   4                                      osc_err=0;
 315   4                                      err=0;
 316   4                                      stop=1;
 317   4                              }
 318   3                              called=0;
 319   3                      }
 320   2              }
 321   1              urgent_stop=1;
 322   1      }
 323          
 324          void EX1_INT (void) interrupt 2
 325          {
 326   1              unsigned char get_err;
 327   1              EX1=0;
 328   1              get_err=P5;
 329   1              get_err=get_err&0x10;
 330   1              if(get_err==0)
 331   1              {
 332   2                      err=14;                 //横摆过流
 333   2                      write_8574(0xF4);
 334   2              }
 335   1              else
 336   1              {
 337   2                      get_err=P5;
 338   2                      get_err=get_err&0x08;
 339   2                      if(get_err==0)
 340   2                      {
 341   3                              err=13;         //横摆右限位
 342   3                              write_8574(0xF2);
 343   3                      }
 344   2                      else
 345   2                      {
 346   3                              get_err=P5;
 347   3                              get_err=get_err&0x04;
 348   3                              if(get_err==0)
 349   3                              {
 350   4                                      err=12; //横摆左限位
 351   4                                      write_8574(0xF1);
 352   4                              }
 353   3                      }
 354   2              }
 355   1              if(err!=0)
 356   1              {
 357   2                      osc_err=1;
 358   2                      stop=0;
 359   2              }
 360   1              else
 361   1                      EX1=1;
 362   1      }
 363                  
 364          void T1_INT (void) interrupt 3
 365          {
C51 COMPILER V7.06   OSC2_0929                                                             03/27/2006 17:02:25 PAGE 7   

 366   1              c_t1++;
 367   1              if(send==1)
 368   1              {
 369   2                      if(c_t1==7)
 370   2                      {
 371   3                              S0BUF=sbuffer[POINTER0];
 372   3                              c_t1=0;
 373   3                      }
 374   2              }
 375   1              else
 376   1              {
 377   2                      if(c_t1==100)
 378   2                      {
 379   3                              TR1=0;
 380   3                              overtime=1;
 381   3                      }
 382   2              }
 383   1      }
 384          
 385          void TR_INT (void) interrupt 4                                  //串行口中断
 386          {                                                               //关中断
 387   1              if(TI==1)                                               //发送完成
 388   1              {
 389   2                      TI=0;
 390   2                      POINTER0++;
 391   2                      if(POINTER0<s_byte_nums-1)
 392   2                              SSUM=SSUM+sbuffer[POINTER0];            //6个数据字节求和
 393   2                      else
 394   2                              sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
 395   2                      if(POINTER0==s_byte_nums)
 396   2                              REN=1;
 397   2              }
 398   1      
 399   1              if(RI==1)                                               //接收完成
 400   1              {
 401   2                      RI=0;
 402   2                      POINTER1++;                                     //接收缓冲指针加1
 403   2                      rbuffer[POINTER1-1]=S0BUF;                      //从接收缓冲读出数据
 404   2                      if(rbuffer[0]==M_OSC||rbuffer[0]==M_ALL)
 405   2                      {
 406   3                              SM2=0;
 407   3                              if(POINTER1==2)
 408   3                                      r_byte_nums=get_byte_nums(rbuffer[1]);
 409   3                              if(POINTER1<r_byte_nums)
 410   3                                      RSUM=RSUM+rbuffer[POINTER1-1];  //生成校验码
 411   3                              else
 412   3                              {
 413   4                                      SM2=1;
 414   4                                      if(RSUM==rbuffer[r_byte_nums-1])
 415   4                                      {
 416   5                                              if(ans==0)
 417   5                                              {
 418   6                                                      POINTER1=0;
 419   6                                                      RSUM=0;
 420   6                                              }
 421   5                                              S_ANSW=OK;
 422   5                                              data_type();
 423   5                                      }
 424   4                                      else
 425   4                                      {
 426   5                                              POINTER1=0;
 427   5                                              RSUM=0;
C51 COMPILER V7.06   OSC2_0929                                                             03/27/2006 17:02:25 PAGE 8   

 428   5                                              S_ANSW=FAIL;
 429   5                                              if(resend==0)
 430   5                                                      resend=1;
 431   5                                      }
 432   4                              }
 433   3      
 434   3                      }
 435   2                      else
 436   2                              POINTER1=0;
 437   2              }                                       //开中断
 438   1      }
 439          
 440          void S1_int (void) interrupt 5      //I2C
 441          {
 442   1         if (S1STA==0x00)
 443   1                 {
 444   2                  FF=1;
 445   2                  S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 446   2                 }
 447   1         if (S1STA==0x08)
 448   1                 {
 449   2                  S1DAT=SLA;
 450   2                  S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 451   2                 }
 452   1         if (S1STA==0x10)
 453   1                 {
 454   2                  S1DAT=SLA;
 455   2                  S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 456   2                 }
 457   1         if (S1STA==0x18)
 458   1                 {
 459   2                  S1DAT=COMM;

⌨️ 快捷键说明

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