//====================================================================================
//文 件 名: nRF2401.c
//功能描述: nRF2401的驱动程序
//维护记录: 2006年10月20
//====================================================================================
#include "REG52.h"
#include "intrins.h"
#include "lcd1602.h"
#include "myfun.h"
sbit PWR = P1^7;
sbit CE = P1^6;
sbit CS = P1^5;
sbit DR1 = P1^4;
sbit CLK1 = P1^3;
sbit DATA = P1^2;
const unsigned int InitData[15] = // nRF2401 控制字 15 Byte
{
0x08, // 通道二接收数据宽度(bit)
0x40, // 通道一接收数据宽度(bit)
0x00, // 通道二地址(A24)
0x00, // 通道二地址(A23)
0x00, // 通道二地址(A22)
0x00, // 通道二地址(A21)
0x01, // 通道二地址(A20)
0x00, // 通道一地址(A14)
0x00, // 通道一地址(A13)
0x00, // 通道一地址(A12)
0x00, // 通道一地址(A11)
0x01, // 通道一地址(A10)
0xA3, // b7~b2:接收地址宽度,和发送端一致,不超过40bit;
// b1~b0:CRC模式选择(01-8bit;11-16bit;00/10-no)
0x4f, // b15:接收通道选择(0-通道1;1-通道1和2)
// b14:收发模式(0-Direct模式,1-ShockBurst模式)
// b13:波特率选择(0-250Kbps;1-1Mbps)
// b12~b10:晶振选择(000-4M;001-8M;010-12M;011-16M)
// b9~b8:发射功率(11-0db)
0x05 // b7~b1:发射频率配置
// b0:收发控制(0-发送;1-接收)
};
unsigned int AddrBuffer[5]; // 地址寄存器
unsigned int AddrByteCnt; // 地址Byte数
unsigned int AddrBuffer[5]; // 地址寄存器
unsigned int AddrByteCnt; // 地址Byte数
void nRF2401_ON(); // nRF2401A上电
void nRF2401_OFF(); // nRF2401A掉电
void nRF2401_Initial(); // nRF2401A初始化
void nRF2401_WriteCommand(); // nRF2401A写命令字
void nRF2401_WriteByte(unsigned int uiData); // 向nRF2401A写入一个Byte
void nRF2401_WriteWord(unsigned int uiData); // 向nRF2401A写入一个Word
void nRF2401_Mode(unsigned int uiMode); // 切换nRF2401A收/发模式
void nRF2401_SendByte(unsigned int TxData);
// 将字节数据写入nRF2401A
void nRF2401_SendWord(unsigned int TxData);
// 将字数据写入nRF2401A
void nRF2401_SendBuffer_Byte(unsigned int TxData[],unsigned int DataByte);
// 将数组数据写入nRF2401A
void nRF2401_SendBuffer_Word(unsigned int TxData[],unsigned int DataWord);
// 将数组数据写入nRF2401A
unsigned int nRF2401_RxStatus(); // 判断nRF2401A是否有数据接收
void nRF2401_ReceiveByte(unsigned int RxData[]);// 以Byte格式从nRF2401A读数据
void nRF2401_ReceiveWord(unsigned int RxData[]);// 以Word格式从nRF2401A读数据
void nRF2401_SetAddress(unsigned int Address[],unsigned int AddrByte);
// 设置目标nRF2401A的地址
void Delay_Us(unsigned int TimeCnt); // 延时(uS)
//=============================================================
// 语法格式: void nRF2401_Initial(void)
// 实现功能: nRF 初始化
// 参数: 无
// 返回值: 无
//=============================================================
void nRF2401_Initial(void)
{
/* *P_SystemClock = 0x98; // 设置系统时钟为49MHz
*P_IOB_Attrib |= (CS+DATA+PWR+CLK1+CE+DR1);
*P_IOB_Dir |= (CS+DATA+PWR+CLK1+CE);
*P_IOB_Dir&=~DR1;
*P_IOB_Buffer &=~(CS+DATA+CLK1+CE+DR1); // 初始化IO端口 */
nRF2401_ON();
Delay_Us(3000);
nRF2401_WriteCommand(); // 向nRF2401A写命令字
Delay_Us(300);
}
//=============================================================
// 语法格式: void nRF2401_ON(void)
// 实现功能: nRF 上电
// 参数: 无
// 返回值: 无
//=============================================================
void nRF2401_ON(void)
{
/**P_IOB_Buffer |= PWR;*/
PWR = 1;
}
//=============================================================
// 语法格式: void nRF2401_OFF(void)
// 实现功能: nRF 掉电
// 参数: 无
// 返回值: 无
//=============================================================
void nRF2401_OFF(void)
{
PWR = 0; //*P_IOB_Buffer &= ~PWR;
}
//=============================================================
// 语法格式: void nRF2401_WriteCommand(void)
// 实现功能: nRF 写命令字
// 参数: 无
// 返回值: 无
//=============================================================
void nRF2401_WriteCommand(void)
{
unsigned int i;
CE= 0; //*P_IOB_Buffer &= ~CE;
CS = 1; //*P_IOB_Buffer |= CS;
//Delay_Us(1);
for(i=0; i<15; i++)
{
nRF2401_WriteByte(InitData[i]);
}
CS = 0; //*P_IOB_Buffer &= ~CS;
CE = 1; //*P_IOB_Buffer |= CE;
}
//=============================================================
// 语法格式: void nRF2401_Mode(unsigned int uiMode)
// 实现功能: 设置nRF2401A的工作方式
// 参数: uiMode:0--接收;1--发送
// 返回值: 无
//=============================================================
void nRF2401_Mode(unsigned int uiMode)
{
CE = 0; //*P_IOB_Buffer &= ~CE;
CS = 1; //*P_IOB_Buffer |= CS;
if(uiMode == 0)
nRF2401_WriteByte(InitData[14] | 0x01); // 接收
else
nRF2401_WriteByte(InitData[14] & 0xFE); // 发送
CS = 0; //*P_IOB_Buffer &= ~CS;
CE = 1; //*P_IOB_Buffer |= CE;
}
//=============================================================
// 语法格式: void nRF2401_SetAddress(unsigned int *Address,unsigned int AddrByte)
// 实现功能: 设置目标nRF2401A的地址
// 参数: unsigned int *Address:地址数组
// unsigned int AddrByte:数组的长度
// 返回值: 无
//=============================================================
void nRF2401_SetAddress(unsigned int *Address,unsigned int AddrByte)
{
unsigned int i;
for(i=0; i<AddrByte; i++)
{
AddrBuffer[i] = Address[i];
}
AddrByteCnt = AddrByte;
}
//=============================================================
// 语法格式: void nRF2401_WriteByte(unsigned int uiData)
// 实现功能: 向nRF2401A写入一个字节数据
// 参数: unsigned int uiData: 待写入数据
// 返回值: 无
//=============================================================
void nRF2401_WriteByte(unsigned int uiData)
{
unsigned int i;
for(i=0; i<8; i++)
{
CLK1 = 0; //*P_IOB_Buffer &= ~CLK1;
if(uiData&0x80)
DATA = 1; //*P_IOB_Buffer |= DATA;
else
DATA = 0; //*P_IOB_Buffer &= ~DATA;
//Delay_Us(1);
CLK1 = 1; //*P_IOB_Buffer |= CLK1;
//Delay_Us(1);
CLK1 = 0; //*P_IOB_Buffer &= ~CLK1;
uiData = uiData<<1;
}
}
//=============================================================
// 语法格式: void nRF2401_WriteWord(unsigned int uiData)
// 实现功能: 向nRF2401A写入一个字数据
// 参数: unsigned int uiData: 待写入数据
// 返回值: 无
//=============================================================
void nRF2401_WriteWord(unsigned int uiData)
{
unsigned int i;
for(i=0; i<16; i++)
{
CLK1 = 0; //*P_IOB_Buffer &= ~CLK1;
if(uiData&0x8000)
DATA = 1; //*P_IOB_Buffer |= DATA;
else
DATA = 0; //*P_IOB_Buffer &= ~DATA;
//Delay_Us(1);
CLK1 = 1; //*P_IOB_Buffer |= CLK1;
Delay_Us(1);
CLK1 = 0; //*P_IOB_Buffer &=~CLK1;
uiData = uiData<<1;
}
}
//=============================================================
// 语法格式: void nRF2401_SendByte(unsigned int TxData)
// 实现功能: 将目标地址+字节数据写入nRF2401A
// 参数: unsigned int TxData: 待发送字节数据
// 返回值: 无
//=============================================================
void nRF2401_SendByte(unsigned int TxData)
{
unsigned int i;
// *P_IOB_Dir |= DATA;
CE = 1; //*P_IOB_Buffer |= CE;
//Delay_Us(1); //
for(i=0; i<AddrByteCnt; i++)
{
nRF2401_WriteByte(AddrBuffer[i]);
}
nRF2401_WriteByte(TxData);
CE = 0; //*P_IOB_Buffer &= ~CE;
DATA = 0; //*P_IOB_Buffer &= ~DATA;
Delay_Us(10);
}
//=============================================================
// 语法格式: void nRF2401_SendWord(unsigned int
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
nRF2401A_DS18B20_TEST.zip (61个子文件)
nRF2401A_DS18B20_TEST
NRF2401_send2
send 18KB
send_uvproj.bak 13KB
STARTUP.OBJ 749B
send_Opt.Bak 1KB
nRF2401.OBJ 14KB
send_uvopt.bak 8KB
send.lnp 72B
Exa1_Send.h 87B
send.uvproj 13KB
nRF2401.c 12KB
send_Uv2.Bak 2KB
STARTUP.A51 5KB
send.M51 27KB
send.uvgui.Administrator 71KB
send.plg 5KB
main.LST 7KB
lcd1602.h 0B
nRF2401.LST 25KB
nRF2401.h 1KB
send.uvopt 8KB
main.OBJ 7KB
send.uvgui_Administrator.bak 71KB
send.opt.bak 1KB
send.hex 6KB
STARTUP.lst 11KB
send.Uv2.bak 2KB
main.c 4KB
NRF2401_receive2
receive.lnp 105B
SPCE061A.h 18KB
receive.M51 33KB
myfun.c 362B
receive.uvgui_Administrator.bak 71KB
lcd1602.OBJ 8KB
lcd1602.LST 6KB
STARTUP.OBJ 749B
lcd1602.c 3KB
nRF2401.OBJ 14KB
receive 26KB
receive.hex 5KB
myfun.LST 1KB
receive.Uv2.bak 2KB
nRF2401.c 12KB
STARTUP.A51 5KB
receive.uvproj 14KB
receive.plg 2KB
receive.uvgui.Administrator 71KB
receive.uvopt 11KB
main.LST 5KB
lcd1602.h 462B
nRF2401.LST 26KB
receive_uvproj.bak 13KB
nRF2401.h 1KB
receive.opt.bak 2KB
receive_Uv2.Bak 2KB
receive_Opt.Bak 2KB
myfun.h 416B
myfun.OBJ 2KB
receive_uvopt.bak 11KB
main.OBJ 5KB
STARTUP.lst 11KB
main.c 2KB
共 61 条
- 1
资源评论
- monoandy2012-06-11端口定义和现在的不一样,程序是06年写的。。。貌似我用不了。。。
tianchaodeciwei
- 粉丝: 1
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功