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

📄 osc.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 230   3                                                      else
 231   3                                                      {
 232   4                                                              if(center_excursion==0&&judge_ok==0)
 233   4                                                              {
 234   5                                                                      excursion_dir=1;
 235   5                                                                      center_excursion=1;
 236   5                                                              }
 237   4                                                      }
 238   3                                              }break;
 239   2      
 240   2                      case com_breadth_add:   if(osc_ok==1&&osc==0)
 241   2                                              {
C51 COMPILER V7.06   OSC                                                                   06/22/2005 15:49:12 PAGE 5   

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

 304   4                                      osc_err=0;
 305   4                                      err=0;
 306   4                                      stop=1;
 307   4                              }
 308   3                              called=0;
 309   3                      }
 310   2              }
 311   1              urgent_stop=1;
 312   1      }
 313          
 314          /*
 315          void T0_INT (void) interrupt 1          //横摆起始时间(低速时间)
 316          {
 317                  TF0=0;
 318                  c_t0++;
 319                  if(c_t0==10)                    //1536us
 320                  {
 321                          TR0=0;
 322                          COM=0X36;
 323                          COUNT0=out0%256;
 324                          COUNT0=out0/256;
 325                          c_t0=0;
 326                  }
 327          }
 328          */
 329          void EX1_INT (void) interrupt 2
 330          {
 331   1              unsigned char get_err;
 332   1              EX1=0;
 333   1              get_err=P5;
 334   1              get_err=get_err&0x04;
 335   1              if(get_err==0)
 336   1                      err=12;
 337   1              else
 338   1              {
 339   2                      get_err=P5;
 340   2                      get_err=get_err&0x08;
 341   2                      if(get_err==0)
 342   2                              err=13;
 343   2                      else
 344   2                      {
 345   3                              get_err=P5;
 346   3                              get_err=get_err&0x10;
 347   3                              if(get_err==0)
 348   3                                      err=14;
 349   3                      }
 350   2              }
 351   1              if(err!=0)
 352   1              {
 353   2                      osc_err=1;
 354   2                      stop=0;
 355   2              }
 356   1              else
 357   1                      EX1=1;
 358   1      }
 359                  
 360          void T1_INT (void) interrupt 3
 361          {
 362   1              c_t1++;
 363   1              if(send==1)
 364   1              {
 365   2                      if(c_t1==7)
C51 COMPILER V7.06   OSC                                                                   06/22/2005 15:49:12 PAGE 7   

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

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

⌨️ 快捷键说明

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