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

📄 avc_1027.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 248   1              {
 249   2                      message_enable=1;                               //关发送使能
 250   2                      POINTER1=0;
 251   2                      RSUM=0;
 252   2                      r_byte_nums=4;
 253   2                      gate=0;
 254   2                      temp_voltage=1;
 255   2                      externel_voltage=0;
 256   2                      AD1=0;
 257   2                      AD2=0;
 258   2                      AD3=0;
 259   2                      AD4=0;
 260   2                      AD5=0;
 261   2                      U51=0;
 262   2              }
 263   1              while(err_ok==0)
 264   1              {
 265   2                      if(called==1)
 266   2                      {
 267   3                              if(avc_err==0)
 268   3                              {
 269   4                                      ini_sbuf(M_main,answer,OK,0,0,0);
 270   4                                      s_byte_nums=4;
 271   4                                      TR_noans();
 272   4                              }
 273   3                              else
 274   3                              {
 275   4                                      ini_sbuf(M_main,err_infor,M_AVC,err,0,0);
 276   4                                      s_byte_nums=5;
 277   4                                      TR_noans();
 278   4                                      avc_err=0;
 279   4                                      err=0;
 280   4                                      stop=1;
 281   4                              }
 282   3                              called=0;
 283   3                      }
 284   2              }
 285   1      
 286   1              urgent_stop=1;
 287   1      }
 288          
 289          void EX1_INT (void) interrupt 2
 290          {
 291   1              unsigned char get_err;
 292   1              EX1=0;
 293   1              err=0;
 294   1              get_err=P5;
 295   1              get_err=get_err&0x40;
 296   1              if(get_err==0)
 297   1              {
 298   2                      gate=0;
 299   2                      if(touched==0)
 300   2                      {               
 301   3                              err=18; //工件短路
 302   3                              lamp=lamp|0x08;
 303   3                              write_8574(lamp);
C51 COMPILER V7.06   AVC_1027                                                              09/11/2006 08:22:21 PAGE 6   

 304   3                      }
 305   2                      else
 306   2                      {
 307   3                              ini_sbuf(M_main,command,com_touch_ok,0,0,0);
 308   3                              s_byte_nums=4;
 309   3                              TR_noans();
 310   3                      }
 311   2                      lift=1;
 312   2                      if(work==3)
 313   2                      {
 314   3                              if(touched==0)
 315   3                              {
 316   4                                      externel_voltage=0;
 317   4                                      COM=0X36;                                       //弧长点动速度,1K
 318   4                                      COUNT0=4000%256;
 319   4                                      COUNT0=4000/256;
 320   4                                      COM=0X76;
 321   4                                      COUNT1=c_lift%256;
 322   4                                      COUNT1=c_lift/256;
 323   4                              }                               //弧长采样脉冲,1K
 324   3                              
 325   3                              avc_dir=1;                                      //弧长方向——上
 326   3                              avc_enable=0;           //开弧长使能
 327   3                              CTCON=CTCON|0X01;       //CT0下降沿
 328   3                              IEN1=IEN1|0X01;
 329   3                              gate=1;
 330   3                              while(lift_complete==0);
 331   3                              lift_complete=0;
 332   3                              lift=0;
 333   3                      }
 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=16;                 //弧长下限位
 342   3                              lamp=lamp|0x02;
 343   3                              write_8574(lamp);
 344   3                      }
 345   2                      else
 346   2                      {
 347   3                              get_err=P5;
 348   3                              get_err=get_err&0x10;
 349   3                              if(get_err==0)
 350   3                              {
 351   4                                      err=17;         //弧长过流
 352   4                                      lamp=lamp|0x04;
 353   4                                      write_8574(lamp);
 354   4                              }
 355   3                              else
 356   3                              {
 357   4                                      get_err=P5;
 358   4                                      get_err=get_err&0x04;
 359   4                                      if(get_err==0)
 360   4                                      {
 361   5                                              err=15;                         //弧长上限位
 362   5                                              lamp=lamp|0x01;
 363   5                                              write_8574(lamp);
 364   5                                      }
 365   4                              }
C51 COMPILER V7.06   AVC_1027                                                              09/11/2006 08:22:21 PAGE 7   

 366   3                      }
 367   2              }
 368   1              SSUM=0;
 369   1              POINTER1=0;
 370   1              r_byte_nums=4;
 371   1              if(err!=0)
 372   1              {
 373   2                      if(work==3)
 374   2                      {
 375   3                              
 376   3                              avc_err=1;
 377   3                              lift=0;
 378   3                              stop=0;
 379   3                      }
 380   2              }
 381   1              else
 382   1      //      {
 383   1      //              if(touched==1)
 384   1      //                      touched=0;
 385   1      //              else
 386   1                              EX1=1;
 387   1      //      }
 388   1      }
 389          
 390          void T1_INT (void) interrupt 3
 391          {
 392   1              c_t1++;
 393   1              if(send==1)
 394   1              {
 395   2                      if(c_t1==7)
 396   2                      {
 397   3                              S0BUF=sbuffer[POINTER0];
 398   3                              c_t1=0;
 399   3                      }
 400   2              }
 401   1              else
 402   1              {
 403   2                      if(c_t1==100)
 404   2                      {
 405   3                              TR1=0;
 406   3                              overtime=1;
 407   3                      }
 408   2              }
 409   1      }
 410          
 411          void TR_INT (void) interrupt 4                                  //串行口中断
 412          {                                                       //关中断
 413   1              if(TI==1)                                               //发送完成
 414   1              {
 415   2                      TI=0;
 416   2                      POINTER0++;
 417   2                      if(POINTER0<s_byte_nums-1)
 418   2                              SSUM=SSUM+sbuffer[POINTER0];    //6个数据字节求和
 419   2                      else
 420   2                              sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
 421   2                      if(POINTER0==s_byte_nums)
 422   2                              REN=1;
 423   2              }
 424   1      
 425   1              if(RI==1)                                               //接收完成
 426   1              {
 427   2                      RI=0;
C51 COMPILER V7.06   AVC_1027                                                              09/11/2006 08:22:21 PAGE 8   

 428   2                      POINTER1++;                     //接收缓冲指针加1
 429   2                      rbuffer[POINTER1-1]=S0BUF;              //从接收缓冲读出数据
 430   2                      if(rbuffer[0]==M_AVC||rbuffer[0]==M_ALL||rbuffer[0]==M_AVC_P)
 431   2                      {
 432   3                              SM2=0;
 433   3                              if(POINTER1==2)
 434   3                                      r_byte_nums=get_byte_nums(rbuffer[1]);
 435   3                              if(POINTER1<r_byte_nums)
 436   3                                      RSUM=RSUM+rbuffer[POINTER1-1];  //生成校验码
 437   3                              else
 438   3                              {
 439   4                                      SM2=1;
 440   4                                      if(RSUM==rbuffer[r_byte_nums-1])
 441   4                                      {
 442   5                                              if(ans==0)
 443   5                                              {
 444   6                                                      POINTER1=0;
 445   6                                                      RSUM=0;
 446   6                                              }
 447   5                                              S_ANSW=OK;
 448   5                                              data_type();
 449   5                                      }
 450   4                                      else
 451   4                                      {
 452   5                                              S_ANSW=FAIL;
 453   5                                              if(resend==0)
 454   5                                                      resend=1;
 455   5                                      }
 456   4                              }
 457   3      
 458   3                      }
 459   2                      else
 460   2                              POINTER1=0;
 461   2              }                                       //开中断
 462   1      }
 463          
 464          void S1_int (void) interrupt 5      //I2C
 465          {
 466   1         if (S1STA==0x00)
 467   1                 {
 468   2                  FF=1;
 469   2                  S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 470   2                 }
 471   1         if (S1STA==0x08)
 472   1                 {
 473   2                  S1DAT=SLA;
 474   2                  S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 475   2                 }
 476   1         if (S1STA==0x10)
 477   1                 {
 478   2                  S1DAT=SLA;
 479   2                  S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 480   2                 }
 481   1         if (S1STA==0x18)
 482   1                 {
 483   2                  S1DAT=COMM;
 484   2                  S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 485   2                 }
 486   1         if (S1STA==0x20)
 487   1                 {
 488   2                  FF=1;
 489   2                  S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
C51 COMPILER V7.06   AVC_1027                                                              09/11/2006 08:22:21 PAGE 9   

 490   2                 }
 491   1         if (S1STA==0x28)
 492   1                 {
 493   2                  S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 494   2                  FF=1;
 495   2                 }
 496   1         if (S1STA==0x30)
 497   1                 {
 498   2                  FF=1;
 499   2                  S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 500   2                 }
 501   1         if (S1STA==0x38)
 502   1                 {
 503   2                  S1CON=0xE5; //STA=1   STO=0    SI=0     AA=1

⌨️ 快捷键说明

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