📄 commrs232.lst
字号:
422 4 rs_BUF = rs_BUF >> 1; //接收第8位
423 4 rs_BUF_bit7 = rs_RXD;
424 4
425 4 Rs232CommTemp0 = rs_BUF;
426 4 if(Rs232CommTemp0 == 0x7E)
427 4 {
C51 COMPILER V7.06 COMMRS232 10/30/2008 13:20:06 PAGE 8
428 5 Rs232CommState = 0;
429 5 Rs232CommAscii = 0;
430 5 Rs232CommBytehilow = 0;
431 5 }
432 4 if(Rs232CommState != 0 && Rs232CommState != 5 && Rs232CommState != 6)
433 4 {
434 5 Rs232ComCalculChkSum += Rs232CommTemp0;
435 5 }
436 4 if(Rs232CommState != 0 && Rs232CommState != 6)
437 4 {
438 5 if(Rs232CommAscii == 0)
439 5 {
440 6 Rs232CommAscii = 1;
441 6 Rs232CommTemp1 = Rs232CommTemp0;
442 6 if(Rs232CommTemp1 < 0x3a)
443 6 Rs232CommTemp1 -= 0x30;
444 6 else
445 6 Rs232CommTemp1 -= 0x37;
446 6 }
447 5 else
448 5 {
449 6 Rs232CommAscii = 0;
450 6 if(Rs232CommTemp0 < 0x3a)
451 6 Rs232CommTemp0 -= 0x30;
452 6 else
453 6 Rs232CommTemp0 -= 0x37;
454 6 Rs232CommTemp1 <<= 4;
455 6 Rs232CommTemp1 |= Rs232CommTemp0;
456 6 }
457 5 }
458 4 if(Rs232CommAscii == 0)
459 4 {
460 5 switch(Rs232CommState)
461 5 {
462 6 case 0: /*SOI*/
463 6 {
464 7 if(Rs232CommTemp0 == 0x7e)
465 7 {
466 8 Rs232CommState++;
467 8 Rs232ComCalculChkSum = 0;
468 8 }
469 7 }break;
470 6 case 1: /*ADD*/
471 6 {
472 7 if(Rs232CommTemp1 == (uint8)(ModeSysConfig[8])) //BoardAddress
473 7 {
474 8 Rs232CommState++;
475 8 }
476 7 else
477 7 {
478 8 Rs232CommState = 0;
479 8 }
480 7 }break;
481 6 case 2: /*CID*/
482 6 {
483 7 Rs232CommCid = Rs232CommTemp1;
484 7 Rs232CommState++;
485 7 if(CommCid > 0x10) Rs232CommState = 0;
486 7
487 7 }break;
488 6 case 3: /*LENGTH*/
489 6 {
C51 COMPILER V7.06 COMMRS232 10/30/2008 13:20:06 PAGE 9
490 7 if(Rs232CommBytehilow == 0 )
491 7 {
492 8 Rs232CommLengthH = Rs232CommTemp1;
493 8 Rs232CommBytehilow = 1;
494 8 }
495 7 else
496 7 {
497 8 Rs232CommState++;
498 8 Rs232CommLengthL = Rs232CommTemp1;
499 8 Rs232CommBytehilow = 0;
500 8 if(Rs232CommLengthL > 40) Rs232CommState = 0;
501 8 ReceivePoint = 0; //RxBufPointer
502 8 if(Rs232CommLengthL == 0) Rs232CommState++;
503 8 }
504 7 }break;
505 6 case 4: /*INFO*/
506 6 {
507 7 if(Rs232CommLengthL != 0)
508 7 {
509 8 rs232buffer[ReceivePoint] = Rs232CommTemp1;
510 8 ReceivePoint++;
511 8 Rs232CommLengthL--;
512 8 Rs232CommLengthL--;
513 8 if(Rs232CommLengthL == 0) Rs232CommState++;
514 8 }
515 7 else
516 7 Rs232CommState++;
517 7 }break;
518 6 case 5: /*chksum*/
519 6 {
520 7 if(Rs232CommBytehilow == 0)
521 7 {
522 8 Rs232CommChksumH = Rs232CommTemp1;
523 8 Rs232CommBytehilow = 1;
524 8 }
525 7 else
526 7 {
527 8 Rs232CommBytehilow = 0;
528 8 Rs232CommChksumL = Rs232CommTemp1;
529 8 //Rs232ReComCalculChkSum = Rs232CommChksumH;
530 8 //COMEN = CommTxden;
531 8 //Suart_Send_Byte(Rs232CommChksumH);
532 8 //Rs232ReComCalculChkSum = Rs232ReComCalculChkSum << 8;
533 8 //Rs232ReComCalculChkSum |= Rs232CommChksumL;
534 8 Rs232ComCalculChkSum = (~Rs232ComCalculChkSum)+1;
535 8 //COMEN = CommTxden;
536 8 //Suart_Send_Byte(Rs232CommChksumL);
537 8 //COMEN = CommTxden;
538 8 //Suart_Send_Byte(Rs232ComCalculChkSum>>8);
539 8 //Suart_Send_Byte(Rs232ComCalculChkSum);
540 8 //if(Rs232ReComCalculChkSum == Rs232ComCalculChkSum)
541 8 if(Rs232CommChksumH == (Rs232ComCalculChkSum >> 8)
542 8 &&(Rs232CommChksumL == (uint8)(Rs232ComCalculChkSum)))
543 8 {
544 9 Rs232CommState++;
545 9 //RunLed = ~RunLed;
546 9 }
547 8 else
548 8 {
549 9 // COMEN = CommTxden;
550 9 // Suart_Send_Byte(Rs232ReComCalculChkSum>>8);
551 9 // Suart_Send_Byte(Rs232ReComCalculChkSum);
C51 COMPILER V7.06 COMMRS232 10/30/2008 13:20:06 PAGE 10
552 9 // COMEN = CommTxden;
553 9 // Suart_Send_Byte(Rs232ComCalculChkSum>>8);
554 9 // Suart_Send_Byte(Rs232ComCalculChkSum);
555 9 goto comrxend;
556 9 }
557 8 }
558 7 }break;
559 6 case 6: /*EOI */
560 6 {
561 7 if(Rs232CommTemp0 == 0x0D)
562 7 {
563 8 Rs232Massageflag = 1;
564 8 //RunLed = ~RunLed;
565 8 }
566 7 Rs232CommState = 0;
567 7 }break;
568 6 }
569 5 comrxend:
570 5 ;
571 5 }
572 4 // if( ReceivePoint < rs_RECEIVE_MAX)
573 4 // { //保存收到的字节
574 4 // rs232buffer[ReceivePoint++] = rs_BUF;
575 4 // }
576 4 // else
577 4 // {
578 4 // rs_f_RI_enable = 0; //缓冲区满, 禁止接收
579 4 // }
580 4 }
581 3 else
582 3 {
583 4 if (rs_shift_count < 9 ) //收到的是数据位 1 -- 7
584 4 {
585 5 rs_BUF = rs_BUF >> 1;
586 5 rs_BUF_bit7 = rs_RXD;
587 5 }
588 4 else
589 4 { //收到停止位,继续检测 PC 机发出的下一个起始位
590 5 soft_receive_init();
591 5 }
592 4 }
593 3 }
594 2 TCON_TFx = 0; //清定时器中断标志
595 2 }
596 1 else
597 1 {
598 2 /************************ 发送 ****************************/
599 2 if (rs_f_TI_enable == 1)
600 2 {
601 3 rs_timerL += rs_FULL_BIT_L;//下次中断在数据位的末尾时刻
602 3 rs_timerH = rs_FULL_BIT_H;
603 3
604 3 rs_shift_count--; //0:停止位末尾时刻到
605 3 //1:发送停止位
606 3 //2--9:发送数据位
607 3 if (rs_shift_count > 9) //错误状态
608 3 {
609 4 rs_shift_count = 9;
610 4 rs_BUF = 0xFF;
611 4 }
612 3
613 3 if (rs_shift_count > 1) //2--9:发送数据位
C51 COMPILER V7.06 COMMRS232 10/30/2008 13:20:06 PAGE 11
614 3 {
615 4 ACC = rs_BUF;
616 4 ACC = ACC >> 1;
617 4 rs_TXD = CY;
618 4 rs_BUF = ACC;
619 4 }
620 3 else
621 3 {
622 4 if (rs_shift_count == 0) //0:停止位末尾时刻到
623 4 {
624 5 rs_TXD = 1;
625 5 rs_f_TI = 1; //已发送完毕一个字节
626 5 }
627 4 else
628 4 {
629 5 rs_TXD = 1; //1:发送停止位
630 5 }
631 4 }
632 3 }
633 2 }
634 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -