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

📄 nrf24l01.asm.bak

📁 Holtek audio decoder , Dongle 参考范例
💻 BAK
📖 第 1 页 / 共 2 页
字号:

NRF_TABLE_init:

		mov	A,LOW( nRF2401_table)	
		mov	TBLP,A
		mov	A,HIGH(nRF2401_table)
		mov	TBHP,A				

		clr	UCC.@UCC_SYSCLK			;12MHz SYSCLK
		set	SIO_CSEN 			;SPI Chip Select Function Enable
		set	SIO_CPOL 			;rising edge change data
		clr	SBCR		
		

		;---Master Mode, SCLK=fSIO
		clr	M1		
		clr	M0				
		clr	CKS				;Fsio=Fsys/2
	
NRF_SPI_Table:
	
		clr	TRF
		set	MLS				;MSB shift first 
		set	SBEN				;SPI Enable		
		clr	intc1.@INTC1_ESII		;SPI Interrupt Disable
		set	CSEN				;start SPI enable

;SPI_Test_Polling_START:	

		TABRDC	 table_data
	   	XMOV	SBDR,table_data   		;Low byte first MSB first	
$1:       						;Send operation SPI Command 	
   		SNZ	TRF
   		JMP	$1			  	
      		CLR	TRF	    			
		NOP
		XMOV	SBDR,TBLH		  	;High byte MSB first
$2:        						;Send operation Write SPI Data
   		SNZ	TRF
   		JMP	$2			  	
      		CLR	TRF	    				
		
		clr	CSEN				;End SPI operation
		clr	SBEN				;SPI Disable
		inc	TBLP
		SDZ	temp_num			;Table end?
		jmp	NRF_SPI_Table
ret


;***************************************************************
;		nRF24L01 SPI 16bit 
;
;	1.only for read/write register or 2-Byte operation
;       2.clr/set bFlag_bFlag_End_SPI_Operation.
;	  If we are not have any payload to send/receiver please clr,else set.
;       3.The first  8 bit will save in  COMMAND_H from SBDR
;         The second 8 bit will save in  COMMAND_L from SBDR
;***************************************************************
NRF_SPI_16bit:
		call	SPI_EN
		
	   	XMOV	SBDR,COMMAND_H   		 
$3:       	
		;nop
		;nop
		;nop				 	
   		SNZ	TRF
   		JMP	$3			  	
      		CLR	TRF	    			
      		  		   		
		XMOV	COMMAND_H,SBDR

		snz	bFlag_End_SPI_Operation		; 1:16 bit mode, 0:8 bit mode
		jmp	$5
		XMOV	SBDR,COMMAND_L		  		 
$4:        	
		;nop
		;nop
		;nop			 
   		SNZ	TRF
   		JMP	$4			  	
      		CLR	TRF	    				
		XMOV	COMMAND_L,SBDR
$5:
		clr	CSEN				;End SPI operation
		clr	SBEN				;SPI Disable

ret


;***************************************************************
;		nRF24L01 SPI payload (32Byte) TX Payload Only 
;		1.only use in TX payload transfer. 
;		2.33 byte to send. 1 byte for command ,32 byte for payload data.
;*************************************************************** 		
NRF_SPI_TX_payload:
		KMOV	temp_num,Payload_Size	  	;For payload loop times
		
		call	SPI_EN

		;--Send TX command
		KMOV	SBDR,NRF_CMD_TX_PAYLOAD
$2:
		snz	TRF
		jmp	$2				  	
		CLR	TRF	   				

		kmov	BP,001h
Payload_loop_TX:
       		KMOV	SBDR,R1  
;$5:							; 200us at 12Mhz 
;		snz	TRF				; 200us at 16Mhz
;		jmp	$5
  		kmov	R1,080h				; 2006.8.23 clear TX RAM (unsigned)	        		
		inc     MP1
		CLR	TRF	
		SDZ	temp_num
		jmp	Payload_loop_TX

		clr	CSEN			    	;End SPI operation
		clr	SBEN				;SPI Disable
		
		clr	BP
ret


;***************************************************************
;		nRF24L01 SPI payload (32Byte) RX Payload Only
;		1.only use in RX payload transfer. 
;		2.33 byte to send. 1 byte for command ,32 byte for payload data.
;*************************************************************** 		
NRF_SPI_RX_payload:
		KMOV	temp_num,Payload_Size	  	;For payload loop times
		inc	temp_num
		call	SPI_EN

		;--Send RX command
		KMOV	SBDR,NRF_CMD_RX_PAYLOAD
$3:
		snz	TRF
		jmp	$3		  	
		kmov	RX_FIFO_Status,SBDR
		
       		CLR	TRF	   					  	
		
		kmov	RX_key_code,MP1			;for read key code 2007.05.11
		kmov	BP,001h
		jmp	Payload_loop_RX1
Payload_loop_RX:			  		  		  		   					 
		KMOV	R1,SBDR
		inc	MP1		
		clr	TRF
Payload_loop_RX1:
       		KMOV	SBDR,R1      		
;$6:
; 		snz	TRF
;		jmp	$6
		NOP		
		;CLR	TRF
		SDZ	temp_num
		jmp	Payload_loop_RX

		clr	CSEN			    	;End SPI operation
		clr	SBEN				;SPI Disable
	
		kmov	MP1,RX_key_code
		kmov	RX_key_code,R1
	
		clr	BP
ret
	
	
SPI_EN:
		clr	UCC.@UCC_SYSCLK			;12MHz SYSCLK
		set	SIO_CSEN 			;SPI Chip Select Function Enable
		set	SIO_CPOL 			;rising edge change data
		clr	SBCR		
		
		;--SCLK=fSIO
		clr	M1		
		clr	M0				
		clr	CKS				;Fsio=Fsys/2
	
		clr	TRF
		set	MLS				;MSB shift first 
		set	SBEN				;SPI Enable		
		clr	intc1.@INTC1_ESII		;SPI Interrupt Disable
		set	CSEN				;Chip Select Enable,Start SPI to send TX payload data
ret


;***************************************************************
;		nRF24L01 SPI Config address of TX transmit and RX receive.
;		1.Config/Change TX point to RX point 0 ~ 5 Address.
;		2.Config/Change RX point Address.
;		3.Before use this function,must to check the address value.
;		4.How to use:
;			a.set  TX_ADDRESS_Select.BitNum
;			b.call nRF_ADDR_WRITE
;			c.clr  TX_ADDRESS_Select.BitNum
;*************************************************************** 	
	
CODE2            .section        PAGE  'code'
TX_to_P0_ADDR_Table:					;TX_ADDRESS_Select.0
	DC 0E1h,0E3h,0E5h,0E7h,0E9h;
TX_to_P1_ADDR_Table:					;TX_ADDRESS_Select.1
	DC 0C2h,0C3h,0C4h,0C5h,0C6h;
TX_to_P2_ADDR_Table:					;TX_ADDRESS_Select.2
	DC 0C2h,0C3h,0C4h,0C5h,0C7h;
TX_to_P3_ADDR_Table:					;TX_ADDRESS_Select.3
	DC 0C2h,0C3h,0C4h,0C5h,0C8h;
TX_to_P4_ADDR_Table:					;TX_ADDRESS_Select.4
	DC 0C2h,0C3h,0C4h,0C5h,0C9h;
TX_to_P5_ADDR_Table:					;TX_ADDRESS_Select.5
	DC 0C2h,0C3h,0C4h,0C5h,0CAh;

RX_P0_ADDR_Table:					;RX_ADDRESS_Select.0
	DC 0E1h,0E3h,0E5h,0E7h,0E9h;
RX_P1_ADDR_Table:					;RX_ADDRESS_Select.1
	DC 0C2h,0C3h,0C4h,0C5h,0C6h;
RX_P2_ADDR_Table:					;RX_ADDRESS_Select.2
	DC 0C7h;
RX_P3_ADDR_Table:					;RX_ADDRESS_Select.3
	DC 0C8h;
RX_P4_ADDR_Table:					;RX_ADDRESS_Select.4
	DC 0C9h;
RX_P5_ADDR_Table:					;RX_ADDRESS_Select.5
	DC 0CAh;



nRF_TX_ADDR_WRITE:
		mov	a,TX_ADDRESS_Select
		xor	a,00h				
		sz	z
		ret					;not set any TX_ADDR to write
		
		KMOV    temp_num,Address_Size	        ;For Address loop 5 times

		call	SPI_EN

	;=== Address define set for configuation 

        	snz	TX_ADDRESS_Select.0
		jmp	$1

		mov	a,low TX_to_P0_ADDR_Table
		mov	TBLP,a
		mov	a,high TX_to_P0_ADDR_Table
		mov	TBHP,a
		mov	a,30h
		MOV     SBDR,a
		jmp     $6
;----------------------------------
$1:
		snz	TX_ADDRESS_Select.1
		jmp	$2

		mov	a,low TX_to_P1_ADDR_Table
		mov	TBLP,a
		mov	a,high TX_to_P1_ADDR_Table
		mov	TBHP,a
		mov	a,30h
		MOV     SBDR,a
		jmp     $6
;----------------------------------
$2:
		snz	TX_ADDRESS_Select.2
		jmp	$3

		mov	a,low TX_to_P2_ADDR_Table
		mov	TBLP,a
		mov	a,high TX_to_P2_ADDR_Table
		mov	TBHP,a
		mov	a,30h
		MOV     SBDR,a
		jmp     $6
;----------------------------------
$3:
		snz	TX_ADDRESS_Select.3
		jmp	$4

		mov	a,low TX_to_P3_ADDR_Table
		mov	TBLP,a
		mov	a,high TX_to_P3_ADDR_Table
		mov	TBHP,a
		mov	a,30h
		MOV     SBDR,a
		jmp     $6
;----------------------------------
$4:
		snz	TX_ADDRESS_Select.4
		jmp	$6

		mov	a,low TX_to_P4_ADDR_Table
		mov	TBLP,a
		mov	a,high TX_to_P4_ADDR_Table
		mov	TBHP,a
		mov	a,30h
		MOV     SBDR,a
		jmp     $6
;----------------------------------
$5:
		snz	TX_ADDRESS_Select.5
		ret

		mov	a,low TX_to_P5_ADDR_Table
		mov	TBLP,a
		mov	a,high TX_to_P5_ADDR_Table
		mov	TBHP,a
		mov	a,30h
		MOV     SBDR,a
		jmp	$6
;----------------------------------
;------ Write adress value --------
$6:
		snz	TRF
		jmp	$6    				  	
    	        CLR	TRF

ADDR_loop_TX:
		TABRDC	table_data
       	        KMOV	SBDR,table_data  
$7:		        	
		snz	TRF
		jmp	$7
		inc     TBLP
		CLR	TRF	
		SDZ	temp_num
		jmp     ADDR_loop_TX

		clr	CSEN			    	  ;End SPI operation
		clr	SBEN				  ;SPI Disable

ret		
	
;==========================================================	
	
nRF_RX_ADDR_WRITE:
		KMOV    temp_num,Address_Size	        ;For P0 P1 Address loop 5 times

		call	SPI_EN

        	snz	RX_ADDRESS_Select.0
		jmp	$1

		clr	RX_ADDRESS_Select.0
		mov	a,low RX_P0_ADDR_Table
		mov	TBLP,a
		mov	a,high RX_P0_ADDR_Table
		mov	TBHP,a
		mov	a,02Ah
		MOV     SBDR,a
		jmp     $6
;----------------------------------
$1:
		snz	RX_ADDRESS_Select.1
		jmp	$2

		clr	RX_ADDRESS_Select.1
		mov	a,low RX_P1_ADDR_Table
		mov	TBLP,a
		mov	a,high RX_P1_ADDR_Table
		mov	TBHP,a
		mov	a,02Bh
		MOV     SBDR,a
		jmp     $6					
;----------------------------------
$2:
		snz	RX_ADDRESS_Select.2
		jmp	$3

		clr	RX_ADDRESS_Select.2
		KMOV    temp_num,01h
		mov	a,low RX_P2_ADDR_Table
		mov	TBLP,a
		mov	a,high RX_P2_ADDR_Table
		mov	TBHP,a
		mov	a,02Ch
		MOV     SBDR,a
		jmp     $6
;----------------------------------
$3:
		snz	RX_ADDRESS_Select.3
		jmp	$4

		clr	RX_ADDRESS_Select.3
		KMOV    temp_num,01h
		mov	a,low RX_P3_ADDR_Table
		mov	TBLP,a
		mov	a,high RX_P3_ADDR_Table
		mov	TBHP,a
		mov	a,2Dh
		MOV     SBDR,a
		jmp	$6
;----------------------------------
$4:
		snz	RX_ADDRESS_Select.4
		jmp	$5

		clr	RX_ADDRESS_Select.4
		KMOV    temp_num,01h
		mov	a,low RX_P4_ADDR_Table
		mov	TBLP,a
		mov	a,high RX_P4_ADDR_Table
		mov	TBHP,a
		mov	a,2Eh
		MOV     SBDR,a
		jmp	$6
;----------------------------------
$5:
		snz	RX_ADDRESS_Select.5
		ret

		clr	RX_ADDRESS_Select.5
		KMOV    temp_num,01h
		mov	a,low RX_P5_ADDR_Table
		mov	TBLP,a
		mov	a,high RX_P5_ADDR_Table
		mov	TBHP,a
		mov	a,2Fh
		MOV     SBDR,a
		jmp	$6				

;----------------------------------
;------ Write adress value --------
$6:
		snz	TRF
		jmp	$6     				  	
    	        CLR	TRF

ADDR_loop_RX:
		TABRDC	table_data
       	        KMOV	SBDR,table_data  
$7:		        	
		snz	TRF
		jmp	$7
		inc     TBLP
		CLR	TRF	
		SDZ	temp_num
		jmp     ADDR_loop_RX

		clr	CSEN			    	  ;End SPI operation
		clr	SBEN				  ;SPI Disable

ret			


;***************************************************************
;		nRF24L01 TX/RX address read.
;		1.How to use:
;			a.set  RX_ADDRESS_Select.BitNum
;			b.call nRF_RX_ADDR_READ
;			c.clr  RX_ADDRESS_Select.BitNum
;
;*************************************************************** 		

nRF_RX_ADDR_READ:
		kmov	temp_num,Address_Size	
		
		call	SPI_EN
					
 		kmov	mp1,(OFFSET nRF_ADDR_value)
 		snz	RX_ADDRESS_Select.0		;RX_ADDR_P0(0AH)
		jmp	$1

		clr	RX_ADDRESS_Select.0
		mov	a,0Ah
		MOV 	SBDR,a
		jmp 	$7
;----------------------------------
$1:
		snz	RX_ADDRESS_Select.1		;RX_ADDR_P1(0BH)
		jmp	$2
		
		clr	RX_ADDRESS_Select.1
		mov	a,0BH
		MOV 	SBDR,a
		jmp 	$7
;----------------------------------
$2:
		snz	RX_ADDRESS_Select.2		;RX_ADDR_P2(0CH)
		jmp	$3

		clr	RX_ADDRESS_Select.2
		mov	a,0CH
		MOV 	SBDR,a
		kmov	temp_num,01h
		jmp 	$7
;----------------------------------
$3:
		snz	RX_ADDRESS_Select.3		;RX_ADDR_P3(0DH)
		jmp	$4

		clr	RX_ADDRESS_Select.3
		mov	a,0DH
		MOV 	SBDR,a
		kmov	temp_num,01h
		jmp 	$7
;----------------------------------
$4:
		snz	RX_ADDRESS_Select.4		;RX_ADDR_P4(0EH)
		jmp	$5
		
		clr	RX_ADDRESS_Select.4
		mov	a,0EH
		MOV 	SBDR,a
		kmov	temp_num,01h
		jmp 	$7
;----------------------------------
$5:
		snz	RX_ADDRESS_Select.5		;RX_ADDR_P5(0FH)
		jmp	$6

		clr	RX_ADDRESS_Select.5
		mov	a,0FH
		MOV 	SBDR,a
		kmov	temp_num,01h
		jmp 	$7
;----------------------------------
$6:
		snz	RX_ADDRESS_Select.6		;TX_ADDR(10H)
		ret

		clr	RX_ADDRESS_Select.6
		mov	a,10H
		MOV 	SBDR,a
		jmp	$7
;----------------------------------
;------ Read adress value --------
$7:
		snz	TRF
		jmp	$7
		
		kmov	RX_FIFO_Status,SBDR      				  	
    		CLR	TRF

read_addr_loop:

       		KMOV	SBDR,R1  
$8:
		snz	TRF
		jmp	$8
		KMOV	R1,SBDR
		inc	MP1
		CLR	TRF
		SDZ	temp_num
		jmp	read_addr_loop

		clr	CSEN			    	  	;End SPI operation
		clr	SBEN					;SPI Disable
ret


;*****************************************************************
;	switch MCU sys from 12MHz to 16MHz beside USB clock 
;*****************************************************************
MCU_16M:
		mov	a,UCC
		or	a,020h
		mov	UCC,a
ret	


Public		TX_RX_Switch
Public		RX_mode_set
Public		nRF_TX_Transmit
Public		nRF_RX_Receive
Public		nRF_initial
Public		nRF_int
Public		MCU_16M

⌨️ 快捷键说明

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