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

📄 kjj19-mn.lst

📁 这是一个模拟分站的C51源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 281   2                   SIODC=0; 
 282   2                            }
 283   1             i=0;
 284   1                 bmoks=0;
 285   1                 bms=10;
 286   1             bmok=0; 
 287   1           while(i!=0x44)   //CRC码发送结束
 288   1            {   
 289   2              if (bmok==1)
 290   2              break;
 291   2              i=Z85C30_JCQRD(0X00);  //读取寄存器中的数据   
 292   2              i=i&0x44;         
 293   2              }
 294   1          Z85C30_KZJCQ(0x05,0x61);   //挂起发送
 295   1              
 296   1              SIOAB=1; //设置控制字A路接收 
 297   1              Z85C30_init_A();  //A路接受设置
 298   1              SIOAB=0;
 299   1              fzhybj=0;     //置接口回应标记
 300   1           }
 301          
 302          
 303          /************************************************************************
C51 COMPILER V8.02   KJJ19_MN                                                              10/10/2006 14:47:30 PAGE 6   

 304          串口数据处理:1、设置参数填如参数数组。
 305                        2、分站上传数据填入数据数组。
 306          ************************************************************************/
 307          void cl232(void)
 308          {
 309   1       uchar a,b;
 310   1       if(RIbuf[0]==0x55 && RIbuf[1]==0xAA)    //数据包正确
 311   1       {
 312   2         if(RIbuf[2]==0xFF && RIbuf[3]==0x00)  //如果是设置信息
 313   2         {
 314   3                switch ( RIbuf[4])   //判断命令字
 315   3                {
 316   4                      case 1:           //设置清空置0
 317   4                          IE=0X90;      //T0中断,INTO中断禁止
 318   4                              dzzs=0;
 319   4                              wxfzh[0]=0XFF;
 320   4                          HY232(1);
 321   4                              break;
 322   4                      case 2:          //添加分站     
 323   4                          a=dzzs*4;
 324   4                              wxfzh[dzzs]=RIbuf[6]; //设置分站地址
 325   4                              wxfzcs[a]=RIbuf[7];       //设置分站参数
 326   4                              wxfzcs[a+1]=RIbuf[8];
 327   4                              wxfzcs[a+2]=RIbuf[9];
 328   4                              wxfzcs[a+3]=RIbuf[10];
 329   4                              dzzs=dzzs+1;
 330   4      
 331   4                              HY232(2);
 332   4                              break;
 333   4                      case 3:          //设置结束
 334   4                          if(dzzs==RIbuf[5])
 335   4                               {
 336   5                            eeprom_clr(0x20,0x00); //擦除FALSH
 337   5                                for(a=0;a<32;a++)       //存8个分站的参数
 338   5                     {
 339   6                                       eeprom_w(0x20,a,wxfzcs[a]);
 340   6                             }
 341   5                     for(a=32;a<40;a++) //存8个分站的地址
 342   5                      {
 343   6                                       eeprom_w(0x20,a,wxfzh[a-32]);
 344   6                              }
 345   5                         eeprom_w(0x20,40,dzzs); //存设置分站数
 346   5                     a=0xff-dzzs;
 347   5                                 eeprom_w(0x20,41,a); //存设置分站数反码
 348   5                                HY232(3);
 349   5                                 }
 350   4                              r_count=0;
 351   4                              IE=0X93;    //T0中断,INTO中断开放
 352   4                              break;
 353   4                      default:
 354   4                              break;
 355   4                   }
 356   3                }
 357   2          else     //分站上传来的数据
 358   2                if(RIbuf[2]==wxfzh[wxh])       //如果分站号为刚才巡检的分站号
 359   2                       {
 360   3                         a=wxh*8;
 361   3                     for(b=0;b<8;b++)
 362   3                           {                     
 363   4                             fzsj[a+b]=RIbuf[b+3];
 364   4                                 }
 365   3                      }
C51 COMPILER V8.02   KJJ19_MN                                                              10/10/2006 14:47:30 PAGE 7   

 366   2          }
 367   1        }
 368          
 369          /************************************************************************
 370          模拟串口对无线接口的查询9个字节(0X55+0XAA+命令+1字节分站号+4字节参数+1字节累加和)
 371                  对设置的回应
 372          /***********************************************************************/ 
 373           void HY232(uchar ml)    //对无线接口的查询
 374           {
 375   1        uchar i;
 376   1        uchar ljh;    
 377   1        ljh=0;
 378   1        TIbuf[0]=0x55;     //数据包头0X55AA
 379   1        ljh=ljh+TIbuf[0];
 380   1        TIbuf[1]=0xAA;
 381   1        ljh=ljh+TIbuf[1];
 382   1        TIbuf[2]=ml;       //命令
 383   1        ljh=ljh+TIbuf[2];
 384   1        switch (ml)
 385   1        {
 386   2              case 1,2,3:              //对设置的回应
 387   2                         TIbuf[0]=0xFF;     //数据包头0XFF00
 388   2                ljh=ljh+TIbuf[0];
 389   2                TIbuf[1]=0x00;
 390   2                ljh=ljh+TIbuf[1];
 391   2                TIbuf[2]=ml;       //命令
 392   2                ljh=ljh+TIbuf[2];
 393   2                        TIbuf[3]=0X55;
 394   2                    TIbuf[4]=0;
 395   2                    TIbuf[5]=0;
 396   2                    TIbuf[6]=0;
 397   2                    TIbuf[7]=0;
 398   2                    TIbuf[8]=ljh+0X55;
 399   2                    break;
 400   2              case 4:         //下发巡检指令
 401   2                        TIbuf[3]=wxfzh[wxh];   //分站号
 402   2                    ljh=ljh+TIbuf[3];
 403   2                    i=(wxh-1)<<2;
 404   2                    TIbuf[4]=wxfzcs[i];    //4个参数
 405   2                    ljh=ljh+TIbuf[4];
 406   2                    i=i+1;
 407   2                    TIbuf[5]=wxfzh[i];
 408   2                    ljh=ljh+TIbuf[5];
 409   2                    i=i+1;
 410   2                    TIbuf[6]=wxfzh[wxh];
 411   2                    ljh=ljh+TIbuf[6];
 412   2                    i=i+1;
 413   2                    TIbuf[7]=wxfzh[wxh];
 414   2                    ljh=ljh+TIbuf[7];
 415   2                    TIbuf[8]=ljh;
 416   2                      break;
 417   2              case 5:                  //下发断电指令
 418   2                    TIbuf[3]=ddfz;   //断电分站
 419   2                    ljh=ljh+ddfz;
 420   2                    TIbuf[4]=ddcs;   //断电参数
 421   2                    ljh=ljh+ddcs;
 422   2                    TIbuf[5]=0;
 423   2                    TIbuf[6]=0;
 424   2                    TIbuf[7]=0;
 425   2                    TIbuf[8]=ljh;
 426   2                       break;
 427   2              case 6:          //下发总清指令
C51 COMPILER V8.02   KJJ19_MN                                                              10/10/2006 14:47:30 PAGE 8   

 428   2                        TIbuf[3]=0;
 429   2                    TIbuf[4]=0;
 430   2                    TIbuf[5]=0;
 431   2                    TIbuf[6]=0;
 432   2                    TIbuf[7]=0;
 433   2                    TIbuf[8]=ljh;
 434   2                      break;
 435   2              default:
 436   2                      break;
 437   2          }
 438   1      
 439   1         SBUF=TIbuf[0];     //串口发送
 440   1         tsum=1;
 441   1         }
 442          /**********************************************************************************
 443          * function:       delay_ms()                                     24M 500us延迟                                          
 444          * use:         delay x ms(Max 65535ms,)
 445          * input parameter:      unsigned int delay_counter                                                              
 446          * output parameter: none                                                                                        
 447          ***********************************************************************************/
 448          void delay_ms(uint delay_counter)
 449          {
 450   1       unsigned int data i;
 451   1              while(delay_counter--)
 452   1                {
 453   2                 i=81;
 454   2                 while(i--);
 455   2                  }
 456   1         }
 457          /***********************************************************************************
 458          * function:        Z85C30_KZJCQ()                                                                               
 459          * use:              控制寄存器设置                              
 460          * input parameter:       none                                                           
 461          * output parameter: none                                                
 462          ***********************************************************************************/
 463           void Z85C30_KZJCQ(uchar KZJCQH,uchar KZSJ)   
 464           {
 465   1       SIOCS=1;       
 466   1       SIORD=1;
 467   1       SIOWR=1;
 468   1       SIODC=0;    //选择控制
 469   1       P0=KZJCQH;
 470   1       SIOCS=0;SIOWR=0;   //选择寄存器
 471   1       _nop_();
 472   1       SIOWR=1;SIOCS=1;
 473   1        P0=KZSJ;
 474   1        SIOCS=0;SIOWR=0;
 475   1        _nop_();
 476   1       SIOWR=1; SIOCS=1; 
 477   1      
 478   1      } 
 479          
 480          /***********************************************************************************
 481          * function:        Z85C30_WR0()                                                                         
 482          * use:              控制寄存器0设置                             
 483          * input parameter:       none                                                           
 484          * output parameter: none                                                
 485          ***********************************************************************************/
 486           void Z85C30_WR0(uchar KSJ)   
 487           {
 488   1       SIOCS=1;       
 489   1       SIORD=1;
C51 COMPILER V8.02   KJJ19_MN                                                              10/10/2006 14:47:30 PAGE 9   

 490   1       SIOWR=1;
 491   1        P0=KSJ;
 492   1        SIODC=0;    //选择控制
 493   1        SIOCS=0;SIOWR=0;
 494   1        _nop_();
 495   1        SIOWR=1;SIOCS=1;
 496   1        _nop_(); 
 497   1      } 
 498           /***********************************************************************************
 499          * function:        Z85C30_JCQRD()                                                                               
 500          * use:              控制寄存器读取                              
 501          * input parameter:none                                                         
 502          * output parameter: none                                                
 503          ***********************************************************************************/
 504           uchar Z85C30_JCQRD(uchar JCQH)   
 505           {
 506   1       uchar a;
 507   1       SIOCS=1;       
 508   1       SIORD=1;
 509   1       SIOWR=1;
 510   1       SIODC=0;    //选择控制
 511   1      if(JCQH!=0)
 512   1       {
 513   2        P0=JCQH;
 514   2        SIOCS=0;SIOWR=0;   //选择寄存器
 515   2        _nop_();
 516   2        SIOWR=1;SIOCS=1;
 517   2        }
 518   1        SIOCS=0;SIORD=0;
 519   1        _nop_();
 520   1        a=P0;  //读取寄存器中的数据   
 521   1       SIORD=1;SIOCS=1;
 522   1       return a;
 523   1      } 
 524              
 525          /*********************************************************************************
 526          * function:         Z85C30_init()                                                         
 527          * use:             Z85C30初始化         
 528          * input parameter:  none                                                        
 529          * output parameter: none                                                
 530          *********************************************************************************/
 531          void Z85C30_init(void)
 532          {       
 533   1       SIOAB=1; //设置控制字A路接收
 534   1       Z85C30_KZJCQ(0x09,0x80);  //强制复位
 535   1       Z85C30_KZJCQ(0x02,0x00);  //WR2    中断向量00H
 536   1       Z85C30_KZJCQ(0x04,0x20);  //WR4   SDLC模式  
 537   1       Z85C30_KZJCQ(0x01,0x10);  //WR1   接收所有字符和特征字符中断
 538   1       Z85C30_KZJCQ(0x87,0x7E);  //WR7   SDLC同步场,复位TX_CRC生成器
 539   1       Z85C30_KZJCQ(0x46,0x00);  //WR6   SDLC地址场00H,复位RX_CRC生成器
 540   1       Z85C30_KZJCQ(0x0A,0x80);  //WR10  A通道CRC预置FF,NRZ模式
 541   1       Z85C30_KZJCQ(0x0B,0x08);  //WR11  接收时钟/RTXC,发送时钟为/RTXC
 542   1       Z85C30_KZJCQ(0x0E,0x20);  //WR14  进入地址搜索模式
 543   1       Z85C30_WR0(0x10); 
 544   1       Z85C30_WR0(0x38);  //  复位IUS
 545   1       Z85C30_KZJCQ(0x09,0x2A);  //WR9   INTACK允许   
 546   1       Z85C30_KZJCQ(0x03,0xC9);  //WR3   接收8个字符,RX_CRC允许,地址搜索模式,同步字符禁止装入,RX允许
 547   1       
 548   1       SIOAB=0; //设置控制字B路
 549   1       Z85C30_KZJCQ(0x09,0x40);  //强制复位
 550   1       Z85C30_KZJCQ(0x02,0x00);  //WR2    中断向量00H
 551   1       Z85C30_KZJCQ(0x04,0x20);  //WR4   SDLC模式  
C51 COMPILER V8.02   KJJ19_MN                                                              10/10/2006 14:47:30 PAGE 10  

 552   1       Z85C30_KZJCQ(0x01,0x00);  //WR1   接收不中断
 553   1       Z85C30_KZJCQ(0x87,0x7E);  //WR7   SDLC同步场,复位TX_CRC生成器
 554   1       Z85C30_KZJCQ(0x06,0x00);  //WR6   SDLC地址场00H,复位RX_CRC生成器
 555   1       Z85C30_KZJCQ(0x0A,0x80);  //WR10  CRC预置FF,NRZ模式
 556   1       Z85C30_KZJCQ(0x0B,0x08);  //WR11  接收时钟/RTXC,发送时钟为/RTXC
 557   1       Z85C30_KZJCQ(0x0E,0x20);  //WR14  进入地址搜索模式
 558   1       Z85C30_WR0(0x10); 
 559   1       Z85C30_WR0(0x38);  //  复位IUS
 560   1       Z85C30_KZJCQ(0x09,0x0A);  //WR9   INTACK允许   
 561   1       Z85C30_KZJCQ(0x03,0xCC);  //WR3   接收8个字符,RX_CRC允许,地址搜索模式,同步字符禁止装入,RX允许*/RX不允
             -许
 562   1      }
 563          /*********************************************************************************
 564          * function:         Z85C30_init_A()                                                       
 565          * use:             Z85C30初始化-A路接收

⌨️ 快捷键说明

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