📄 modbus.lst
字号:
280 4 P7=p7pas;
281 4 P6=p6pas;
282 4
283 4 RX0_Ready=0;
284 4 break;
285 4 case 0XF4: //关闭编号为1--16的12伏控制开关,遇0不变,遇1变1
286 4 p7pan=RX0_Buf[3];
287 4 p7pas=~((~p7pas)|p7pan);
288 4 P7=p7pas;
289 4
290 4 p6pan=RX0_Buf[2];
291 4 p6pas=~((~p6pas)|p6pan);
292 4 P6=p6pas;
293 4
294 4 RX0_Ready=0;
295 4 break;
296 4 case 0XF5: //设置传感器的起始地址和终止地址
297 4 waddr[0]=RX0_Buf[2]; //高在前
298 4 waddr[1]=RX0_Buf[3];
299 4 FlashWrite(0x0000,waddr);
300 4 RX0_Ready=0;
301 4 break;
C51 COMPILER V7.50 MODBUS 02/26/2006 22:47:28 PAGE 6
302 4 case 0XF6: //打开编号为17--20的12伏控制开关
303 4 p5pan=RX0_Buf[3];
304 4 p5pas=p5pas|p5pan;
305 4
306 4 P5=p5pas;
307 4
308 4 RX0_Ready=0;
309 4 break;
310 4 case 0XF7: //关闭编号为17--20的12伏控制开关
311 4
312 4 p5pan=RX0_Buf[3];
313 4 p5pas=~((~p5pas)|p5pan);
314 4 P5=p5pas;
315 4
316 4 RX0_Ready=0;
317 4 break;
318 4 case 0XF8: //打开编号为21--36的12伏控制开关
319 4 RX0_Ready=0;
320 4 break;
321 4 case 0XF9: //关闭编号为21--36的12伏控制开关
322 4 RX0_Ready=0;
323 4 break;
324 4 case 0XFA: //打开编号为37--40的12伏控制开关
325 4 RX0_Ready=0;
326 4 break;
327 4 case 0XFB: //关闭编号为37--40的12伏控制开关
328 4 RX0_Ready=0;
329 4 break;
330 4 case 0XFC: //远程遥控集中器复位命令*/
331 4 RSTSRC |=0X10;
332 4 RX0_Ready=0;
333 4 break;
334 4 case 0XFD: //读两输入开关量
335 4 P4=0XFF;
336 4 onoff=P4;
337 4 RX0_Ready=0;
338 4 break;
339 4 case 0XFE: //读地址范围
340 4 FlashRead(0x0000,raddr);
341 4 SendCgqAddr();
342 4 RX0_Ready=0;
343 4 break;
344 4 case 0XD0: //防盗1
345 4 RX0_Ready=0;
346 4 break;
347 4 case 0XD1: //防盗2
348 4 RX0_Ready=0;
349 4 break;
350 4 case 0XD2: //设置继电器互锁时间
351 4 temp2=*(PRX0+1);
352 4 RX0_Ready=0;
353 4 break;
354 4 case 0XD3: //1-16个继电器前关后开指令
355 4
356 4 p7pan=RX0_Buf[3];
357 4
358 4 firstoff1_8=p7pan;
359 4
360 4 p7pas=~((~p7pas)|p7pan);
361 4 P7=p7pas;
362 4
363 4 p6pan=RX0_Buf[2];
C51 COMPILER V7.50 MODBUS 02/26/2006 22:47:28 PAGE 7
364 4
365 4 firstoff9_16=p6pan;
366 4
367 4 p6pas=~((~p6pas)|p6pan);
368 4 P6=p6pas;
369 4
370 4
371 4 qkhg1_16=1;
372 4
373 4 TR2=1;
374 4
375 4 RX0_Ready=0;
376 4
377 4 break;
378 4 case 0XD4: //1-16后关前开指令
379 4
380 4 p7pan=RX0_Buf[3];
381 4
382 4 firstoff1_8=p7pan;
383 4
384 4 p7pas=~((~p7pas)|p7pan);
385 4 P7=p7pas;
386 4
387 4 p6pan=RX0_Buf[2];
388 4
389 4 firstoff9_16=p6pan;
390 4
391 4 p6pas=~((~p6pas)|p6pan);
392 4 P6=p6pas;
393 4
394 4 hkqg1_16=1;
395 4
396 4 TR2=1;
397 4
398 4 RX0_Ready=0;
399 4 break;
400 4 case 0XD5: //16-20前关后开指令
401 4
402 4 p5pan=RX0_Buf[3];
403 4
404 4 firstoff17_20=p5pan;
405 4
406 4 p5pas=~((~p5pas)|p5pan);
407 4 P5=p5pas;
408 4
409 4 qkhg17_20=1;
410 4
411 4 TR2=1;
412 4 RX0_Ready=0;
413 4 break;
414 4 case 0XD6: //16-20后关前开指令
415 4
416 4 p5pan=RX0_Buf[3];
417 4 firstoff17_20=p5pan;
418 4 p5pas=~((~p5pas)|p5pan);
419 4 P5=p5pas;
420 4
421 4
422 4 hkqg17_20=1;
423 4
424 4 TR2=1;
425 4
C51 COMPILER V7.50 MODBUS 02/26/2006 22:47:28 PAGE 8
426 4
427 4 RX0_Ready=0;
428 4 break;
429 4 default:
430 4 RX0_Ready=0;
431 4
432 4 }
433 3
434 3 RX0_BufClear();
435 3 }
436 2 //---------------------------------------------------------------------------------------
437 2 if(sendinterva2)
438 2 {
439 3 sendinterva2=0;
440 3 if(qkhg1_16)
441 3 {
442 4 p7pas=firstoff1_8;
443 4 p6pas=firstoff9_16;
444 4
445 4 p7pas=p7pas<<1;
446 4 p6pas=p6pas<<1;
447 4
448 4 P7=p7pas;
449 4 P6=p6pas;
450 4
451 4 qkhg1_16=0;
452 4 }
453 3 if(hkqg1_16)
454 3 {
455 4 p7pas=firstoff1_8;
456 4 p6pas=firstoff9_16;
457 4
458 4 p7pas=p7pas>>1;
459 4 p6pas=p6pas>>1;
460 4
461 4 P7=p7pas;
462 4 P6=p6pas;
463 4
464 4 hkqg1_16=0;
465 4 }
466 3
467 3 if(qkhg17_20)
468 3 {
469 4 p5pas=firstoff17_20;
470 4
471 4 p5pas=p5pas<<1;
472 4 P5=p5pas;
473 4 qkhg17_20=0;
474 4 }
475 3 if(hkqg17_20)
476 3 {
477 4 p5pas=firstoff17_20;
478 4
479 4 p5pas=p5pas>>1;
480 4 P5=p5pas;
481 4
482 4 hkqg17_20=0;
483 4 }
484 3
485 3 }
486 2 //--------------------------------------------------------------------------------------
487 2 if(cdma) //定时采集开
C51 COMPILER V7.50 MODBUS 02/26/2006 22:47:28 PAGE 9
488 2 {
489 3 if(sendinterval) //间隔采集定时时间到
490 3 {
491 4 if(addr>=addh) //到最后一个地址
492 4 {
493 5 RECEIVENUM1=0;
494 5 RX1_index=0;
495 5 address=addr;
496 5
497 5 modbuscgqsend(addr);
498 5 addr=addl;
499 5 addend=1; //addend=1,发送到最后一个地址
500 5 sendinterval=0;
501 5 TR0=1;
502 5 }
503 4 else //没到最后一个地址
504 4 {
505 5 RECEIVENUM1=0;
506 5 RX1_index=0;
507 5 address=addr;
508 5
509 5 modbuscgqsend(addr);
510 5 addr=addr+1;
511 5 addend=0; //addend=1,发送到最后一个地址
512 5 sendinterval=0;
513 5 TR0=1;
514 5 }
515 4
516 4 }
517 3 }
518 2 if(RX1_Ready)
519 2 {
520 3 unsigned char f,temp,temp1;
521 3 ////////////////////////////////////
522 3 for(f=0;f<RX1_Buf[2];f=f+2)
523 3 {
524 4 temp=RX1_Buf[3+f];
525 4 temp1=RX1_Buf[4+f];
526 4 RX1_Buf[3+f]=temp1;
527 4 RX1_Buf[4+f]=temp;
528 4 }
529 3 ///////////////////////////////////
530 3 modbusRX1_Buf[0]=0x7e;
531 3 modbusRX1_Buf[1]=RX1_Buf[0];
532 3 modbusRX1_Buf[2]=0xFF-RX1_Buf[0]+1;
533 3 modbusRX1_Buf[3]=0x50;
534 3 modbusRX1_Buf[4]=0x00;
535 3 modbusRX1_Buf[5]=0x00;
536 3 for(f=0;f<RX1_Buf[2];f++)
537 3 {
538 4 modbusRX1_Buf[6+f]=RX1_Buf[3+f];
539 4 }
540 3 temp=0;
541 3 for(f=1;f<6+RX1_Buf[2];f++)
542 3 {
543 4 temp=temp+modbusRX1_Buf[f];
544 4 }
545 3 f=6+RX1_Buf[2];
546 3 modbusRX1_Buf[f]=0xff-temp+1;
547 3 modbusRX1_Buf[f+1]=0x0d;
548 3
549 3 temp=f+1;
C51 COMPILER V7.50 MODBUS 02/26/2006 22:47:28 PAGE 10
550 3 /////////////////////////////////////////////////////////////////////
551 3 for(f=0;f<temp+1;f++)
552 3 {
553 4 ardata[packge]=modbusRX1_Buf[f];
554 4 packge=packge+1;
555 4 }
556 3
557 3 if(modbusRX1_Buf[1]==addh)//收到最后一个地址数据了吗
558 3 {
559 4 P4=0xff;
560 4 ardata[packge]=P4;
561 4 packge++;
562 4 addrnd=1;
563 4 }
564 3 else
565 3 {
566 4 addrnd=0;
567 4 } //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -