📄 新建 文本文档.txt
字号:
3 软件设计
按照硬件电路设计,系统软件编程的基本思路是,系统上电时初始配置nRF2401 状态字,随后进入激活方式。本系统只需对状态字后的120 bit 进行配置,其值为0x500800d0dddddd00dddddddd836f05。配置后nRF2 401 的通道1 数据段长度8 bit , 地址段长度32 bit ,通道1 硬件地址0xdddddddd ,使能位16 校验段,单通道接收,突发传递模式,通信速率1 Mbit/ s ,晶振频率16 MHz ,输出功率0 dBm ,工作频段2 402 MHz ,
接收状态。控制器循环监测系统状态,当有数据要发送,控制nRF2401 发送数据;当接收数据就绪,从nRF2401 读出数据。接收数据时,为确认数据的正确性,在使能位16 校验段的同时,增加程序数据软校验功能。
nRF2401 初始配置函数定义如下:
void nRF2401-powerup-config(void)
{
int i ,j ;
unsigned char config- data[15 ] ,variable1 ;
D1 = 0 ;
D2 = 0 ;
D3 = 0 ; / / 3 个指示灯全亮
config- data[0 ] = 0x50 ;
config- data[1 ] = 0x08 ;
config- data[2 ] = 0x0 ;
config- data[3 ] = 0xd0 ;
config- data[4 ] = 0xdd ;
config- data[5 ] = 0xdd ;
config- data[6 ] = 0xdd ;
config- data[7 ] = 0x0 ;
config- data[8 ] = 0xdd ;
config- data[9 ] = 0xdd ;
config- data[10 ] = 0xdd ;
config- data[11 ] = 0xdd ;
config- data[12 ] = 0x83 ;
config- data[13 ] = 0x6f ;
config- data[14 ] = 0x05 ; / / 状态字配置值
PWR-UP = 1 ;
CE = 0 ;
CS = 1 ; / / nRF2401 进入配置方式
for (i = 0 ;i < 10 ;i + + )
{
Delay500ns( ) ;
} / / CS 到DATA 至少延迟5μs
DATA = 0 ;
for (i = 0 ;i < 15 ;i + + )
{
variable1 = config- data[ i ] ;
for (j = 0 ;j < 8 ;j + + )
{
CLK1 = 0 ;
DATA = variable1 &0x80 ; / / 配置时先写入MSB
SomeNOP( ) ;SomeNOP( ) ; / / 延迟
CLK1 = 1 ;
Delay500ns( ) ; / / 时钟信号高电平保持至少500 ns
CLK1 = 0 ; / / 数据在CLK1 上升沿写入nRF2401
variable1 = variable1 < < 1 ;
}
}
CS = 0 ; / / CS 置低使配置有效
D1 = 1 ;
D2 = 1 ;
D3 = 1 ; / / 3 个指示灯全暗
}
nRF2401 数据发送函数定义如下:
void Transmit- data(unsigned char number)
{
int i ,j ;
unsigned char variable2 ;
unsigned char transmit- data[5 ] ;
transmit- data[0 ] = 0xdd ;
transmit- data[1 ] = 0xdd ;
transmit- data[2 ] = 0xdd ;
transmit- data[3 ] = 0xdd ; / / 接收方通道硬件地址
transmit- data[4 ] = number ;
TXEN( ) ; / / nRF2401 进入发送状态
for (i = 0 ;i < 10 ;i + + )
·19 ·
第30 卷第8 期 王 博,等:基于nRF2401 的无线数据传输系统 ·通信技术·
? 1994-2007 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
{
Delay500ns( ) ;
} / / CE到DATA 至少延迟5μs
for (i = 0 ;i < 5 ;i + + )
{
variable2 = transmit- data[ i ] ;
for (j = 0 ;j < 8 ;j + + )
{
CLK1 = 0 ;
DATA = variable2 &0x80 ; / / 发送时先输入MSB
SomeNOP( ) ; SomeNOP( ) ; / / 延迟
CLK1 = 1 ;
Delay500ns ( ) ; / / 时钟信号高电平保持至少为
500ns
CLK1 = 0 ; / / 数据在CLK1 上升沿写入nRF2401
variable2 < < = 1 ;
}
}
CE = 0 ; / / CE置低使发送有效
nRF2401-actting-config( ) ; / / nRF2401 进入激活方式,接
收状态
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -