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

📄 pkt.asm

📁 基于跳频的音频连接系统设计(Mono Audio Link Using Frequency Hopping)及源代码
💻 ASM
字号:

;*******************************************************************************************************
;*                                                                                                     *
;*        **********                                                                                   *
;*       ************                                                                                  *
;*      ***        ***                                                                                 *
;*      ***   +++   ***                                                                                *
;*      ***   + +   ***                                                                                *
;*      ***   +            			            				     	Packet module																 *			
;*      ***   + +   ***      														 								                               *
;*      ***   +++   ***                                                                                *
;*      ***        ***                                                                                 *
;*       ************                                                                                  *
;*        **********                                                                                   *
;*                                                                                                     *
;*******************************************************************************************************
;* Packet handling module.																																						 *
;* The location and boundaries of rxBuffer, txBuffers, audioIn and audioOut are built									 *
;* directly in to the pointer operations.                                                              *                                      
;*******************************************************************************************************
;* Assembler: Keil A51                                                                                 *
;* Target platform:  8051F005                                                                          *
;*******************************************************************************************************
;* Revision history:   																					 																	     *
;* Initial release, HKI, 01.08.2004    			                                                      		 *
;******************************************************************************************************/

NAME PKT

#include <ASMinclude.h>
?PR?packetize?PKT			SEGMENT CODE ?PR?dePacketize?PKT 	SEGMENT CODE 

PUBLIC packetizePUBLIC dePacketize 


EXTRN CODE (_compress)

;******************************************************************************************************
;* 																						Functions					   							                		  *
;******************************************************************************************************

; Note: tx/rx buffers are inverted (fisrt entry at 0xxx00)
; as DJNZ(2/3) will give faster code than INC/ADDC + CJNE(1+3/4)


; Create packet header or,
; read one sample pair from audioIn and packetise to txBuffer


RSEG	?PR?packetize?PKTpacketize:

		PUSH	PSW
		PUSH	ACC
		MOV		PSW, #0x08										; Register bank 1
		MOV		PAGEREG, audioInReadPage			; Set source page												

		; Check if we are at the beginning of a new packet
		MOV		A, txBufferWriteLowB	
		JZ		MAKE_HEADER  
		
		; Read audio data from audioIn	
		MOVX	A, @audioInReadLowB						
		MOV		RegBank0R4ptr, A
		INC		audioInReadLowB

		MOVX	A, @audioInReadLowB
		MOV		RegBank0R5ptr, A
		INC		audioInReadLowB

		MOVX	A, @audioInReadLowB
		MOV		RegBank0R6ptr, A
		INC		audioInReadLowB

		MOVX	A, @audioInReadLowB		
		MOV		RegBank0R7ptr, A													
		INC		audioInReadLowB

		CLR		RS0														; Goto Register Bank 0
		LCALL	_compress
		SETB	RS0

		MOV		R5, RegBank0R7ptr
		MOV		R4, RegBank0R6ptr

		CJNE	audioInReadLowB, #0x00, STILL_ON_IN_PAGE											
		INC		PAGEREG
		ORL		PAGEREG, #0x04								; Make sure we stay within the 1024 byte buffer
		ANL		PAGEREG, #0x07
		MOV		audioInReadPage, PAGEREG

STILL_ON_IN_PAGE:
		MOV		PAGEREG, txBufferWritePage		; Set destination page
		
		MOV		A, R4													; Move the 4 bytes to txBuffer
		MOVX	@txBufferWriteLowB, A						
		DEC		txBufferWriteLowB

		MOV		A, R5
		MOVX	@txBufferWriteLowB, A				

		DJNZ	txBufferWriteLowB, EXIT_PKT
		DEC		PAGEREG												; Make sure we stay within the 1024 byte buffer				
		ANL		PAGEREG, #0x03
		MOV		txBufferWritePage, PAGEREG

EXIT_PKT:
		POP		ACC
		POP		PSW
		RET

MAKE_HEADER:
		MOV		PAGEREG, txBufferWritePage

		MOV		A, seqNo											; Sequence number
		INC		seqNo				
		MOVX	@txBufferWriteLowB, A		
		DEC		txBufferWriteLowB	
		
		MOV		A, #SYS_ID										; System ID							
		MOVX	@txBufferWriteLowB, A	
		DEC		txBufferWriteLowB	

		MOV		A, #0xFF											; Packet length - not currently in use
		MOVX	@txBufferWriteLowB, A				
		DEC		txBufferWriteLowB

		MOV		A, #0xFF											; Parameters - not currently in use
		MOVX	@txBufferWriteLowB, A				
		DEC		txBufferWriteLowB	
		
					
		DEC		txBufferWriteLowB			
		DEC		txBufferWriteLowB			
		DEC		txBufferWriteLowB			
		DEC		txBufferWriteLowB			

		POP		ACC
		POP		PSW
		RET

;*******************************************************************************************************

; Read header or,
; de-packetise to audioOut


RSEG	?PR?dePacketize?PKTdePacketize:

		PUSH	PSW
		PUSH	ACC
		MOV		PSW, #0x08										; Register bank 1
		MOV		PAGEREG, rxBufferReadPage			; Set source page
									
		MOV		A, rxBufferReadLowB	
		JZ		READ_HEADER  
		
		; Read from rxBuffer	
		MOVX	A, @rxBufferReadLowB					
		MOV		R4, A
		DEC		rxBufferReadLowB

		MOVX	A, @rxBufferReadLowB
		MOV		R5, A

		DJNZ	rxBufferReadLowB, STILL_ON_RX_PAGE											
		DEC		PAGEREG
		ANL		PAGEREG, #0x03								; Make sure we stay within the 1024 byte buffer
		MOV		rxBufferReadPage, PAGEREG

STILL_ON_RX_PAGE:
		MOV		PAGEREG, audioOutWritePage		; Set destination page
		
		MOV		A, R4																		
		MOVX	@audioOutWriteLowB, A					
		INC		audioOutWriteLowB
		INC		audioOutWriteLowB		
		MOVX	@audioOutWriteLowB, A

		DEC		audioOutWriteLowB
		MOV		A, R5

		MOVX	@audioOutWriteLowB, A				
		INC		audioOutWriteLowB 
		INC		audioOutWriteLowB		
		MOVX	@audioOutWriteLowB, A

		INC		audioOutWriteLowB

		CJNE	audioOutWriteLowB, #0x00, EXIT_DEPKT
													
		INC		PAGEREG												; Make sure we stay within the 1024 byte buffer				
		ORL		PAGEREG, #0x04
		ANL		PAGEREG, #0x07
		MOV		audioOutWritePage, PAGEREG

EXIT_DEPKT:
		POP		ACC
		POP		PSW

		RET

READ_HEADER:		

		DEC		rxBufferReadLowB							; Sequence number - processed by readFIFO()
		DEC		rxBufferReadLowB							; System ID 			- processed by readFIFO()
		DEC		rxBufferReadLowB							; Packet length	  - not currently in use
		DEC		rxBufferReadLowB							; Parameters			- not currently in use

		DEC		rxBufferReadLowB
		DEC		rxBufferReadLowB
		DEC		rxBufferReadLowB
		DEC		rxBufferReadLowB

		POP		ACC
		POP		PSW
		RET

;*******************************************************************************************************
END

⌨️ 快捷键说明

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