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

📄 test.asm

📁 用24L01的2.4Ghz无线控制风扇的源程序
💻 ASM
字号:
;---------------for test mode--------------
	PIN_IRQ_nRF24L01_TX 	EQU	P0.0	;input,Interrupt signal, from nRF24L01 
	PIN_SPI_MISO_TX		EQU	P1.7	;input,Master In, Slave Out pin 
	PIN_SPI_MOSI_TX		EQU	P1.6	;output,Master Out, Slave In pin 
	PIN_SPI_CLK_TX		EQU	P1.4	;output,Serial Clock pin

	PIN_SPI_CSN_TX		EQU	P1.3	;output,Slave Select pin(to CSN, nRF24L01)	
	PIN_CE_nRF24L01_TX	EQU	P1.2	;output,Chip Enable pin signal 
;-------------------------------------------



Port_Init_Test:
	mov	A, #0ffh		;enable all pull-up register
	mov	P5UR, A
	mov	P1UR, A
	mov	P0UR, A
	
	mov	P5M, A			;configure all pin as output
	mov	P1M, A
	mov	P0M, A
	bclr	P5M.@BIT(PIN_SPI_MISO)	;MISO input
	bclr	P0M.@BIT(PIN_IRQ_nRF24L01)	;INT input
	bclr	P1M.@BIT(PIN_SPI_MISO_TX)	;MISO input
	bclr	P0M.@BIT(PIN_IRQ_nRF24L01_TX)	;INT input
	
	clr	P1OC		;disable open-drain

	movmi	P5, #10001000b	;MISO=Hiz,MOSI=L,SCK=L,BUZZ=L,CSN=H,CE=L
	movmi	P1, #10001000b	;MISO=Hiz,MOSI=L,SCK=L,BUZZ=L,CSN=H,CE=L
	movmi	P0, #00000011b	;INT=Hiz,LED_2H=L
	ret
	
CE_Puls_TX:
	bset	PIN_CE_nRF24L01_TX
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	bclr	PIN_CE_nRF24L01_TX
	ret

Init_INT:
	clr	INTRQ
	clr	INTEN
	movmi	PEDGE, #10h		;falling edge trigger
	;B0BSET	FP01IEN			;enable INT from nRF24L01
	B0BSET	FP00IEN			;enable INT from nRF24L01(TX)
	eint	
	ret
	

SPI_RW_TX:
	movmi	bit_count, #8
ReadWrite_Loop_TX:	
	jb1	spi_data.7, MOSI_High_TX
MOSI_Low_TX:	
	bclr	PIN_SPI_MOSI_TX
	jmp	Data_Shift_Left_TX
MOSI_High_TX:
	bset	PIN_SPI_MOSI_TX
Data_Shift_Left_TX:
	rlcm	spi_data		;spi_data<<1
	bset	PIN_SPI_CLK_TX
	jb0	PIN_SPI_MISO_TX, MISO_Low_TX
MISO_High_TX:
	bset	spi_data.0
	jmp	CLK_Low_TX
MISO_Low_TX:	
	bclr	spi_data.0		
CLK_Low_TX:
	bclr	PIN_SPI_CLK_TX
	decms	bit_count		;--bit_count==0?
	jmp	ReadWrite_Loop_TX
	bclr	PIN_SPI_MOSI_TX		;MOSI low before return
	ret

;*****************************************************************
;Function:SPI_Read_Reg
;Description:SPI read write 1 byte data from register
;input:spi_reg
;output:spi_value
;*****************************************************************
SPI_Read_Reg_TX:
	bclr	PIN_SPI_CSN_TX
	movmm	spi_data, spi_reg_addr
	call	SPI_RW_TX
	clr	spi_data
	call	SPI_RW_TX
	movmm	spi_value, spi_data
	bset	PIN_SPI_CSN_TX
	ret

;*****************************************************************
;Function:SPI_Write_Reg
;Description:SPI write 1 byte data to register
;input:spi_value,spi_reg_addr
;output:spi_status stores the value of register STATUS
;*****************************************************************
SPI_Write_Reg_TX:
	bclr	PIN_SPI_CSN_TX
	movmm	spi_data, spi_reg_addr
	call	SPI_RW_TX
	movmm	spi_status, spi_data
	movmm	spi_data, spi_value
	call	SPI_RW_TX
	bset	PIN_SPI_CSN_TX
	ret

;*****************************************************************
;Function:SPI_Read_Buf
;Description:SPI write 1 byte data to register
;input:access_code0,access_code1,command
;output:none
;*****************************************************************
Read_Rx_Pload_TX:
SPI_Read_Buf_TX:
	bclr	PIN_SPI_CSN_TX
	movmi	spi_data, #RD_RX_PLOAD
	call	SPI_RW_TX
	clr	spi_data
	call	SPI_RW_TX
	movmm	access_code0, spi_data
	clr	spi_data
	call	SPI_RW_TX
	movmm	access_code1, spi_data
	clr	spi_data
	call	SPI_RW_TX
	movmm	access_code2, spi_data
	clr	spi_data
	call	SPI_RW_TX
	movmm	command, spi_data
	bset	PIN_SPI_CSN_TX
	ret

;*****************************************************************
;Function:SPI_Write_Buf
;Description:SPI write 1 byte data to register
;input:access_code0,access_code1,command
;output:none
;*****************************************************************
Write_Tx_Pload_TX:
SPI_Write_Buf_TX:
	bclr	PIN_SPI_CSN_TX
	movmi	spi_data, #WR_TX_PLOAD
	call	SPI_RW_TX
	movmm	spi_data, access_code0
	call	SPI_RW_TX
	movmm	spi_data, access_code1
	call	SPI_RW_TX
	movmm	spi_data, access_code2
	call	SPI_RW_TX
	movmm	spi_data, command
	call	SPI_RW_TX
	bset	PIN_SPI_CSN_TX
	ret

;-----------------------------------------------------------------
Tx_Mode_TX:
	bclr	PIN_SPI_CSN_TX		;Set TX address device
	movmi	spi_data, #WRITE_REG+TX_ADDR
	call	SPI_RW_TX
	movmi	spi_data, #TX_ADDR0_DEF
	call	SPI_RW_TX
	movmi	spi_data, #TX_ADDR1_DEF
	call	SPI_RW_TX
	movmi	spi_data, #TX_ADDR2_DEF
	call	SPI_RW_TX
	movmi	spi_data, #TX_ADDR3_DEF
	call	SPI_RW_TX
	movmi	spi_data, #TX_ADDR4_DEF
	call	SPI_RW_TX
	bset	PIN_SPI_CSN_TX

	nop
	nop

	bclr	PIN_SPI_CSN_TX		;Use the same address on the RX device as the TX device
	movmi	spi_data, #WRITE_REG+RX_ADDR_P0
	call	SPI_RW_TX
	movmi	spi_data, #TX_ADDR0_DEF
	call	SPI_RW_TX
	movmi	spi_data, #TX_ADDR1_DEF
	call	SPI_RW_TX
	movmi	spi_data, #TX_ADDR2_DEF
	call	SPI_RW_TX
	movmi	spi_data, #TX_ADDR3_DEF
	call	SPI_RW_TX
	movmi	spi_data, #TX_ADDR4_DEF
	call	SPI_RW_TX
	bset	PIN_SPI_CSN_TX

	nop
	nop
	
	bclr	PIN_SPI_CSN_TX		;Writes data to TX payload
	movmi	spi_data, #WR_TX_PLOAD
	call	SPI_RW_TX
	movmi	spi_data, #TX_DATA0
	call	SPI_RW_TX
	movmi	spi_data, #TX_DATA1
	call	SPI_RW_TX
	movmi	spi_data, #TX_DATA2
	call	SPI_RW_TX
	bset	PIN_SPI_CSN_TX

	movmi	spi_reg_addr, #WRITE_REG+EN_AA 
	movmi	spi_value, #0x01  	;Enable Auto.Ack:Pipe0
	call	SPI_Write_Reg_TX
	
	movmi	spi_reg_addr, #WRITE_REG+EN_RXADDR
	movmi	spi_value, #0x01	;Enable Pipe0
	call	SPI_Write_Reg_TX

	movmi	spi_reg_addr, #WRITE_REG+SETUP_RETR	;Tx configuration
	movmi	spi_value, #0x1a	;500us+ 86us, 10 retrans...
	call	SPI_Write_Reg_TX

	movmi	spi_reg_addr, #WRITE_REG+RF_CH
	movmi	spi_value, #TX_CH_DEF	;Select default RF channel 
	call	SPI_Write_Reg_TX
	
	movmi	spi_reg_addr, #WRITE_REG+RF_SETUP
	movmi	spi_value, #0x0f	;TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
	call	SPI_Write_Reg_TX

	movmi	spi_reg_addr, #WRITE_REG+CONFIG
	movmi	spi_value, #0x0e	;Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. RX_DR enabled..
	call	SPI_Write_Reg_TX
	ret


;########################################
INT0_ISR:
	bclr	FP00IRQ			;clear FP01IRQ to accept the next interrup
	movmi	spi_reg_addr, #WRITE_REG+STATUS
	movmi	spi_value, #MASK_IRQ_FLAGS
	call	SPI_Write_Reg_TX
	mov	A, spi_status
	and	A, #MASK_IRQ_FLAGS
	cmprs	A, #MASK_RX_DR_FLAG
	jz	Rx_DR_Int_TX		;RX_DR
	cmprs	A, #MASK_TX_DS_FLAG
	jz	Tx_DS_Int_TX		;TX_DS
	cmprs	A, #MASK_MAX_RT_FLAG
	jz	Max_RT_Int_TX		;MAX_RT	
	jmp 	ISR_Exit		;default exit

Rx_DR_Int_TX:
	movmi	irq_source, #RX_DR
	
	rrc	spi_status		;A<-RRC spi_status
	and	A, #07h			;get low 3 bit for Pipe Number
	add 	A, #RX_PW_P0		;get Pipe address
	mov	spi_reg_addr, A		;write the address to read from
	call	SPI_Read_Reg_TX
	movmm	pload_width, spi_value
;Rx data and store to data_buf	
	clr	Y
	movmi	Z, #data_buf
	bclr	PIN_SPI_CSN_TX
	movmi	spi_data, #RD_RX_PLOAD
	call	SPI_RW_TX
Receive_Loop_TX:	
	clr	spi_data
	call	SPI_RW_TX
	movmm	@YZ, spi_data
	inc	Z
	djnz	pload_width, Receive_Loop_TX
	bset	PIN_SPI_CSN_TX
	jmp 	ISR_Exit
	
Tx_DS_Int_TX:
	movmi	irq_source, #TX_DS
	jmp 	ISR_Exit
	
Max_RT_Int_TX:
	movmi	irq_source, #MAX_RT
	jmp 	ISR_Exit
	

;#######################################
;-----------------------------------------------------------	

/*
	call	Port_Init_Test
	call	Init_INT
	call	Rx_Mode		;port5 in Rx mode
	call	Tx_Mode_TX	;port1 in Tx mode
Loop:	
	nop
	nop
	nop
	nop
	call	CE_Puls_TX	;Tx data
lop:	
	nop
	nop
	nop
	nop
*/	

⌨️ 快捷键说明

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