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

📄 rs485.lst

📁 基于pic16分46 的rs485通讯协议
💻 LST
📖 第 1 页 / 共 5 页
字号:
   269                           ;rs485.c: 225: }
   270  06B3  0ACB               	incf	?a_Rs485SendPacket+2
   271  06B4  2EA8               	goto	l45
   272  06B5                     l37
   273                           ;rs485.c: 226: }
   274  06B5  3004               	movlw	4
   275  06B6  120A  118A  2752   	fcall	_Rs485UpdateCrc
      +       120A  118A         
   276                           ;rs485.c: 229: Rs485SendChar( 0x04 );
   277  06BB  3004               	movlw	4
   278  06BC  2652               	fcall	_Rs485SendChar
   279                           ;rs485.c: 231: Rs485SendChar(cCalcCrcHigh);
   280  06BD  0821               	movf	_cCalcCrcHigh,w
   281  06BE  2652               	fcall	_Rs485SendChar
   282                           ;rs485.c: 232: Rs485SendChar(cCalcCrcLow);
   283  06BF  0822               	movf	_cCalcCrcLow,w
   284  06C0  2652               	fcall	_Rs485SendChar
   285                           ;rs485.c: 234: for ( c=0; c < 2; c++ ) Rs485Sen
      +                          dChar( 0xaa );
   286  06C1  01CB               	clrf	?a_Rs485SendPacket+2
   287  06C2                     l46
   288  06C2  30AA               	movlw	-86
   289  06C3  2652               	fcall	_Rs485SendChar
   290  06C4  0ACB               	incf	?a_Rs485SendPacket+2
   291  06C5  3002               	movlw	2
   292  06C6  024B               	subwf	?a_Rs485SendPacket+2,w
   293  06C7  1C03               	btfss	3,0
   294  06C8  2EC2               	goto	l46
   295                           ;rs485.c: 235: DelayMs(1);
   296  06C9  3001               	movlw	1
   297  06CA  120A  118A  24A9   	fcall	_DelayMs
      +       120A  118A         
   298                           ;rs485.c: 236: RD4 = 0;
   299  06CF  1208               	bcf	8,4
   300                           ;rs485.c: 237: RCIE = 1;
   301  06D0  1683               	bsf	3,5
   302  06D1  168C               	bsf	12,5
   303                           ;rs485.c: 238: }
   304  06D2  1283               	bcf	3,5
   305  06D3  0008               	return
   306                           
   307                           	psect	text10
   308                           ;rs485.c: 382: unsigned char PacketHasPayload(v
      +                          oid)
   309                           ;rs485.c: 383: {
   310  06D4                     _PacketHasPayload
   311                           ;rs485.c: 384: if ( cCommand == 0xA4 ) return 1
      +                          ;
   312  06D4  0183               	clrf	3	;select bank 0
   313  06D5  0823               	movf	_cCommand,w
   314  06D6  3AA4               	xorlw	-92
   315  06D7  1903               	btfsc	3,2
   316  06D8  3401               	retlw	1
   317  06D9  3400               	retlw	0
   318                           ;rs485.c: 118: unsigned char Rs485Decode( void 
      +                          )
   319                           ;rs485.c: 119: {
   320  06DA                     _Rs485Decode
   321                           ;rs485.c: 121: switch ( cRS485State )
   322  06DA  2F0E               	goto	l14
   323  06DB                     l15
   324                           ;rs485.c: 122: {
   325  06DB  0829               	movf	_cRs485RxChar,w
   326  06DC  00AC               	movwf	_cStart
   327                           ;rs485.c: 124: if ( cStart == 0x02 )
   328  06DD  3A02               	xorlw	2
   329  06DE  2EFF               	goto	L6
   330                           ;rs485.c: 125: {
   331                           ;rs485.c: 127: }
   332  06DF                     l17
   333                           ;rs485.c: 130: case 1: cNetAddr = cRs485RxChar;
   334  06DF  0829               	movf	_cRs485RxChar,w
   335  06E0  00A5               	movwf	_cNetAddr
   336  06E1  2F07               	goto	L4
   337                           ;rs485.c: 131: cRS485State++;
   338                           ;rs485.c: 132: break;
   339  06E2                     l18
   340                           ;rs485.c: 134: case 2: cLenExpected = cRs485RxC
      +                          har;
   341  06E2  0829               	movf	_cRs485RxChar,w
   342  06E3  00A4               	movwf	_cLenExpected
   343                           ;rs485.c: 135: if ( cLenExpected > sizeof(c485B
      +                          uf) )
   344  06E4  3021               	movlw	33
   345  06E5  0224               	subwf	_cLenExpected,w
   346  06E6  1C03               	btfss	3,0
   347  06E7  2EEA               	goto	l19
   348                           ;rs485.c: 136: {
   349  06E8  30FF               	movlw	-1
   350  06E9  2F0C               	goto	L3
   351                           ;rs485.c: 138: }
   352  06EA                     l19
   353                           ;rs485.c: 140: {
   354  06EA  01A0               	clrf	_cBufPtr
   355  06EB  2F07               	goto	L4
   356                           ;rs485.c: 142: cRS485State++;
   357                           ;rs485.c: 143: }
   358                           ;rs485.c: 144: break;
   359  06EC                     l21
   360                           ;rs485.c: 146: case 3: cCommand = cRs485RxChar;
   361  06EC  0829               	movf	_cRs485RxChar,w
   362  06ED  00A3               	movwf	_cCommand
   363                           ;rs485.c: 147: if ( PacketHasPayload() ) cRS485
      +                          State = 4;
   364  06EE  26D4               	fcall	_PacketHasPayload
   365  06EF  3800               	iorlw	0
   366  06F0  1903               	btfsc	3,2
   367  06F1  2EF4               	goto	l22
   368  06F2  3004               	movlw	4
   369  06F3  2F0C               	goto	L3
   370                           ;rs485.c: 148: else cRS485State = 5;
   371  06F4                     l22
   372  06F4  3005               	movlw	5
   373  06F5  2F0C               	goto	L3
   374                           ;rs485.c: 149: break;
   375  06F6                     l24
   376                           ;rs485.c: 151: case 4: c485Buf[cBufPtr] = cRs48
      +                          5RxChar;
   377  06F6  0820               	movf	_cBufPtr,w
   378  06F7  3EA0               	addlw	_c485Buf
   379  06F8  0084               	movwf	4
   380  06F9  1383               	bcf	3,7
   381  06FA  0829               	movf	_cRs485RxChar,w
   382  06FB  0080               	movwf	0
   383                           ;rs485.c: 152: cBufPtr++;
   384  06FC  0AA0               	incf	_cBufPtr
   385                           ;rs485.c: 153: if ( cBufPtr == cLenExpected )
   386  06FD  0820               	movf	_cBufPtr,w
   387  06FE  0624               	xorwf	_cLenExpected,w
   388  06FF                     L6
   389  06FF  1D03               	btfss	3,2
   390  0700  2F32               	goto	l13
   391  0701  2F07               	goto	L4
   392                           ;rs485.c: 154: {
   393                           ;rs485.c: 156: }
   394  0702                     l26
   395                           ;rs485.c: 159: case 5: cStop = cRs485RxChar;
   396  0702  0829               	movf	_cRs485RxChar,w
   397  0703  00AD               	movwf	_cStop
   398  0704  2F07               	goto	L4
   399                           ;rs485.c: 160: cRS485State ++;
   400                           ;rs485.c: 161: break;
   401  0705                     l27
   402                           ;rs485.c: 163: case 6: cRxCrcHigh = cRs485RxCha
      +                          r;
   403  0705  0829               	movf	_cRs485RxChar,w
   404  0706  00AA               	movwf	_cRxCrcHigh
   405  0707                     L4
   406                           ;rs485.c: 164: cRS485State++;
   407  0707  0AA7               	incf	_cRS485State
   408                           ;rs485.c: 165: break;
   409  0708  2F32               	goto	l13
   410  0709                     l28
   411                           ;rs485.c: 167: case 7: cRxCrcLow = cRs485RxChar
      +                          ;
   412  0709  0829               	movf	_cRs485RxChar,w
   413  070A  00AB               	movwf	_cRxCrcLow
   414                           ;rs485.c: 168: cRS485State = 8;
   415  070B  3008               	movlw	8
   416  070C                     L3
   417  070C  00A7               	movwf	_cRS485State
   418                           ;rs485.c: 169: break;
   419                           ;rs485.c: 171: case 8: break;
   420                           ;rs485.c: 172: case 9: break;
   421                           ;rs485.c: 173: case 255: break;
   422  070D  2F32               	goto	l13
   423                           ;rs485.c: 176: break;
   424  070E                     l14
   425  070E  1283               	bcf	3,5
   426  070F  1303               	bcf	3,6	;carry unused
   427  0710  0827               	movf	_cRS485State,w
   428  0711  1903               	btfsc	3,2
   429  0712  2EDB               	goto	l15
   430  0713  3A01               	xorlw	1
   431  0714  1903               	btfsc	3,2
   432  0715  2EDF               	goto	l17
   433  0716  3A03               	xorlw	3
   434  0717  1903               	btfsc	3,2
   435  0718  2EE2               	goto	l18
   436  0719  3A01               	xorlw	1
   437  071A  1903               	btfsc	3,2
   438  071B  2EEC               	goto	l21
   439  071C  3A07               	xorlw	7
   440  071D  1903               	btfsc	3,2
   441  071E  2EF6               	goto	l24
   442  071F  3A01               	xorlw	1
   443  0720  1903               	btfsc	3,2
   444  0721  2F02               	goto	l26
   445  0722  3A03               	xorlw	3
   446  0723  1903               	btfsc	3,2
   447  0724  2F05               	goto	l27
   448  0725  3A01               	xorlw	1
   449  0726  1903               	btfsc	3,2
   450  0727  2F09               	goto	l28
   451  0728  3A0F               	xorlw	15
   452  0729  1903               	btfsc	3,2
   453  072A  2F32               	goto	l13
   454  072B  3A01               	xorlw	1
   455  072C  1903               	btfsc	3,2
   456  072D  2F32               	goto	l13
   457  072E  3AF6               	xorlw	246
   458  072F  1903               	btfsc	3,2
   459  0730  2F32               	goto	l13
   460                           ;rs485.c: 175: default: cRS485State = 0;
   461  0731  01A7               	clrf	_cRS485State
   462  0732                     l13
   463                           ;rs485.c: 179: return cRS485State;
   464  0732  0827               	movf	_cRS485State,w
   465                           ;rs485.c: 180: }
   466  0733  0008               	return
   467                           ;rs485.c: 289: void CRC16_Update4Bits( unsigned
      +                           char val )
   468                           ;rs485.c: 290: {
   469  0734                     _CRC16_Update4Bits
   470                           ;	_val assigned to ?a_CRC16_Update4Bits+0
   471  0000                     _CRC16_Update4Bits$val	set	?a_CRC16_Update4Bits
   472                           ;	_t assigned to ?a_CRC16_Update4Bits+1
   473  0000                     _CRC16_Update4Bits$t	set	?a_CRC16_Update4Bits+1
   474                           ;_val stored from w
   475  0734  0183               	clrf	3	;select bank 0
   476  0735  00CD               	movwf	?a_CRC16_Update4Bits
   477                           ;rs485.c: 291: unsigned char t;
   478  0736  0E21               	swapf	_cCalcCrcHigh,w
   479  0737  390F               	andlw	15
   480  0738  00CE               	movwf	?a_CRC16_Update4Bits+1
   481                           ;rs485.c: 297: t = t ^ val;
   482  0739  084D               	movf	?a_CRC16_Update4Bits,w
   483  073A  06CE               	xorwf	?a_CRC16_Update4Bits+1
   484                           ;rs485.c: 300: cCalcCrcHigh = (cCalcCrcHigh << 
      +                          4) | (cCalcCrcLow >> 4);
   485  073B  0E22               	swapf	_cCalcCrcLow,w
   486  073C  390F               	andlw	15
   487  073D  00F0               	movwf	btemp
   488  073E  0E21               	swapf	_cCalcCrcHigh,w
   489  073F  39F0               	andlw	240
   490  0740  0470               	iorwf	btemp,w
   491  0741  00A1               	movwf	_cCalcCrcHigh
   492                           ;rs485.c: 301: cCalcCrcLow = cCalcCrcLow << 4;
   493  0742  0EA2               	swapf	_cCalcCrcLow
   494  0743  30F0               	movlw	240
   495  0744  05A2               	andwf	_cCalcCrcLow
   496                           ;rs485.c: 304: cCalcCrcHigh = cCalcCrcHigh ^ CR
      +                          C16_LookupHigh[t];
   497  0745  3000               	movlw	_CRC16_LookupHigh shr (0+8)
   498  0746  008A               	movwf	10
   499  0747  084E               	movf	?a_CRC16_Update4Bits+1,w
   500  0748  2077               	call	((_CRC16_LookupHigh+-1)& (0+2047))| (($)&
      +                           (0+-2048))
   501  0749  06A1               	xorwf	_cCalcCrcHigh
   502                           ;rs485.c: 305: cCalcCrcLow = cCalcCrcLow ^ CRC1
      +                          6_LookupLow[t];
   503  074A  3000               	movlw	_CRC16_LookupLow shr (0+8)
   504  074B  008A               	movwf	10
   505  074C  084E               	movf	?a_CRC16_Update4Bits+1,w
   506  074D  2066               	call	((_CRC16_LookupLow+-1)& (0+2047))| (($)& 
      +                          (0+-2048))
   507  074E  120A  118A         	pagesel	$
   508  0750  06A2               	xorwf	_cCalcCrcLow
   509                           ;rs485.c: 306: }
   510  0751  0008               	return
   511                           ;rs485.c: 311: void Rs485UpdateCrc( unsigned ch
      +                          ar cVal )
   512                           ;rs485.c: 312: {
   513  0752                     _Rs485UpdateCrc
   514                           ;	_cVal assigned to ?a_Rs485UpdateCrc+0
   515  0000                     _Rs485UpdateCrc$cVal	set	?a_Rs485UpdateCrc
   516                           ;_cVal stored from w
   517  0752  0183               	clrf	3	;select bank 0
   518  0753  00CC               	movwf	?a_Rs485UpdateCrc
   519                           ;rs485.c: 313: CRC16_Update4Bits( cVal >> 4 );
   520  0754  0E4C               	swapf	?a_Rs485UpdateCrc,w
   521  0755  390F               	andlw	15
   522  0756  2734  120A  118A   	fcall	_CRC16_Update4Bits
   523                           ;rs485.c: 314: CRC16_Update4Bits( cVal & 0x0F )
      +                          ;
   524  0759  084C               	movf	?a_Rs485UpdateCrc,w
   525  075A  390F               	andlw	15
   526  075B  2F34               	ljmp	_CRC16_Update4Bits
   527                           ;rs485.c: 277: void CRC16_Init( void )
   528                           ;rs485.c: 278: {
   529  075C                     _CRC16_Init
   530                           ;rs485.c: 280: cCalcCrcHigh = 0xFF;
   531  075C  30FF               	movlw	-1
   532  075D  0183               	clrf	3	;select bank 0
   533  075E  00A1               	movwf	_cCalcCrcHigh
   534                           ;rs485.c: 281: cCalcCrcLow = 0xFF;
   535  075F  00A2               	movwf	_cCalcCrcLow
   536                           ;rs485.c: 282: }
   537  0760  0008               	return
   538                           ;rs485.c: 340: unsigned char PostValidatePacket
      +                          (void)
   539                           ;rs485.c: 341: {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -