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

📄 main1.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 208   2                      default:                break;
 209   2              }
 210   1              if(ans==0)
 211   1              {
 212   2                      POINTER1=0;
 213   2                      RSUM=0;
 214   2                      r_byte_nums=4;
 215   2              }
 216   1      
 217   1      }
 218          
 219          void data_type()                                                //对接收到的数据分辨类型
 220          {
 221   1              switch(rbuffer[1])
 222   1              {
 223   2                      case command:   com_type();break;
 224   2                      case answer:    R_ANSW=rbuffer[2];break;
 225   2                      case err_infor: err=rbuffer[3];break;
 226   2      /*
 227   2                      case infor_sec: {
 228   2                                              nonce_sec=rbuffer[2];
 229   2      
 230   2                                      }break;
 231   2      */
 232   2                      case edit_sec:  {
 233   3      //                                      if(in_sector==0)
 234   3      //                                      {
 235   3      //                                              nonce_sec=rbuffer[2];
 236   3      //                                              in_sector=1;
 237   3      //                                      }
 238   3                                      p_received=1;
 239   3                                      }break;
 240   2      /*
 241   2                      case parameter: {
C51 COMPILER V7.06   MAIN1                                                                 09/22/2005 14:53:59 PAGE 5   

 242   2                                              param=1;
 243   2      
 244   2                                      }break;
 245   2      */
 246   2      /*
 247   2                      case program:
 248   2                                      if(work==0||work==1)
 249   2                                      {
 250   2                                              PRG=rbuffer[3];
 251   2                                              change_prg=1;
 252   2                                              save_prg();                                                                                     //将程序号存入EEPROM
 253   2                                      }break;
 254   2      */
 255   2                      case infor:     {
 256   3                                              switch(rbuffer[2])
 257   3                                              {
 258   4      /*                                              case com_sector:        nonce_sec=rbuffer[3];break;
 259   4                                                      case com_copyEXP:       {
 260   4                                                                                      PRG=rbuffer[2];                 //假设为当前程序号
 261   4                                                                                      toPRG=rbuffer[3];               //目的程序号
 262   4                                                                                      copy=1;
 263   4                                                                              }break;
 264   4      */
 265   4                                                      case com_calling:       R_ANSW=rbuffer[3];break;
 266   4                                                      case com_switch:        {
 267   5                                                                                      YOUHU=rbuffer[3];
 268   5                                                                                      WIRE=rbuffer[4];
 269   5                                                                              }break;
 270   4                                                      case com_weld_simu:     if(rc_forbided==1)
 271   4                                                                              {
 272   5                                                                                      YOUHU=rbuffer[3];
 273   5                                                                                      new_switch1=1;
 274   5                                                                              }break;
 275   4                                                      case com_wire_on_off:   if(rc_forbided==1)
 276   4                                                                              {
 277   5                                                                                      WIRE=rbuffer[3];
 278   5                                                                                      new_switch2=1;
 279   5                                                                              }break;
 280   4                                                      default:break;
 281   4                                              }
 282   3                                      }break;
 283   2                      case p_out_sec: p_received=1;break;
 284   2      //              case p_in_sec:  p_received=1;break;
 285   2                      default:        break;
 286   2              }
 287   1      }
 288          
 289          void EX0_INT (void) interrupt 0
 290          {
 291   1              EX0=0;
 292   1              urgent_stop=1;
 293   1              err=1;
 294   1      }
 295          
 296          void T1_INT (void) interrupt 3
 297          {
 298   1      //      EA=0;
 299   1              c_t1++;
 300   1              if(send==1)
 301   1              {
 302   2                      if(c_t1==7)
 303   2                      {
C51 COMPILER V7.06   MAIN1                                                                 09/22/2005 14:53:59 PAGE 6   

 304   3                              if(s_p==0)
 305   3                                      SBUF=sbuffer[POINTER0];
 306   3                              else
 307   3                                      SBUF=sbuffer1[POINTER0];
 308   3                              c_t1=0;
 309   3                      }
 310   2              }
 311   1              else
 312   1              {
 313   2                      if(c_t1==100)
 314   2                      {
 315   3                              TR1=0;
 316   3                              overtime=1;
 317   3                      }
 318   2              }
 319   1      //      EA=1;
 320   1      }
 321          
 322          void TR_INT (void) interrupt 4                                  //串行口中断
 323          {
 324   1              EA=0;                                                   //关中断
 325   1              if(TI==1)                                               //发送完成
 326   1              {
 327   2                      TI=0;
 328   2                      POINTER0++;                                     //发送缓冲指针加1
 329   2      //              if(POINTER0==1)
 330   2      //                      TB8=0;
 331   2                      if(POINTER0<s_byte_nums)
 332   2                      {
 333   3                              if(POINTER0<s_byte_nums-1)
 334   3                              {
 335   4                                      if(s_p==1)
 336   4                                              SSUM=SSUM+sbuffer1[POINTER0];
 337   4                                      else
 338   4                                              SSUM=SSUM+sbuffer[POINTER0];    //6个数据字节求和
 339   4                              }
 340   3                              else
 341   3                              {
 342   4                                      if(s_p==1)
 343   4                                              sbuffer1[s_byte_nums-1]=SSUM+sbuffer1[0];
 344   4                                      else
 345   4                                              sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
 346   4                              }
 347   3                      }
 348   2              }
 349   1      
 350   1              if(RI==1)                                               //接收完成
 351   1              {
 352   2                      RI=0;
 353   2                      POINTER1++;                             //接收缓冲指针加1
 354   2                      rbuffer[POINTER1-1]=SBUF;               //从接收缓冲读出数据
 355   2                      if(POINTER1==2)
 356   2                              r_byte_nums=get_byte_nums(rbuffer[1]);
 357   2                      if(POINTER1<r_byte_nums)
 358   2                              RSUM=RSUM+rbuffer[POINTER1-1];  //生成校验码
 359   2                      else
 360   2                      {
 361   3                              if(rbuffer[r_byte_nums-1]==RSUM)
 362   3                              {
 363   4                                      if(ans==0)
 364   4                                      {
 365   5                                              POINTER1=0;
C51 COMPILER V7.06   MAIN1                                                                 09/22/2005 14:53:59 PAGE 7   

 366   5                                              RSUM=0;
 367   5                                      }
 368   4                                      S_ANSW=OK;
 369   4                                      data_type();
 370   4                              }
 371   3                              else
 372   3                              {
 373   4                                      S_ANSW=FAIL;
 374   4                                      if(resend==0)
 375   4                                              resend=1;
 376   4                              }
 377   3                      }
 378   2              }
 379   1              EA=1;                                       //开中断
 380   1      }
 381          
 382          main()
 383          {
 384   1      uchar i,j,delt;
 385   1      
 386   1              TMOD=0x22;                      //定时器1,方式2;
 387   1              TL1=0XFD;                       //波特率9600
 388   1              TH1=0XFD;
 389   1              TR1=1;                          //启动定时器
 390   1      //      PCON=0X80;                      //SMOD=1;
 391   1              TMOD=0x23;                      //定时器0,方式3,两个8位定时器;
 392   1              TR1=0;
 393   1              TF1=0;
 394   1              SCON=0X50;                      //串口方式1,SM2=0,REN=1,TB8=1,RB8=0,TI=0,RI=0
 395   1              IP=0X98;                        //S0=1,T1=1
 396   1      //      EX0=1;                          //急停
 397   1              ES=1;                           //开串口中断
 398   1              ET1=1;
 399   1              EA=1;                           //中断总允许
 400   1              
 401   1              temp_c=0;
 402   1      
 403   1              pc_ok=0;
 404   1              urgent_stop=0;
 405   1              main1_err=0;
 406   1              p_forbid=0;
 407   1              rc_forbid=0;
 408   1              p_active=0;
 409   1              rc_active=0;
 410   1              p_forbided=0;
 411   1              rc_forbided=0;
 412   1              p_actived=0;
 413   1              rc_actived=0;
 414   1      
 415   1      BEGIN:
 416   1      /*      if(urgent_stop==1)
 417   1              {
 418   1                      EX0=1;
 419   1                      stop=1;
 420   1                      urgent_stop=0;
 421   1              }
 422   1      */
 423   1              pc_stop=0;

⌨️ 快捷键说明

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