📄 nrf2401a.c
字号:
/************************************************ Copyright (c) 2006,成都酷安科技有限公司* All rights reserved.** 文件名称:nRF2401A.c* 文件标识:无* 摘 要:nRF2401A驱动程序,本文件适用于PIC系* 列MCU使用HITACH编译器使用** 当前版本:1.0* 作 者:税超* 完成日期:2006年8月20日** 取代版本:无* 原 作 者:无* 完成日期:无***********************************************/ #include "nRF2401A.h"/******************************************2401A单字节数据传输写入函数WriteByte2401A() 作用:向2401A写入单字节数据 入口:待写入的一字节数据 出口:无*******************************************/ void WriteByte2401A(unsigned char data) { unsigned char cnt; RF_DAT_T=0; //数据端口方向设置 for(cnt=8;cnt>0;cnt--) { if((data&0x80)>0) {RF_DAT=1;} else {RF_DAT=0;} asm("nop"); RF_CLK1=1; asm("nop"); RF_CLK1=0; data<<=1; } }/******************************************2401A单字节数据读取函数ReadByte2401A() 作用:从2401A中读取单字节数据 入口:无 出口:读取的单字节数据*******************************************/ unsigned char ReadByte2401A(void) { unsigned char cnt,data; RF_DAT_T=1; //数据端口方向设置 data=0; for(cnt=8;cnt>0;cnt--) { data<<=1; if(RF_DAT) {data|=0x01;} else {data&=0xfe;} asm("nop"); RF_CLK1=1; asm("nop"); RF_CLK1=0; } return(data); }/******************************************2401A运行模式设置函数RunMode() 作用:设置芯片为睡眠模式 入口:无 出口:无*******************************************/ void RunMode(void) { RF_PM=1; RF_CS=0; RF_CE=1; }/******************************************2401A配置模式设置函数ConfigMode() 作用:设置芯片为睡眠模式 入口:无 出口:无*******************************************/ void ConfigMode(void) { RF_PM=1; RF_CE=0; RF_CS=1; }/******************************************2401A睡眠模式设置函数SleepMode() 作用:设置芯片为睡眠模式 入口:无 出口:无*******************************************/ void SleepMode(void) { RF_PM=1; RF_CE=0; RF_CS=0; }/******************************************2401A关机模式设置函数PowOffMode() 作用:设置芯片为关机模式 入口:无 出口:无*******************************************/ void PowOffMode(void) { RF_PM=0; RF_CE=0; RF_CS=0; }/******************************************2401A发送模式设置函数TX_Mode() 作用:设置芯片为发送模式 入口:无 出口:无*******************************************/ void TX_Mode(void) { //进入配置模式 ConfigMode(); //配置参数 WriteByte2401A(FRE_TX_CODE); //进入收发模式 RunMode(); }/******************************************2401A接收模式设置函数RX_Mode() 作用:设置芯片为发送模式 入口:无 出口:无*******************************************/ void RX_Mode(void) { //进入配置模式 ConfigMode(); //配置参数 WriteByte2401A(FRE_RX_CODE); //进入收发模式 RunMode(); }/******************************************2401A初始化函数Init2401A() 作用:初始化2401A 入口:无 出口:无*******************************************/ void Init2401A(void) { unsigned int cnt; //设置端口 RF_CLK1=0; RF_DAT=0; RF_PM_T=0; RF_CE_T=0; RF_CS_T=0; RF_CLK1_T=0; RF_DR1_T=1;
RF_DAT_T=0; SleepMode(); for(cnt=500;cnt>0;cnt--); //延时等待上电 ConfigMode(); //进入配置模式 WriteByte2401A(DATA2_W_CODE); WriteByte2401A(DATA1_W_CODE); WriteByte2401A(C2_ADD_CODE0); WriteByte2401A(C2_ADD_CODE1); WriteByte2401A(C2_ADD_CODE2); WriteByte2401A(C2_ADD_CODE3); WriteByte2401A(C2_ADD_CODE4); WriteByte2401A(C1_ADD_CODE0); WriteByte2401A(C1_ADD_CODE1); WriteByte2401A(C1_ADD_CODE2); WriteByte2401A(C1_ADD_CODE3); WriteByte2401A(C1_ADD_CODE4); WriteByte2401A(ADD_W_CRC_CODE); WriteByte2401A(RF_SET_CODE); WriteByte2401A(FRE_RX_CODE);
SleepMode(); }/******************************************2401A 数据写入函数WriteData() 作用:向2401A写入发射数据 入口:无 出口:无*******************************************/ void WriteData(void) { unsigned char cnt; TX_Mode();
RF_CE=1; //发送地址 switch(ADDRSIZE)
{
case 5: WriteByte2401A(TX_ADDR_CODE0);
case 4: WriteByte2401A(TX_ADDR_CODE1);
case 3: WriteByte2401A(TX_ADDR_CODE2);
case 2: WriteByte2401A(TX_ADDR_CODE3);
case 1: WriteByte2401A(TX_ADDR_CODE4);
default: ;
} //发送数据 for(cnt=0;cnt<RFDATASIZE;cnt++) {WriteByte2401A(RF_TX_Buff[cnt]);} //启动发送
RF_CE=0; SleepMode(); }/******************************************2401A 数据读入读取函数ReadData() 作用:从2401A中读出接收数据 入口:无 出口:1.接收的数据存放于接收缓冲区 2.返回非0接收正常,0接收错误*******************************************/ unsigned char ReadData(void) { unsigned char cnt; if(RF_DR1) { for(cnt=0;cnt<RFDATASIZE;cnt++) {RF_RX_Buff[cnt]=ReadByte2401A();} return(1); } else return(0); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -