51单片机汇编控制nRF24L01源程序

2020-02-11来源: 51hei关键字:51单片机  汇编控制  nRF24L01

基于nrfl2401芯片的无线传输电路原理图如下:
 

实验时收发双方都采用相同的电路 
发送方程序如下: 
                org        0000H         
                AJMP        START 

;延时1/4s子程序 
YANSHI1S:        MOV        R7,#250 
YANSHI1S1:        MOV        R6,#250 
YANSHI1S2:        NOP 
                NOP 
                DJNZ        R6,YANSHI1S2 
                DJNZ        R7,YANSHI1S1 
                RET 


;将58开始的单或多字节(字节数在R3中)写入芯片 
XIENB:                MOV        R0,#58H 
                CLR        P1.7                ;SCN变低 
XIE00:                ACALL        XIE1B 
                INC        R0 
                DJNZ        R3,XIE00 
                SETB        P1.7 
                RET 

;;将R0所指1单元按SPI时序写入模块,调用该子程序前,应将CSN线变低 
;单次或多次调用完成后将CSN线变高 
XIE1B:                MOV        R2,#8 
                MOV        A,@R0 
XIE1B1:                RLC        A 
                MOV        P1.5,C                ;数据送上MOSI线 
                SETB        P1.4                ;数据移入模块 
                CLR        P1.4 
                DJNZ        R2,XIE1B1 
                RET 

;读芯片状态字        将芯片状态字读到5FH 
DUZT:                MOV        R2,#8 
                SETB        P1.5 
                CLR        P1.7                ;CSN变低, 
DUZT1:                SETB        P1.4                ;时钟上升 
                MOV        C,P1.3                ;读入MISO线上的数据 
                MOV        A,5FH 
                RLC        A                ;数据移入5FH寄存器 
                MOV        5FH,A 
                CLR        P1.4                         
                DJNZ        R2,DUZT1 
                SETB        P1.7                ;CSN变高,完成一次命令 
                RET 






START:                MOV        P1,#0AFH        ;模块待机 
                MOV        58H,#20H        ;准备写0寄存器 
                MOV        59H,#0EH        ;上电,发射模式 
                MOV        R3,#02H 
                ACALL        XIENB 
                MOV        58H,#21H        ;01寄存器 
                MOV        59H,#03H        ;0,1通道允许自动应答 
                MOV        R3,#02H 
                ACALL        XIENB 
                MOV        58H,#22H        ;02 
                MOV        59H,#03H 
                MOV        R3,#02H 
                ACALL        XIENB 
                MOV        58H,#23H        ;03寄存器 
                MOV        59H,#03H        ;5字节地址宽带 
                MOV        R3,#02H 
                ACALL        XIENB 
                MOV        58H,#24H        ;04 
                MOV        59H,#14H        ;重发等待500uS,重发4次,1A则重发10次,在206c处 
                MOV        R3,#02H 
                ACALL        XIENB 
                MOV        58H,#25H        ;05寄存器 
                MOV        59H,#07H        ;射频频率(汇编后在2076处) 
                MOV        R3,#02H 
                ACALL        XIENB 
                MOV        58H,#26H        ;06 
                MOV        59H,#27H        ;07为1M传输速率,0dB增益,27则为250k传输速率 
                MOV        R3,#02H 
                ACALL        XIENB 
                MOV        58H,#27H        ;07 
                MOV        59H,#70H        ;清模块内中断 
                MOV        R3,#02H 
                ACALL        XIENB 
                MOV        58H,#2AH        ;0A寄存器(通道0) 
                MOV        59H,#02H        ;配置地址 
                MOV        5AH,#3AH 
                MOV        5BH,#39H 
                MOV        5CH,#38H 
                MOV        5DH,#37H 
                MOV        R3,#06H 
                ACALL        XIENB 
                MOV        58H,#30H        ;10寄存器 
                MOV        R3,#06H                ;发送地址 
                ACALL        XIENB 
                MOV        58H,#2BH        ;0B寄存器(通道1) 
                MOV        59H,#01H        ;本机地址 
                MOV        R3,#06H 
                ACALL        XIENB 
                MOV        58H,#31H        ;11寄存器 
                MOV        59H,#10H        ;0通道有效数据宽带16字节 
                MOV        R3,#02H 
                ACALL        XIENB 
                MOV        58H,#32H        ;12寄存器 
                MOV        59H,#10H        ;1通道有效数据宽度16字节 
                MOV        R3,#02H 
                ACALL        XIENB 
XIEFS:                MOV        58H,#0A0H        ;写发送数据到芯片 
                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                ;启动发射 
                MOV        R7,#5 
                DJNZ        R7,$ 
                CLR        P1.6 
                JB        P3.2,$ 
                cpl        p1.0 
                ACALL        DUZT                ;读状态寄存器 
                MOV        58H,#27H        ;07 
                MOV        59H,#70H        ;清中断 
                MOV        R3,#02H 
                ACALL        XIENB 
                MOV        58H,#0E1H        ;清模块发送缓冲区 
                MOV        R3,#01H         
                ACALL        XIENB 
                ACALL        YANSHI1S 
                SJMP        XIEFS 


end 

接收端程序: 

                org        0000H         
                AJMP        START 

                org        0003H 
                AJMP        EXINT0 

;延时1/4s子程序 
YANSHI1S:        MOV        R7,#250 
YANSHI1S1:        MOV        R6,#250 
YANSHI1S2:        NOP 
                NOP 
                DJNZ        R6,YANSHI1S2 
                DJNZ        R7,YANSHI1S1 
                RET 


;将58开始的单或多字节(字节数在R3中)写入芯片 
XIENB:                MOV        R0,#58H 
                CLR        P1.7                ;SCN变低 
XIE00:                ACALL        XIE1B 
                INC        R0 
                DJNZ        R3,XIE00 
                SETB        P1.7 
                RET 

;;将R0所指1单元按SPI时序写入模块,调用该子程序前,应将CSN线变低 
;单次或多次调用完成后将CSN线变高 
XIE1B:                MOV        R2,#8 
                MOV        A,@R0 
XIE1B1:                RLC        A 
                MOV        P1.5,C                ;数据送上MOSI线 
                SETB        P1.4                ;数据移入模块 
                CLR        P1.4 
                DJNZ        R2,XIE1B1 
                RET 

;按SPI时序读模块一字节入单片机R0所指单元,调用该子程序前,应将CSN线变低 
;单次或多次调用完成后将CSN线变高 
DU1B:                MOV        R2,#8 
DU1B1:                SETB        P1.4 
                MOV        C,P1.3 
                RLC        A 
                CLR        P1.4 
                DJNZ        R2,DU1B1 
                MOV        @R0,A 
                RET 

;按SPI时序读模块接收缓冲区数据入单片机R0所指单元,字节数在R3中 
DUNB:                PUSH        00H 
                MOV        58H,#61H        ;写一字节命令 
                MOV        R0,#58H 
                CLR        P1.7 
                ACALL        XIE1B 
                POP        00H                ;R0指向接收缓冲区首地址 
DUXUN:                ACALL        DU1B 
                INC        R0 
                DJNZ        R3,DUXUN 
                SETB        P1.7 
                RET         

;读芯片状态字        将芯片状态字读到5FH 
DUZT:                MOV        R2,#8 
                SETB        P1.5                ;输入芯片1 
                CLR        P1.7                ;CSN变低, 
DUZT1:                SETB        P1.4                ;时钟上升 
                MOV        C,P1.3                ;读入MISO线上的数据 
                MOV        A,5FH 
                RLC        A                ;数据移入5FH寄存器 
                MOV        5FH,A 
                CLR        P1.4                         
                DJNZ        R2,DUZT1 
                SETB        P1.7                ;CSN变高,完成一次命令 
                RET 
...

关键字:51单片机  汇编控制  nRF24L01 编辑:什么鱼 引用地址:http://news.2689mr.com/mcu/ic487849.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:51单片机自动售水机
下一篇:基于单片机和超声波测距模块的距离检测

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

51单片机控制+MAX7219+DS1302 电子钟
;   ***************************************************/#include <reg52.h>#include <intrins.h>   #define uchar unsigned char#define uint unsigned intsbit sclk=P1^0;sbit io=P1^1;sbit ce=P1^2;uchar time_data[]={13,6,4,17,21,51,30};//? ? ? ? ? ? ?uchar write_add[]={0x8c,0x8a,0x88
发表于 2020-09-16
51单片机控制两相四线步进电机
最近学习步进电机的驱动原理,照着教材自己实践了一下用ULN2003驱动28BYJ-48两相5线步进电机,可以正常转动。手头有一个旧光驱,拆开发现里面有三个电机,其中有一个控制激光头寻迹的两相四线步进电机,我就用51的单片机让它也转起来。一开始照葫芦画瓢用ULN2003驱动,结果发现无论如何也不行。原来ULN2003基本没输出电流,只能驱动有公共端的两相五线、两相六线步进电机,不能驱动2相4线步进电机。然后改用L293D驱动,可以转动。通过按钮控制正反转时发现,按键释放后,电机迅速发热,烫手。用万用表测量,发现电机A,A-或B,B-直接存在电位差!应该是按键释放时,IN1-IN4没有归零。找到问题,就容易解决了。修改程序,可以完美
发表于 2020-09-16
51单片机lcd1602d电子时钟设计
由于课程设计需要,本人做了一个基于51单片机控制的lcd1602d显示的电子时钟电子设计产品。可以显示万年历,星期。本来还想加上温湿度的检测,发现屏幕空间不够用了。。有需要可以再另外共享那个设计。第一次单片机源程序如下:#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit rs=P1^0;                                 
发表于 2020-09-16
<font color='red'>51单片机</font>lcd1602d电子时钟设计
KEIL-51单片机实现自定义bootloader,用于程序更新
本文原创作者: 少占鱼大神关于8051的bootloader实现方式一,基本硬件需求要实现IAP功能,需要51单片机可以在程序里修改代码空间的Flash,或者至少可以修改用户程序区的Flash,新出的51大部分都能满足这个要求二,空间划分一般bootloader位于单片机代码空间的起始地址,用户程序在后面。这个需要根据实际的需求来决定,bootloader功能简单,就少占用一些,bootloader功能复杂的就多占用一些。除此之外,一般还要根据Flash的页为界线划分。附带的工程模板里,bootloader使用0x0000-0x0fff区间,用户程序使用0x1000以后的空间。三,中断的处理51单片机的中断入口一般位于0地址
发表于 2020-09-16
KEIL-<font color='red'>51单片机</font>实现自定义bootloader,用于程序更新
P10点阵屏C51单片机程序
P10点阵屏C51程序1/4扫描,四扫下行,1路16行,数据低OE高(04-P16-08)适用于HUB12接口单色P10串口模式0,普通左移,亮度速度可调,6个IO口,用的STC8F1K08,最多231个字制作出来的实物图如下: 单片机源程序如下:#include <STC8.H>#include <intrins.h>#include <string.h>#define                DATA        P30   
发表于 2020-09-16
P10点阵屏C<font color='red'>51单片机</font>程序
51单片机制作电容电感测表
单片机源程序如下:#include "reg52.h"#include "intrins.h"//-------宏定义---------#define u8 unsigned char#define u16 unsigned int#define u32 unsigned long#define Cref 2200      //基准电容值(单位pF)#define LCD_DATA P0    //LCD数据口(8位)//-------I/O定义--------sbit LCD_BUSY = P0^7; //LCD忙信号sbit LCD
发表于 2020-09-15
<font color='red'>51单片机</font>制作电容电感测表
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 2689mr.com, Inc. All rights reserved
澳客彩票 2019免费送彩金活动 免费送彩金28元 可以提现送彩金的捕鱼游戏 免费送彩金28元 百家乐送彩金最新资讯 送彩金500的网站大白菜不看id 网上现金游戏注册送彩金 送彩金的彩票网 送彩金的博彩公司