📄 tstrs485.lst
字号:
.................... ClearLine2();
03AC: CALL 27D
.................... LcdWrite("traffic"); // Network traffic for other nodes
*
004A: BCF 0A,0
004B: BCF 0A,1
004C: BCF 0A,2
004D: ADDWF 02,F
004E: RETLW 74
004F: RETLW 72
0050: RETLW 61
0051: RETLW 66
0052: RETLW 66
0053: RETLW 69
0054: RETLW 63
0055: RETLW 00
*
03AD: BSF 03,5
03AE: CLRF 34
03AF: BCF 03,5
03B0: BSF 03,5
03B1: MOVF 34,W
03B2: BCF 03,5
03B3: CALL 04A
03B4: IORLW 00
03B5: BTFSC 03,2
03B6: GOTO 3BD
03B7: BSF 03,5
03B8: INCF 34,F
03B9: MOVWF 3A
03BA: BCF 03,5
03BB: CALL 1C9
03BC: GOTO 3B0
.................... delay_ms(200);
03BD: MOVLW C8
03BE: BSF 03,5
03BF: MOVWF 3C
03C0: BCF 03,5
03C1: CALL 1A0
.................... }
....................
.................... cRS485State = PostValidatePacket(); // Validate packet CRC
*
043A: MOVF 21,W
043B: MOVWF 31
....................
.................... if ( (cRS485State == PKT_INVALID)||(cRS485State == PKT_VALID) )
043C: INCFSZ 31,W
043D: GOTO 43F
043E: GOTO 443
043F: MOVF 31,W
0440: SUBLW 09
0441: BTFSS 03,2
0442: GOTO 485
.................... {
.................... // Reject invalid packets
.................... if ( cRS485State == PKT_INVALID ) // NAK our invalid packets
0443: INCFSZ 31,W
0444: GOTO 474
.................... {
.................... ClearLine2();
0445: CALL 27D
.................... if ( cError == BAD_CRC ) LcdWrite("Bad CRC");
*
0056: BCF 0A,0
0057: BCF 0A,1
0058: BCF 0A,2
0059: ADDWF 02,F
005A: RETLW 42
005B: RETLW 61
005C: RETLW 64
005D: RETLW 20
005E: RETLW 43
005F: RETLW 52
0060: RETLW 43
0061: RETLW 00
*
0446: MOVF 7C,W
0447: SUBLW 02
0448: BTFSS 03,2
0449: GOTO 45B
044A: BSF 03,5
044B: CLRF 34
044C: BCF 03,5
044D: BSF 03,5
044E: MOVF 34,W
044F: BCF 03,5
0450: CALL 056
0451: IORLW 00
0452: BTFSC 03,2
0453: GOTO 45A
0454: BSF 03,5
0455: INCF 34,F
0456: MOVWF 3A
0457: BCF 03,5
0458: CALL 1C9
0459: GOTO 44D
.................... else if ( cError == BAD_LENGTH ) LcdWrite("Bad length");
*
0062: BCF 0A,0
0063: BCF 0A,1
0064: BCF 0A,2
0065: ADDWF 02,F
0066: RETLW 42
0067: RETLW 61
0068: RETLW 64
0069: RETLW 20
006A: RETLW 6C
006B: RETLW 65
006C: RETLW 6E
006D: RETLW 67
006E: RETLW 74
006F: RETLW 68
0070: RETLW 00
*
045A: GOTO 46D
045B: DECFSZ 7C,W
045C: GOTO 46D
045D: BSF 03,5
045E: CLRF 34
045F: BCF 03,5
0460: BSF 03,5
0461: MOVF 34,W
0462: BCF 03,5
0463: CALL 062
0464: IORLW 00
0465: BTFSC 03,2
0466: GOTO 46D
0467: BSF 03,5
0468: INCF 34,F
0469: MOVWF 3A
046A: BCF 03,5
046B: CALL 1C9
046C: GOTO 460
.................... delay_ms(200);
046D: MOVLW C8
046E: BSF 03,5
046F: MOVWF 3C
0470: BCF 03,5
0471: CALL 1A0
.................... //if ( cOurPkt ) Rs485SendPacket( SENSOR_NAK, 0, NULL );
.................... cRS485State = PKT_WAIT_START;
0472: CLRF 31
.................... }
.................... else if ( cRS485State == PKT_VALID ) // If packet valid
0473: GOTO 485
0474: MOVF 31,W
0475: SUBLW 09
0476: BTFSS 03,2
0477: GOTO 485
.................... { // and destined for this node
.................... if ( cOurPkt ) cPktReady = TRUE;
0478: BSF 03,5
0479: MOVF 32,F
047A: BTFSS 03,2
047B: GOTO 47E
047C: BCF 03,5
047D: GOTO 484
047E: BCF 03,5
047F: MOVLW 01
0480: BSF 03,5
0481: MOVWF 33
.................... else cRS485State = PKT_WAIT_START;
0482: BCF 03,5
0483: GOTO 485
0484: CLRF 31
.................... }
.................... }
.................... }
....................
.................... enable_interrupts(GLOBAL);
0485: MOVLW C0
0486: IORWF 0B,F
....................
.................... return cPktReady;
0487: BSF 03,5
0488: MOVF 33,W
0489: BCF 03,5
048A: MOVWF 21
048B: BCF 0A,3
048C: GOTO 5D2
....................
.................... }
....................
....................
.................... //****************************************************************************
.................... // void Rs485Decode(void)
.................... //
.................... // Decode an incomming packet on the RS485 network
.................... //
.................... // Expecting:
.................... // START,
.................... // NETWORK ADDRESS_HIGH,
.................... // NETWORK ADDRESS_LOW,
.................... // PAYLOAD LENGTH,
.................... // COMMAND,
.................... // optional DATA,
.................... // CRC HIGH,
.................... // CRC LOW
.................... //
.................... //****************************************************************************
.................... #separate
.................... char Rs485Decode( void )
.................... {
....................
.................... switch ( cRS485State )
*
0112: MOVF 31,W
0113: MOVWF 20
0114: BTFSC 03,2
0115: GOTO 13F
0116: MOVLW 01
0117: SUBWF 20,W
0118: BTFSC 03,2
0119: GOTO 146
011A: MOVLW 02
011B: SUBWF 20,W
011C: BTFSC 03,2
011D: GOTO 14A
011E: MOVLW 03
011F: SUBWF 20,W
0120: BTFSC 03,2
0121: GOTO 14E
0122: MOVLW 04
0123: SUBWF 20,W
0124: BTFSC 03,2
0125: GOTO 15C
0126: MOVLW 05
0127: SUBWF 20,W
0128: BTFSC 03,2
0129: GOTO 168
012A: MOVLW 06
012B: SUBWF 20,W
012C: BTFSC 03,2
012D: GOTO 173
012E: MOVLW 07
012F: SUBWF 20,W
0130: BTFSC 03,2
0131: GOTO 177
0132: MOVLW 08
0133: SUBWF 20,W
0134: BTFSC 03,2
0135: GOTO 17C
0136: MOVLW 09
0137: SUBWF 20,W
0138: BTFSC 03,2
0139: GOTO 17D
013A: MOVLW FF
013B: SUBWF 20,W
013C: BTFSC 03,2
013D: GOTO 17E
013E: GOTO 17F
.................... {
.................... case PKT_WAIT_START: cStart = cRs485RxChar;
013F: MOVF 30,W
0140: MOVWF 32
.................... if ( cRs485RxChar == PKT_START ) // Check for the start of packet byte
0141: MOVF 30,W
0142: SUBLW 02
0143: BTFSC 03,2
.................... {
.................... cRS485State++;
0144: INCF 31,F
.................... }
.................... break;
0145: GOTO 181
....................
.................... case PKT_WAIT_ADDR_HIGH: cNetAddrHigh = cRs485RxChar;
0146: MOVF 30,W
0147: MOVWF 33
.................... cRS485State++;
0148: INCF 31,F
.................... break;
0149: GOTO 181
....................
.................... case PKT_WAIT_ADDR_LOW: cNetAddrLow = cRs485RxChar;
014A: MOVF 30,W
014B: MOVWF 34
.................... cRS485State++;
014C: INCF 31,F
.................... break;
014D: GOTO 181
....................
.................... case PKT_WAIT_LEN: cLenExpected = cRs485RxChar;
014E: MOVF 30,W
014F: MOVWF 35
.................... if ( cLenExpected > sizeof(c485Buf) )
0150: MOVF 35,W
0151: SUBLW 40
0152: BTFSC 03,0
0153: GOTO 159
.................... {
.................... cRS485State = PKT_INVALID;
0154: MOVLW FF
0155: MOVWF 31
.................... cError = BAD_LENGTH;
0156: MOVLW 01
0157: MOVWF 7C
.................... }
.................... else
0158: GOTO 15B
.................... {
.................... cBufPtr = 0;
0159: CLRF 7B
.................... cRS485State++;
015A: INCF 31,F
.................... }
.................... break;
015B: GOTO 181
....................
.................... case PKT_CMD: cCommand = cRs485RxChar;
015C: MOVF 30,W
015D: MOVWF 36
.................... if ( PacketHasPayload() ) cRS485State = PKT_WAIT_DATA;
015E: CALL 106
015F: MOVF 21,F
0160: BTFSC 03,2
0161: GOTO 165
0162: MOVLW 05
0163: MOVWF 31
.................... else cRS485State = PKT_WAIT_CRC_HIGH;
0164: GOTO 167
0165: MOVLW 06
0166: MOVWF 31
.................... break;
0167: GOTO 181
....................
.................... case PKT_WAIT_DATA: c485Buf[cBufPtr] = cRs485RxChar;
0168: MOVLW 37
0169: ADDWF 7B,W
016A: MOVWF 04
016B: MOVF 30,W
016C: MOVWF 00
.................... cBufPtr++;
016D: INCF 7B,F
.................... if ( cBufPtr == cLenExpected ) // If last byte of data received
016E: MOVF 35,W
016F: SUBWF 7B,W
0170: BTFSC 03,2
.................... {
.................... cRS485State++; // next byet is the CRC high byte
0171: INCF 31,F
.................... }
.................... break;
0172: GOTO 181
....................
.................... case PKT_WAIT_CRC_HIGH: cRxCrcHigh = cRs485RxChar;
0173: MOVF 30,W
0174: MOVWF 77
.................... cRS485State++;
0175: INCF 31,F
.................... break;
0176: GOTO 181
....................
.................... case PKT_WAIT_CRC_LOW: cRxCrcLow = cRs485RxChar;
0177: MOVF 30,W
0178: MOVWF 78
.................... cRS485State = PKT_COMPLETE;
0179: MOVLW 08
017A: MOVWF 31
.................... break;
017B: GOTO 181
....................
.................... case PKT_COMPLETE: break; // Idle state
017C: GOTO 181
.................... case PKT_VALID: break; // Idle state
017D: GOTO 181
.................... case PKT_INVALID: break; // Idle state
017E: GOTO 181
....................
.................... default: cRS485State = PKT_WAIT_START;
017F: CLRF 31
.................... break;
0180: GOTO 181
.................... }
....................
.................... return cRS485State;
0181: MOVF 31,W
0182: MOVWF 21
0183: BCF 0A,3
0184: GOTO 193
.................... }
....................
....................
.................... //****************************************************************************
.................... // void Rs485SendPacket( char cAddr, char cCmd, char cLen, char *cData )
.................... //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -