?? nrf2401a_pub.c
字號:
/****************************************************************************
**
** ERC-RF2401無線收發模塊驅動程序
**
** 用戶須知:
** 該驅動程序為傻瓜版本,無需對模塊過多了解,使用簡單
** 用戶唯一需要的就是對實際的IO管腳重新定義
** 原驅動開發使用CPU類型為 AVR ATmega48,IDE環境為IAR
** 用戶使用接口函數只有三個:
** nRF2401AInitializtion() nRF2401AScanf() nRF2401APrintf()
** 模式切換全部由驅動內部軟件處理
** 更多代碼實例參照RF2401-FE模塊開發手冊
** http://www.hzfeidi.com.cn
**
** 杭州ERC實驗室 參上
***************************************************************************/
#include "nRF2401A_pub.h"
/******************************************基本函數********************************************/
/*8bit寫入*/
void nRF2401AWrite8Bit(unsigned char byte)
{
unsigned char temp;
nRF2401A_WRITE_DATA();
for(temp=8;temp>0;temp--)
{
nRF2401A_DATA = (byte&0x80)>>7;
byte = byte<<1;
nRF2401A_CLK1 = 0;
nRF2401A_CLK1 = 0;
nRF2401A_CLK1 = 0;
nRF2401A_CLK1 = 1;
nRF2401A_CLK1 = 1;
}
nRF2401A_CLK1 = 0;
}
/*1通道8bit讀出*/
unsigned char nRF2401ARead8BitChannel_1(void)
{
unsigned char temp;
unsigned char byte = 0x00;
nRF2401A_READ_DATA();
for(temp=8;temp>0;temp--)
{
byte = byte<<1;
nRF2401A_CLK1 = 1;
nRF2401A_CLK1 = 1;
nRF2401A_CLK1 = 1;
nRF2401A_CLK1 = 1;
byte = byte|(nRF2401A_DATA_PIN&0x01);
nRF2401A_CLK1 = 0;
}
return(byte);
}
/****************************************擴展函數*******************************************/
/*配置寄存器*/
void nRF2401AConfigRegisters(unsigned char* p)
{
unsigned char temp;
nRF2401A_CONFIG_MODE();
for(temp=0; temp<15; temp++)
{
nRF2401AWrite8Bit(p[temp]);
}
nRF2401A_STANDBY_MODE();
}
/*寫通道1發送數據寄存器*/
void nRF2401AWriteTxPayload(unsigned char* p,unsigned char total)
{
unsigned char temp;
nRF2401A_ACTIVE_MODE();
nRF2401AWrite8Bit(0xcc);//發送地址高8位默認設定為0xcc
nRF2401AWrite8Bit(0xcc);//發送地址低8位默認設定為0xcc
for(temp=0; temp<total; temp++)
{
nRF2401AWrite8Bit(p[temp]);
}
nRF2401A_STANDBY_MODE();
}
/*讀通道1接收數據寄存器*/
void nRF2401AReadRxPayload(unsigned char* p,unsigned char total)
{
unsigned char temp;
nRF2401A_ACTIVE_MODE();
for(temp=0; temp<total; temp++)
{
p[temp] = nRF2401ARead8BitChannel_1();
}
}
/****************************************常用函數*******************************************/
/*初始化函數*/
void nRF2401AInitializtion()
{
nRF2401A_IO_INITIALIZTION();
nRF2401A_CONFIG_MODE();
for(unsigned char time=0; time<50; time++)
{
for(unsigned char i=0; i<250; i++);
}//延遲3毫秒,穩定時間
nRF2401AWrite8Bit(nRF2401AConfig_Byte14);
nRF2401AWrite8Bit(nRF2401AConfig_Byte13);
nRF2401AWrite8Bit(nRF2401AConfig_Byte12);
nRF2401AWrite8Bit(nRF2401AConfig_Byte11);
nRF2401AWrite8Bit(nRF2401AConfig_Byte10);
nRF2401AWrite8Bit(nRF2401AConfig_Byte9);
nRF2401AWrite8Bit(nRF2401AConfig_Byte8);
nRF2401AWrite8Bit(nRF2401AConfig_Byte7);
nRF2401AWrite8Bit(nRF2401AConfig_Byte6);
nRF2401AWrite8Bit(nRF2401AConfig_Byte5);
nRF2401AWrite8Bit(nRF2401AConfig_Byte4);
nRF2401AWrite8Bit(nRF2401AConfig_Byte3);
nRF2401AWrite8Bit(nRF2401AConfig_Byte2);
nRF2401AWrite8Bit(nRF2401AConfig_Byte1);
nRF2401AWrite8Bit(nRF2401AConfig_Byte0);
nRF2401A_STANDBY_MODE();
nRF2401A_ACTIVE_MODE();
}
/*接收通道1數據包(28字節)*/
unsigned char nRF2401AScanf(unsigned char* p)
{
if (nRF2401A_DR1_PIN==0){
return (0);}
nRF2401AReadRxPayload(p,28);
return(1);
}
/*發送通道1數據包(28字節)*/
void nRF2401APrintf(unsigned char* p)
{
nRF2401A_CONFIG_1BIT(0); //配置為發射
nRF2401AWriteTxPayload(p,28);
for(unsigned char time=0; time<10; time++)
{
for(unsigned char i=0; i<250; i++);
}//延遲1280us //適合250K的傳輸速率 Tsby2txSB+Toa(Tsby2txSB=195us Toa=1/datarate*(#databits+1)=1/250000*257=1028us)
nRF2401A_CONFIG_1BIT(1); //配置為接收
nRF2401A_ACTIVE_MODE();
}
/**********************************************/
/*發送范例
unsigned char tx_buf[28];
unsigned char rx_buf[28];
void main()
{
nRF2401AInitializtion();
tx_buf[0] = 0;
tx_buf[1] = 1;//在發送數組中寫入所需信息
while(1)
{
nRF2401APrintf(tx_buf);
//用發送函數調用發送數組,將其打包發送
}
}
*/
/*接收范例
unsigned char tx_buf[28];
unsigned char rx_buf[28];
void main()
{
nRF2401AInitializtion();
while(1)
{
while(nRF2401AScanf(rx_buf)!=1);
//當沒有接收到數據包時候無限循環,一旦接收到數據包則將其寫入所指定的32字節接收數組rx_buf中
PORTB = rx_buf[0];
//將接收到的數據包的第一個字節從B口輸出
}
}
*/
/*轉發包范例
unsigned char buf[28];
void main()
{
nRF2401AInitializtion();
while(1)
{
while(nRF2401AScanf(buf)!=1);//等待收到數據包
nRF2401APrintf(buf);//將收到的數據包原樣發送
//注釋:nRF2401APrintf() nRF2401AScanf() 兩個函數調用順序完全隨意不用考慮兩者間的內在影響
}
}
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -