51 MCU assembly control nRF24L01 source program

Publisher:DreamySunsetLatest update time:2020-02-11 Source: 51hei Reading articles on mobile phones Scan QR code
Read articles on your mobile phone anytime, anywhere

The schematic diagram of the wireless transmission circuit based on the nrfl2401 chip is as follows:
 

During the experiment, both the sender and the receiver used the same circuit. 
The sender program is as follows: 
                org 0000H         
                AJMP START 

; Delay 1/4s subroutine 
YANSHI1S: MOV R7,#250 
YANSHI1S1: MOV R6,#250 
YANSHI1S2: NOP 
                NOP 
                DJNZ R6,YANSHI1S2 
                DJNZ R7,YANSHI1S1 
                RET 


; Write single or multiple bytes starting with 58 (the number of bytes is in R3) into the chip 
XIENB: MOV R0,#58H 
                CLR P1.7 ; SCN becomes low 
XIE00: ACALL XIE1B 
                INC R0 
                DJNZ R3,XIE00 
                SETB P1.7 
                RET 

;;Write the unit 1 pointed to by R0 into the module according to the SPI timing. Before calling this subroutine, the CSN line should be turned low 
; after single or multiple calls, the CSN line will be turned high 
XIE1B: MOV R2,#8 
                MOV A,@R0 
XIE1B1: RLC A 
                MOV P1.5,C ;Send data to MOSI line 
                SETB P1.4 ;Move data into module 
                CLR P1.4 
                DJNZ R2,XIE1B1 
                RET 

;Read chip status word Read chip status word to 5FH 
DUZT: MOV R2,#8 
                SETB P1.5 
                CLR P1.7 ;CSN turns low, 
DUZT1: SETB P1.4 ;Clock rises 
                MOV C,P1.3 ;Read data on MISO line 
                MOV A,5FH 
                RLC A ;Move data into 5FH register 
                MOV 5FH,A 
                CLR P1.4                         
                DJNZ R2,DUZT1 
                SETB P1.7 ;CSN becomes high, completing a command 
                RET 






START: MOV P1,#0AFH ;Module standby 
                MOV 58H,#20H ;Prepare to write register 0 
                MOV 59H,#0EH ;Power on, transmission mode 
                MOV R3,#02H 
                ACALL XIENB 
                MOV 58H,#21H ;01 register 
                MOV 59H,#03H ;0,1 channel allows automatic response 
                MOV R3,#02H 
                ACALL XIENB 
                MOV 58H,#22H ;02 
                MOV 59H,#03H 
                MOV R3,#02H 
                ACALL XIENB 
                MOV 58H,#23H ;03 register 
                MOV 59H,#03H ;5-byte address broadband 
                MOV R3,#02H 
                ACALL XIENB 
                MOV 58H,#24H ;04 
                MOV 59H,#14H ;Retransmit wait 500uS, retransmit 4 times, 1A retransmit 10 times, at 206c 
                MOV R3,#02H 
                ACALL XIENB 
                MOV 58H,#25H ;05 register 
                MOV 59H,#07H ;RF frequency (at 2076 after assembly) 
                MOV R3,#02H 
                ACALL XIENB 
                MOV 58H,#26H ;06 
                MOV 59H,#27H ;07 is 1M transmission rate, 0dB gain, 27 is 250k transmission rate 
                MOV R3,#02H 
                ACALL XIENB 
                MOV 58H,#27H ;07 
                MOV 59H,#70H ; Clear interrupts in the module 
                MOV R3,#02H 
                ACALL XIENB 
                MOV 58H,#2AH ; 0A register (channel 0) 
                MOV 59H,#02H ; Configuration address 
                MOV 5AH,#3AH 
                MOV 5BH,#39H 
                MOV 5CH,#38H 
                MOV 5DH,#37H 
                MOV R3,#06H 
                ACALL XIENB 
                MOV 58H,#30H ; 10 register 
                MOV R3,#06H ; Send address 
                ACALL XIENB 
                MOV 58H,#2BH ; 0B register (channel 1) 
                MOV 59H,#01H ; Local address 
                MOV R3,#06H 
                ACALL XIENB 
                MOV 58H,#31H ; 11 register 
                MOV 59H,#10H ; 0 channel effective data bandwidth 16 bytes 
                MOV R3,#02H 
                ACALL XIENB 
                MOV 58H,#32H ;12 registers 
                MOV 59H,#10H ;1 channel effective data width 16 bytes 
                MOV R3,#02H 
                ACALL XIENB 
XIEFS: MOV 58H,#0A0H ;Write and send data to chip 
                MOV R0,#58H 
                MOV R3,#10H 
                CLR P1.7 
                ACALL XIE1B 
                MOV R0,#70H 
XIEXUN: ACALL XIE1B 
                INC R0 
                DJNZ R3,XIEXUN 
                SETB P1.7         
                SETB P1.6 ;Start transmission 
                MOV R7,#5 
                DJNZ R7,$ 
                CLR P1.6 
                JB P3.2,$ 
                cpl p1.0 
                ACALL DUZT ;Read status register 
                MOV 58H,#27H ;07 
                MOV 59H,#70H ;Clear interrupt 
                MOV R3,#02H 
                ACALL XIENB 
                MOV 58H,#0E1H ;Clear module send buffer 
                MOV R3,#01H         
                ACALL XIENB 
                ACALL YANSHI1S 
                SJMP XIEFS 


end 

Receiving end program: 

                org 0000H         
                AJMP START 

                org 0003H 
                AJMP EXINT0 

;Delay 1/4s subroutine 
YANSHI1S: MOV R7,#250 
YANSHI1S1: MOV R6,#250 
YANSHI1S2: NOP 
                NOP 
                DJNZ R6,YANSHI1S2 
                DJNZ R7,YANSHI1S1 
                RET 


;Write the single or multiple bytes starting from 58 (the number of bytes is in R3) into the chip 
XIENB: MOV R0,#58H 
                CLR P1.7 ;SCN becomes low 
XIE00: ACALL XIE1B 
                INC R0 
                DJNZ R3,XIE00 
                SETB P1.7 
                RET 

;;Write the unit 1 pointed to by R0 into the module according to the SPI timing. Before calling this subroutine, the CSN line should be low 
; after single or multiple calls, the CSN line will be high 
XIE1B: MOV R2,#8 
                MOV A,@R0 
XIE1B1: RLC A 
                MOV P1.5,C ;Send data to MOSI line 
                SETB P1.4 ;Move data into module 
                CLR P1.4 
                DJNZ R2,XIE1B1 
                RET 

;Read one byte of the module into the unit pointed to by R0 of the microcontroller according to the SPI timing. Before calling this subroutine, the CSN line should be changed to low 
; after single or multiple calls, the CSN line will be changed to high 
DU1B: MOV R2,#8 
DU1B1: SETB P1.4 
                MOV C,P1.3 
                RLC A 
                CLR P1.4 
                DJNZ R2,DU1B1 
                MOV @R0,A 
                RET 

;Read the module receive buffer data into the unit pointed to by R0 of the microcontroller according to the SPI timing, the number of bytes is in R3 
DUNB: PUSH 00H 
                MOV 58H,#61H ;Write one byte command 
                MOV R0,#58H 
                CLR P1.7 
                ACALL XIE1B 
                POP 00H ;R0 points to the first address of the receiving buffer 
DUXUN: ACALL DU1B 
                INC R0 
                DJNZ R3,DUXUN 
                SETB P1.7 
                RET         

;Read chip status word Read chip status word to 5FH 
DUZT: MOV R2,#8 
                SETB P1.5 ;Input chip 1 
                CLR P1.7 ;CSN becomes low, 
DUZT1: SETB P1.4 ;Clock rises 
                MOV C,P1.3 ;Read data on MISO line 
                MOV A,5FH 
                RLC A ;Move data into 5FH register 
                MOV 5FH,A 
                CLR P1.4                         
                DJNZ R2,DUZT1 
                SETB P1.7 ;CSN becomes high, complete a command 
                RET 
...

Reference address:51 MCU assembly control nRF24L01 source program

Previous article:51 single chip microcomputer automatic water vending machine
Next article:Distance detection based on single chip microcomputer and ultrasonic ranging module

Recommended ReadingLatest update time:2024-11-15 13:41

Three steps for learning 51 microcontroller
Looking back, it has been six years since I first learned about microcontrollers. During the study period, I used 51 microcontrollers, Freescale microcontrollers, STM16, STM32 and other microcontrollers. Every time I come into contact with a new microcontroller, I will first familiarize myself with its basic develo
[Microcontroller]
Design of 51 single chip LCD screen key electronic clock
The LCD screen is JM12864 or FYD12864 (with font library). I have no problem using these two types of screens. 4 rows * 8 columns of Chinese characters = 32 serial communication interfaces P1.5--P1.7. You can modify the corresponding interfaces according to your circuit. #include #define uchar unsigned char void
[Microcontroller]
Design of 51 single chip LCD screen key electronic clock
51 MCU stack
 The stack of a general compiler is used to save local variables, function parameters, function return values, interrupt context information, etc. However, Keil pre-allocates space for local variables and function parameters (placed in the static global variable area), and Keil's stack is only used to save the PC and
[Microcontroller]
Design of I2C bus driver for C51 microcontroller simulation (2)
/************************************ I2C_RcvB ************ *********************  Function name: uchar I2C_RcvB()  Entrance:  Export: uchar type data  Functional description:  Receive data from the device and determine the bus error (no response signal is sent). After receiving the data, the response funct
[Microcontroller]
C51 MCU timer study notes
/*------------------------------------------------ -------*/ /*-------------author: robinson_911 -----------------------*/ /* -------------date: February 2014-------------------------*/ /* -------------content: About serial port timer program -----------*/ // At 22.1184MHZ, send data through the serial port every 1s t
[Microcontroller]
51 single chip microcomputer - independent button
Independent button programming ideas   #include reg51.h #include intrins.h //Circular right shift function library void delay_10_ms(unsigned int t); sbitP1_0=P1^0; //P1 port is a button void main(void) { unsigned char i; P0=0x01; while(1) { if(P1_0==0) //button pressed { delay_10_
[Microcontroller]
51 MCU timing alarm clock simulation program
The simulation schematic is as follows Basic functions of timer alarm 1. Basic functions of the timer alarm:          Use a 3-digit seven-segment display to show the timer and remaining time (in seconds)          There are 3 buttons to set the timing time:          Operation key K1: Start timing (default is 60 second
[Microcontroller]
51 MCU timing alarm clock simulation program
XS128 MCU Experiment: Nokia 5110 LCD Display
/************Included header files************************************/   #include /* common definitions and macros */   #include "derivative.h" /* derivative-specific definitions */   #include "WQ.h"   #include "Font6_8.h"   #include "Bitmap.h"   #include "Font16_16. h"   #include "Font8_16.h" /**************
[Microcontroller]
Latest Microcontroller Articles
Change More Related Popular Components

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号