利用51单片机和NRF2401芯片设计一个短距离无线系统进行数据接收和发送的程序怎么写。
答案:2 悬赏:20
解决时间 2021-03-02 00:49
- 提问者网友:千城墨白
- 2021-03-01 20:16
利用51单片机和nRF2401芯片设计一个短距离无线传输系统进行数据发送和接收,程序怎么写。(是用LCD1602显示接收和发送的)谢谢了!
最佳答案
- 二级知识专家网友:狙击你的心
- 2021-03-01 20:50
nRF2401文档里有51的例程,1602自己加
全部回答
- 1楼网友:白日梦制造商
- 2021-03-01 21:46
那就a单片机这边当成发送就可了,b单片机那边作接收,b单片机把接收到的数据再作处理。
我看了一下那个文档,里面有程序的,你可以参考一下的!
实验时收发双方都采用相同的电路
发送方程序如下:
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
start: mov p1,#0afh ;模块待机
setb 0a8h ;允许外部中断0
clr 88h ;电平触发
setb 0b8h ;高优先级
setb 0afh ;cpu开中断
mov 58h,#20h ;准备写0寄存器
mov 59h,#0fh ;上电,接收模式(发射时,设置为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 ;允许0,1通道接收
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次
mov r3,#02h
acall xienb
mov 58h,#25h ;05寄存器
mov 59h,#07h ;射频频率
mov r3,#02h
acall xienb
mov 58h,#26h ;06
mov 59h,#27h ;设置为07为1m传输速率,0db增益(若为27,则是250kpbs,0db)
mov r3,#02h
acall xienb
mov 58h,#27h ;07
mov 59h,#70h ;清模块内中断
mov r3,#02h
acall xienb
mov 58h,#2ah ;0a寄存器(通道0)
mov 59h,#01h ;配置地址(对方地址)
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,#02h ;本机地址
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
setb p1.6 ;启动接收
halt: sjmp halt
exint0: push acc
push psw
acall duzt ;读状态寄存器
mov 58h,#27h ;07
mov 59h,#70h ;清中断
mov r3,#02h
acall xienb
mov r0,#60h ;读接收数据到60h到6fh
mov r3,#10h
acall dunb
cpl p1.0
fanhui: pop psw
pop acc
reti
end
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯