?? nrf24l01.asm.bak
字號(hào):
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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -