📄 kjj19-mn.lst
字号:
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 + -