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

📄 user.lst

📁 Philips单片机P89C51RD和西门子Profibus工业总线的接口程序,硬件是鼎实公司的实验板,使用的鼎实公司的总线桥.
💻 LST
📖 第 1 页 / 共 3 页
字号:
 227   2        if ((PP03==1)&&(key11==0)) { di11=~di11;};
 228   2        if ((PP04==1)&&(key12==0)) { di12=~di12;};
 229   2        if ((PP05==1)&&(key13==0)) { di13=~di13;};
 230   2        if ((PP06==1)&&(key14==0)) { di14=~di14;};
 231   2        if ((PP07==1)&&(key15==0)) { di15=~di15;};
 232   2        key8_15=PP0;
 233   2       };
 234   1      in8_15=1;
 235   1      inled8_15=0;
 236   1      P0=di8_15;
 237   1      P0=di8_15;
 238   1      P0=di8_15;
 239   1      P0=di8_15;
 240   1      inled8_15=1;
 241   1      inled8_15=0;
 242   1      }
 243          
 244          
 245          /*========================================================================================================
             -==========*/
 246          /*                                                主程序                                                  
             -          */
 247          /*--------------------------------------------------------------------------------------------------------
             -----------*/
 248          
 249          void    main ()
 250          {   
 251   1      
 252   1      UBYTE data i,j,k,x,y,count,frist;
 253   1      UWORD data nw,nn; 
 254   1      UBYTE xdata * data p;                                      /*  xdata指针  */
 255   1      UBYTE data address;                        /*---------从站地址                            ---------*/
 256   1      UBYTE data re_er;                          /*---------字符偶校验错                        ---------*/
 257   1      UBYTE data br_num;                         /*---------串口波特率号                        ---------*/
 258   1      UBYTE data error;                          /*---------校验和错                            ---------*/
 259   1      UBYTE xdata rebox[113];                    /*---------串口接收缓冲                        ---------*/
 260   1      UBYTE xdata trbox[113];                    /*---------串口发送缓冲                        ---------*/
 261   1      UBYTE xdata pb_out[112];                   /*---------PROFIBUS输出数据区                  ---------*/
 262   1      UBYTE xdata pb_in[112];                    /*---------PROFIBUS输入数据区                  ---------*/
 263   1      UBYTE xdata user_prm[41];                  /*---------PROFIBUS用户参数区                  ---------*/
 264   1      UBYTE data data_in_len;                    /*---------数据交换输入(实验板发送)数据长度  ---------*/
 265   1      UBYTE data dil;                            /*---------不包括校验和的data_in_len长度       ---------*/
 266   1      UBYTE data data_out_len;                   /*---------数据交换输出(实验板接收)数据长度  ---------*/
 267   1      UBYTE data dol;                            /*---------不包括校验和的data_out_len长度      ---------*/
 268   1      UBYTE data user_prm_len;                   /*---------用户参数长度                        ---------*/     
             -            
 269   1      UBYTE data se_er;                          /*---------OEM2-SE接收数据错误类型号           ---------*/
 270   1      
 271   1      P1=0xff;
 272   1      P0=0;
 273   1      P2=0xf0;
 274   1      di0_7=di8_15=0;
 275   1      
 276   1      steout0_7(0);                             /*---------输出指示灯Q0-Q7清零                  ---------*/    
 277   1      steout8_15(0);                            /*---------输出指示灯Q8-Q15清零                 ---------*/   
 278   1      steinled0_7(0);                           /*---------输入键指示灯ILED0-ILED7清零          ---------*/   
 279   1      steinled8_15(0);                          /*---------输入键指示灯ILED8-ILED15清零         ---------*/ 
 280   1      
 281   1      /*======================================================= =====================*/
C51 COMPILER V7.20   USER                                                                  01/23/2006 13:26:51 PAGE 6   

 282   1      /*  以下是实验板上电后,检测P89C51RD2单片机内部RAM的一段输出演示程序;         */
 283   1      /*  这段程序与PROFIBUS接口板SE通信无关,用户可跳过此段程序。                   */
 284   1      /*-----------------------------------------------------------------------------*/
 285   1                      
 286   1      
 287   1      /* 这段程序在仿真器上运行的话内存检查始终不正确 */
 288   1      
 289   1      p=0;
 290   1      x=1;
 291   1      k=1;
 292   1      //共检查 24*32字节内存
 293   1      for (j=0;j<32;j++)
 294   1       {
 295   2        for (i=0;i<24;i++)
 296   2         {
 297   3          *(p+i)=0xaa;
 298   3         };
 299   2        y=0;
 300   2        for (i=0;i<24;i++)
 301   2         {
 302   3          count=*(p+i);
 303   3          if (count!=0xaa) { y=1; };
 304   3         };
 305   2        if (y==0)          /*       该段内存正确,跑流水灯       */
 306   2         {
 307   3           switch (k)
 308   3            {
 309   4             case 1:{ steout0_7(x);};break;
 310   4             case 2:{ steout8_15(x);};break;
 311   4             case 3:{ steinled0_7(x);};break;
 312   4             case 4:{ steinled8_15(x);};break;
 313   4             default:break;
 314   4            };
 315   3           if (x<255) {x=x*2+1;}else{x=1;k++;};
 316   3         }
 317   2        else             /*       该段内存不正确,四块灯全闪       */
 318   2         {
 319   3          for (;;)
 320   3           {
 321   4            for (nw=0;nw<6000;nw++)
 322   4             {
 323   5              steout0_7(0);
 324   5              steout8_15(0);
 325   5              steinled0_7(0);
 326   5              steinled8_15(0);
 327   5             };
 328   4            for (nw=0;nw<6000;nw++)
 329   4             {
 330   5              steout0_7(0xff);
 331   5              steout8_15(0xff);
 332   5              steinled0_7(0xff);
 333   5              steinled8_15(0xff);
 334   5             };
 335   4           };
 336   3         };
 337   2        p=p+24;
 338   2        for (nw=0;nw<18000;nw++)
 339   2         {};
 340   2        };
 341   1       
 342   1       
 343   1      /*---------------------------------------------------------------------*/
C51 COMPILER V7.20   USER                                                                  01/23/2006 13:26:51 PAGE 7   

 344   1      /*  实验板输出演示程序结束。                                           */
 345   1      /*=====================================================================*/
 346   1      
 347   1      steout0_7(0);                             /*---------输出指示灯Q0-Q7清零                  ---------*/    
 348   1      steout8_15(0);                            /*---------输出指示灯Q8-Q15清零                 ---------*/   
 349   1      steinled0_7(0);                           /*---------输入键指示灯ILED0-ILED7清零          ---------*/   
 350   1      steinled8_15(0);                          /*---------输入键指示灯ILED8-ILED15清零         ---------*/ 
 351   1      
 352   1      /*==============================================================*/
 353   1      /*  清串口输入缓冲区trbox[i],清串口输出缓冲区rebox[i]          */
 354   1      /*--------------------------------------------------------------*/
 355   1      for (i=0;i<113;i++)
 356   1       {
 357   2        rebox[i]=trbox[i]=0;
 358   2       };
 359   1      for (i=0;i<112;i++)
 360   1       {
 361   2        pb_in[i]=pb_out[i]=0;
 362   2       };
 363   1      
 364   1      
 365   1      
 366   1      address=rd_address();   /*---------读实验板上拨码开关,作为站号---------*/ 
 367   1      
 368   1      
 369   1      /*======================================================================*/
 370   1      /*                         以下是串口初始化程序                         */
 371   1      /*----------------------------------------------------------------------*/
 372   1      
 373   1       br_num=5;             /*---------实验板波特率选择5,115.2K-------------*/ 
 374   1      
 375   1       switch (br_num)       /*---------根据波特率号设置T2--------------------*/
 376   1          {
 377   2           case 1:{ TH2=0x0ff; TL2=0x0a0;RCAP2H=0x0ff;RCAP2L=0x0a0;};break;        /*---9.6K---*/
 378   2           case 2:{ TH2=0x0ff; TL2=0x0d0;RCAP2H=0x0ff;RCAP2L=0x0d0;};break;        /*---19.2K--*/
 379   2           case 3:{ TH2=0x0ff; TL2=0x0e8;RCAP2H=0x0ff;RCAP2L=0x0e8;};break;        /*---38.4K--*/
 380   2           case 4:{ TH2=0x0ff; TL2=0x0f0;RCAP2H=0x0ff;RCAP2L=0x0f0;};break;        /*---57.6K--*/
 381   2           case 5:{ TH2=0x0ff; TL2=0x0f8;RCAP2H=0x0ff;RCAP2L=0x0f8;};break;        /*---115.2K-*/
 382   2           case 6:{ TH2=0x0ff; TL2=0x0fc;RCAP2H=0x0ff;RCAP2L=0x0fc;};break;        /*---230.4K-*/
 383   2           case 7:{ TH2=0x0ff; TL2=0x0fe;RCAP2H=0x0ff;RCAP2L=0x0fe;};break;        /*---460.8K-*/
 384   2           default:break;
 385   2          };
 386   1       
 387   1      /*---------------------------------------------------------------------------------------*/
 388   1      /* 注意:本例基于PHILIP P89C51RD2单片机:                                                */
 389   1      /* 波特率=14745600/16/(65536-T)                                                        */
 390   1      /* 各种波特率9600:  T=0xffa0,  19.2K: T=0xffd0,   38.4K: T=0xffe8,                       */
 391   1      /*           57.6K: T=0xfff0,  115.2K:T=0xfff8,   230.4k:T=0xfffc,   460.8k=0xfffe       */
 392   1      /*---------------------------------------------------------------------------------------*/
 393   1      
 394   1      
 395   1      PCON=0;
 396   1      T2CON=0x34;               /*----RCLK=1;  TCLK=1;  TR2=1;  C/T2=0    --------------------*/
 397   1      
 398   1      /*--------------------------------------------------------------------------------------*/
 399   1      /*串口设置成模式3 即:1 个启始位、8个数据位、1个偶校验位、1个停止位;                   */   
 400   1      /* 0xd0=11010000B;  SM0SM1=11; SM2=0; REN=1;TB8=0; RB8=0; TI=0; RI=0                    */
 401   1      /*--------------------------------------------------------------------------------------*/
 402   1      
 403   1      SCON=0x0d0;        
 404   1      
 405   1      /*--------------------------------------------------------------------------------------*/
C51 COMPILER V7.20   USER                                                                  01/23/2006 13:26:51 PAGE 8   

 406   1      /*                        例2 半握手通信方式                                            */
 407   1      /*======================================================================================*/
 408   1      
 409   1      while (REQ_IT==1)        /* 定义REQ_IT=P1^7=P1.7=P17S_CTS,输入,连接OEM2-SE-REQ_IT,见实验板原理图CONNECT-16 ---*/
 410   1      {                                   
 411   2      /*====================================================================================*/
 412   2      /*                         形成接口板的初始化报文                                     */
 413   2      /*                         rebox[]是串口发送数组,格式见《SE手册》                    */
 414   2      /*------------------------------------------------------------------------------------*/
 415   2      data_in_len=48+1+1;            /*---- 输入数据报文长度=48+1+1=50;            ---------*/
 416   2      user_prm_len=0;                /*---- 用户参数长度=0                         ---------*/
 417   2      data_out_len=48+1+1;           /*---- 输入数据报文长度=48+1+1=50;            ---------*/
 418   2      trbox[0]=address;              /*---- BYTE0=从站地址                         ---------*/
 419   2      trbox[1]=0x06;                 /*---- BYTE1=ID号高位                         ---------*/ 
 420   2      trbox[2]=0x0fa;                /*---- BYTE2=ID号低位                         ---------*/
 421   2      
 422   2      /*====================================================================================*/
 423   2      /*                                  以下形成I/O配置数据                               */
 424   2      /* 本例:I/O配置数据长度=6;I/O配置数据:0x1f,0x2f,0x1f,0x2f,0x1f,0x2f                */
 425   2      /* 共:48bytes input+48bytes output                                                   */
 426   2      /*------------------------------------------------------------------------------------*/
 427   2      
 428   2      trbox[3]=6;                    /*----BYTE3=I/O配置数据长度=6                 ---------*/       
 429   2      trbox[4]=0x1f;                 /*----BYTE4=I/O配置数据:0x1f                 ---------*/
 430   2      trbox[5]=0x2f;                 /*----BYTE5=I/O配置数据:0x2f                 ---------*/
 431   2      trbox[6]=0x1f;                 /*----BYTE6=I/O配置数据:0x1f                 ---------*/
 432   2      trbox[7]=0x2f;                 /*----BYTE7=I/O配置数据:0x2f                 ---------*/
 433   2      trbox[8]=0x1f;                 /*----BYTE8=I/O配置数据:0x1f                 ---------*/
 434   2      trbox[9]=0x2f;                 /*----BYTE9=I/O配置数据:0x2f                 ---------*/
 435   2      
 436   2      
 437   2      trbox[24]=data_in_len;         /*----BYTE24=data_in_len输入数据报文长度      ---------*/   
 438   2      trbox[25]=data_out_len;        /*----BYTE25=data_out_len输出数据报文长度     ---------*/ 
 439   2      trbox[26]=user_prm_len;        /*----BYTE26=user_prm_len用户参数长度         ---------*/
 440   2      
 441   2      
 442   2      x=0;
 443   2      for (i=0;i<48;i++)
 444   2       {
 445   3        x=x+trbox[i];                /*----求校验和                                ---------*/
 446   3       
 447   3       };
 448   2      trbox[48]=x;                   /*----置校验和                                ---------*/
 449   2      
 450   2      /*====================================================================================*/
 451   2      /*         发送接口板的初始化报文、接收接口板的回答,初始不成功继续发初始化报文       */
 452   2      /*------------------------------------------------------------------------------------*/
 453   2      
 454   2      while (S_RTS==1) {};               /*---- P1.6=S_RTS=1:SE没有准备好接收     ---------*/
 455   2        
 456   2      y=0;                               /*---- 清初始化成功标志                   ---------*/
 457   2      while (y==0)
 458   2      { 
 459   3         REN=0;
 460   3         for (i=0;i<49;i++)              /*---- 发送一次初始化报文共49字节         ---------*/
 461   3          {
 462   4           TI=0;
 463   4           ACC=trbox[i];
 464   4           TB8=P;                        /*---- 形成偶校验位                       ---------*/
 465   4           SBUF=trbox[i];
 466   4           while (TI==0) {};  
 467   4          }; 
C51 COMPILER V7.20   USER                                                                  01/23/2006 13:26:51 PAGE 9   

 468   3      
 469   3      while (S_RTS==0) { };              /*---- SE 没有接收完毕                    ---------*/ 
 470   3      
 471   3         
 472   3      /*---------发送完毕、等待接收回答-----------------------------------------------------*/   
 473   3         RI=0;
 474   3         REN=1;                            /*---- 允许接收                           ---------*/
 475   3         re_er=0;                          /*---- re_er偶校验错标志                  ---------*/

⌨️ 快捷键说明

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