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

📄 golay.asm

📁 [原创]PIC单片机完成格雷(Golay)编码的源码.
💻 ASM
字号:
;----------------------------------------------------------------------
; Subroutine:  gloay
;   
; Description: 
;   
; Constants: 
;   
; Global Variables: gnHiByte, gnLoByte as input data
;   
; Output: FSR+0, FSR+1, FSR+2 as output data
;   
;----------------------------------------------------------------------
golay
;	pDest[0] = nHiByte;
;	pDest[1] = nLoByte;
;	pDest[2] = nLoByte;
		movf	gnHiByte,W		; [1] W = gnHiByte
		movwf	TBUFFER+0		; [1] pDest[0] = W
		movf	gnLoByte,W		; [1] W = gnLoByte
		movwf	TBUFFER+1		; [1] gn2ndByte = W		
		movwf	TBUFFER+2		; [1] gn3rdByte = W		

		movlw	D'12'			; [1] W = 12
		movwf	BitCount		; [1] BitCount = W
golay_loop
;		if ( pDest[1] & 1 )
;		{
;			pDest[1] ^= POLY_LOW;
;			pDest[0] ^= POLY_HI;
;		}
		btfss	TBUFFER+1,0		; [1] if ( 0 == ( gn2ndByte & 1 ) )
		goto	golay_no_poly	; [1] goto golay_no_poly
		movlw	0x0A
		xorwf	TBUFFER+0,F		; pDest[0] ^= 0x0A
		movlw	0xE3
		xorwf	TBUFFER+1,F		; gn2ndByte ^= 0xE3

golay_no_poly
;		if ( pDest[0] & 1 )
;			pDest[1] = 0x80 | ( pDest[1] >> 1 );
;		else
;			pDest[1] = 0x7F & ( pDest[1] >> 1 );
;		pDest[0] = 0x7F & ( pDest[0] >> 1 );
		rrf		TBUFFER+0,F		; [1] pDest[0] >>= 1
		rrf		TBUFFER+1,F		; [1] pDest[1] >>= 1
		bcf		TBUFFER+0,7		; [1] pDest[0] &= 0x80
;	}
		decfsz	BitCount,F	; [2] BitCount--;
		goto 	golay_loop		; [1] }

golay_loop_end
;	pDest[0] <<= 4;
		swapf	TBUFFER+0,W		; [1] W = pDest[0]	注:已交换高低4BIT
		andlw	0xF0			; [1] W &= 0xF0		注:保留高4位,实际上是原低4位
		movwf	TBUFFER+0		; [1] pDest[0] = W
;	pDest[0] |= 0x0F & ( pDest[1] >> 4 );
		swapf	TBUFFER+1,W		; [1] W = pDest[1]	注:已交换高低4位
		andlw	0x0F			; [1] W &= 0x0F		注:保留低4位,实际上是原高4位
		iorwf	TBUFFER+0,F		; [1] pDest[0] |= W
;	pDest[1] <<= 4;
;	pDest[1] |= 0x0F & nHiByte;

		swapf	TBUFFER+1,W		; [1] W = pDest[1]	注:已交换高低4位
		andlw	0xF0			; [1] W &= 0xF0		注:保留高4位,实际上是原低4位
		iorwf	gnHiByte,W		; [1] W |= gnHiByte;
		movwf	TBUFFER+1		; [1] pDest[1] = W

gloay_parity
;	unsigned char p;
;	p = pDest[0];
;	p ^= pDest[1];
;	p ^= pDest[2];
		movf	TBUFFER+0,W		; [1] W = pDest[0];
		xorwf	TBUFFER+1,W		; [1] W ^= pDest[1];
		xorwf	TBUFFER+2,W		; [1] W ^= pDest[2];
;	p = p ^ ( ( p >> 4 ) & 0x0F );
		movwf	TEMP			; [1] TEMP = W;
		movwf	TEMP2			; [1] TEMP2 = W;
		swapf	TEMP2,W			; [1] W = TEMP交换高低BIT
		andlw	0x0F			; [1] W &= 0x0F;
		xorwf	TEMP,W			; [1] W ^= TEMP;
;	p = p ^ ( ( p >> 2 ) & 0x3F );
		movwf	TEMP			; [1] TEMP = W;
		movwf	TEMP2			; [1] TEMP2 = W;
		rrf 	TEMP2,F			; [1] TEMP2 >>= 1
		rrf		TEMP2,W			; [1] W = TEMP2 >> 1
		andlw	0x3F			; [1] W &= 0x3F;
		xorwf	TEMP,W			; [1] W ^= TEMP;
;	p = p ^ ( ( p >> 1 ) & 0x7F );
		movwf	TEMP			; [1] TEMP = W;
		movwf	TEMP2			; [1] TEMP2 = W;
		rrf		TEMP2,W			; [1] W = TEMP2 >> 1
		andlw	0x7F			; [1] W &= 0x7F;
		xorwf	TEMP,F			; [1] TEMP ^= W

;	if ( p & 1 ) pDest[0] ^= 0x80;
		movf	TBUFFER+0,W		; [1] W = pDest[0]
		btfsc	TEMP, 0			; [1] if ( TEMP & 1 )
		xorlw	0x80			; [1] W ^= 0x80
		movwf	TBUFFER+0		; [1] pDest[0] = W;

		return					; [2]

⌨️ 快捷键说明

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