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

📄 tstrs485.lst

📁 基于PIC16F873构成485接口的C源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
.................... 			   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 + -