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

📄 main1_1.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 220   3                                      p_received=1;
 221   3                                      }break;
 222   2      /*
 223   2                      case parameter: {
 224   2                                              param=1;
 225   2      
 226   2                                      }break;
 227   2      */
 228   2      /*
 229   2                      case program:
 230   2                                      if(work==0||work==1)
 231   2                                      {
 232   2                                              PRG=rbuffer[3];
 233   2                                              change_prg=1;
 234   2                                              save_prg();                                                                                     //将程序号存入EEPROM
 235   2                                      }break;
 236   2      */
 237   2                      case infor:     {
 238   3                                              switch(rbuffer[2])
 239   3                                              {
 240   4      /*                                              case com_sector:        nonce_sec=rbuffer[3];break;
 241   4                                                      case com_copyEXP:       {
C51 COMPILER V7.06   MAIN1_1                                                               09/23/2005 08:16:18 PAGE 5   

 242   4                                                                                      PRG=rbuffer[2];                 //假设为当前程序号
 243   4                                                                                      toPRG=rbuffer[3];               //目的程序号
 244   4                                                                                      copy=1;
 245   4                                                                              }break;
 246   4      */
 247   4                                                      case com_calling:       R_ANSW=rbuffer[3];break;
 248   4                                                      case com_switch:        {
 249   5                                                                                      YOUHU=rbuffer[3];
 250   5                                                                                      WIRE=rbuffer[4];
 251   5                                                                              }break;
 252   4                                                      case com_weld_simu:     {
 253   5                                                                                      //YOUHU=rbuffer[3];
 254   5                                                                                      new_switch1=1;
 255   5                                                                              }break;
 256   4                                                      case com_wire_on_off:   {
 257   5                                                                                      //WIRE=rbuffer[3];
 258   5                                                                                      new_switch2=1;
 259   5                                                                              }break;
 260   4                                                      case com_delt_switch:   new_switch3=1;;break;
 261   4                                                      default:break;
 262   4                                              }
 263   3                                      }break;
 264   2                      case p_out_sec: p_received=1;break;
 265   2      //              case p_in_sec:  p_received=1;break;
 266   2                      default:        break;
 267   2              }
 268   1      }
 269          
 270          void EX0_INT (void) interrupt 0
 271          {
 272   1              EX0=0;
 273   1              urgent_stop=1;
 274   1      //      err_ok=0;
 275   1      }
 276          
 277          void T1_INT (void) interrupt 3
 278          {
 279   1      //      EA=0;
 280   1              c_t1++;
 281   1              if(send==1)
 282   1              {
 283   2                      if(c_t1==7)
 284   2                      {
 285   3                              if(s_p==0)
 286   3                                      SBUF=sbuffer[POINTER0];
 287   3                              else
 288   3                                      SBUF=sbuffer1[POINTER0];
 289   3                              c_t1=0;
 290   3                      }
 291   2              }
 292   1              else
 293   1              {
 294   2                      if(c_t1==100)
 295   2                      {
 296   3                              TR1=0;
 297   3                              overtime=1;
 298   3                      }
 299   2              }
 300   1      //      EA=1;
 301   1      }
 302          
 303          void TR_INT (void) interrupt 4                                  //串行口中断
C51 COMPILER V7.06   MAIN1_1                                                               09/23/2005 08:16:18 PAGE 6   

 304          {
 305   1              EA=0;                                                   //关中断
 306   1              if(TI==1)                                               //发送完成
 307   1              {
 308   2                      TI=0;
 309   2                      POINTER0++;                                     //发送缓冲指针加1
 310   2      //              if(POINTER0==1)
 311   2      //                      TB8=0;
 312   2                      if(POINTER0<s_byte_nums)
 313   2                      {
 314   3                              if(POINTER0<s_byte_nums-1)
 315   3                              {
 316   4                                      if(s_p==1)
 317   4                                              SSUM=SSUM+sbuffer1[POINTER0];
 318   4                                      else
 319   4                                              SSUM=SSUM+sbuffer[POINTER0];    //6个数据字节求和
 320   4                              }
 321   3                              else
 322   3                              {
 323   4                                      if(s_p==1)
 324   4                                              sbuffer1[s_byte_nums-1]=SSUM+sbuffer1[0];
 325   4                                      else
 326   4                                              sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
 327   4                              }
 328   3                      }
 329   2              }
 330   1      
 331   1              if(RI==1)                                               //接收完成
 332   1              {
 333   2                      RI=0;
 334   2                      POINTER1++;                             //接收缓冲指针加1
 335   2                      rbuffer[POINTER1-1]=SBUF;               //从接收缓冲读出数据
 336   2                      if(POINTER1==2)
 337   2                              r_byte_nums=get_byte_nums(rbuffer[1]);
 338   2                      if(POINTER1<r_byte_nums)
 339   2                              RSUM=RSUM+rbuffer[POINTER1-1];  //生成校验码
 340   2                      else
 341   2                      {
 342   3                              if(rbuffer[r_byte_nums-1]==RSUM)
 343   3                              {
 344   4                                      if(ans==0)
 345   4                                      {
 346   5                                              POINTER1=0;
 347   5                                              RSUM=0;
 348   5                                      }
 349   4                                      S_ANSW=OK;
 350   4                                      data_type();
 351   4                              }
 352   3                              else
 353   3                              {
 354   4                                      S_ANSW=FAIL;
 355   4                                      if(resend==0)
 356   4                                              resend=1;
 357   4                              }
 358   3                      }
 359   2              }
 360   1              EA=1;                                       //开中断
 361   1      }
 362          
 363          main()
 364          {
 365   1      uchar i,j,delt,temp_pc,temp_delt,c_err,anum,snum,axis[]={M_current,M_RW,M_OSC,M_AVC};
C51 COMPILER V7.06   MAIN1_1                                                               09/23/2005 08:16:18 PAGE 7   

 366   1      
 367   1              TMOD=0x22;                      //定时器1,方式2;
 368   1              TL1=0XFD;                       //波特率9600
 369   1              TH1=0XFD;
 370   1              TR1=1;                          //启动定时器
 371   1      //      PCON=0X80;                      //SMOD=1;
 372   1              TMOD=0x23;                      //定时器0,方式3,两个8位定时器;
 373   1              TR1=0;
 374   1              TF1=0;
 375   1              SCON=0X50;                      //串口方式1,SM2=0,REN=1,TB8=1,RB8=0,TI=0,RI=0
 376   1              IP=0X98;                        //S0=1,T1=1
 377   1      //      EX0=1;                          //急停
 378   1              ES=1;                           //开串口中断
 379   1              ET1=1;
 380   1              EX0=1;
 381   1              EA=1;                           //中断总允许
 382   1              
 383   1              temp_c=0;
 384   1      
 385   1              pc_ok=0;
 386   1              urgent_stop=0;
 387   1              main1_err=0;
 388   1              p_forbid=0;
 389   1              rc_forbid=0;
 390   1              p_active=0;
 391   1              rc_active=0;
 392   1              p_forbided=0;
 393   1              rc_forbided=0;
 394   1              p_actived=0;
 395   1              rc_actived=0;
 396   1      
 397   1      BEGIN:
 398   1              if(urgent_stop==1)
 399   1              {               
 400   2                      urgent_stop=0;
 401   2                      EX0=1;
 402   2              }
 403   1      
 404   1              pc_stop=0;
 405   1              urgent_stop=0;
 406   1              err_ok=1;
 407   1              work=0;
 408   1              start=0;
 409   1              err=0;                          //错误编号
 410   1              editing=0;                      //正在编程
 411   1              edit_finish=0;                  //编程结束
 412   1              p_received=0;
 413   1      //      edited=0;                       //进行过编程操作
 414   1              change_prg=0;
 415   1              connect=0;
 416   1              break_connect=0;
 417   1              in_sector=0;
 418   1              nonce_sec=0;                    //当前区间号
 419   1              FINISH=0;
 420   1              CURRENT=0;
 421   1              VOLTAGE=0;
 422   1              AVC=0;
 423   1              decrease=0;
 424   1              rot_front=0;
 425   1              rot_reverse=0;
 426   1              wire_add=0;
 427   1              wire_dec=0;
C51 COMPILER V7.06   MAIN1_1                                                               09/23/2005 08:16:18 PAGE 8   

 428   1              osc_l=0;
 429   1              osc_r=0;
 430   1              avc_up=0;
 431   1              avc_down=0;
 432   1              temp_motor_stop=0;
 433   1              motor_stop=0;
 434   1              new_switch1=0;
 435   1              new_switch2=0;
 436   1              new_switch3=0;
 437   1              start_again=0;
 438   1      
 439   1              POINTER0=0;
 440   1              SSUM=0;
 441   1              S_ANSW=0;
 442   1              POINTER1=0;
 443   1              RSUM=0;
 444   1              ans=0;
 445   1              R_ANSW=0;

⌨️ 快捷键说明

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