?? nrf2401a_pub.c
字號:
/****************************************************************************
**
** ERC-RF2401無線收發(fā)模塊驅(qū)動程序
**
** 用戶須知:
** 該驅(qū)動程序為傻瓜版本,無需對模塊過多了解,使用簡單
** 用戶唯一需要的就是對實際的IO管腳重新定義
** 原驅(qū)動開發(fā)使用CPU類型為 AVR ATmega48,IDE環(huán)境為IAR
** 用戶使用接口函數(shù)只有三個:
** nRF2401AInitializtion() nRF2401AScanf() nRF2401APrintf()
** 模式切換全部由驅(qū)動內(nèi)部軟件處理
** 更多代碼實例參照RF2401-FE模塊開發(fā)手冊
** http://www.hzfeidi.com.cn
**
** 杭州ERC實驗室 參上
***************************************************************************/
#include "nRF2401A_pub.h"
/******************************************基本函數(shù)********************************************/
/*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);
}
/****************************************擴(kuò)展函數(shù)*******************************************/
/*配置寄存器*/
void nRF2401AConfigRegisters(unsigned char* p)
{
unsigned char temp;
nRF2401A_CONFIG_MODE();
for(temp=0; temp<15; temp++)
{
nRF2401AWrite8Bit(p[temp]);
}
nRF2401A_STANDBY_MODE();
}
/*寫通道1發(fā)送數(shù)據(jù)寄存器*/
void nRF2401AWriteTxPayload(unsigned char* p,unsigned char total)
{
unsigned char temp;
nRF2401A_ACTIVE_MODE();
nRF2401AWrite8Bit(0xcc);//發(fā)送地址高8位默認(rèn)設(shè)定為0xcc
nRF2401AWrite8Bit(0xcc);//發(fā)送地址低8位默認(rèn)設(shè)定為0xcc
for(temp=0; temp<total; temp++)
{
nRF2401AWrite8Bit(p[temp]);
}
nRF2401A_STANDBY_MODE();
}
/*讀通道1接收數(shù)據(jù)寄存器*/
void nRF2401AReadRxPayload(unsigned char* p,unsigned char total)
{
unsigned char temp;
nRF2401A_ACTIVE_MODE();
for(temp=0; temp<total; temp++)
{
p[temp] = nRF2401ARead8BitChannel_1();
}
}
/****************************************常用函數(shù)*******************************************/
/*初始化函數(shù)*/
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毫秒,穩(wěn)定時間
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數(shù)據(jù)包(28字節(jié))*/
unsigned char nRF2401AScanf(unsigned char* p)
{
if (nRF2401A_DR1_PIN==0){
return (0);}
nRF2401AReadRxPayload(p,28);
return(1);
}
/*發(fā)送通道1數(shù)據(jù)包(28字節(jié))*/
void nRF2401APrintf(unsigned char* p)
{
nRF2401A_CONFIG_1BIT(0); //配置為發(fā)射
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();
}
/**********************************************/
/*發(fā)送范例
unsigned char tx_buf[28];
unsigned char rx_buf[28];
void main()
{
nRF2401AInitializtion();
tx_buf[0] = 0;
tx_buf[1] = 1;//在發(fā)送數(shù)組中寫入所需信息
while(1)
{
nRF2401APrintf(tx_buf);
//用發(fā)送函數(shù)調(diào)用發(fā)送數(shù)組,將其打包發(fā)送
}
}
*/
/*接收范例
unsigned char tx_buf[28];
unsigned char rx_buf[28];
void main()
{
nRF2401AInitializtion();
while(1)
{
while(nRF2401AScanf(rx_buf)!=1);
//當(dāng)沒有接收到數(shù)據(jù)包時候無限循環(huán),一旦接收到數(shù)據(jù)包則將其寫入所指定的32字節(jié)接收數(shù)組rx_buf中
PORTB = rx_buf[0];
//將接收到的數(shù)據(jù)包的第一個字節(jié)從B口輸出
}
}
*/
/*轉(zhuǎn)發(fā)包范例
unsigned char buf[28];
void main()
{
nRF2401AInitializtion();
while(1)
{
while(nRF2401AScanf(buf)!=1);//等待收到數(shù)據(jù)包
nRF2401APrintf(buf);//將收到的數(shù)據(jù)包原樣發(fā)送
//注釋:nRF2401APrintf() nRF2401AScanf() 兩個函數(shù)調(diào)用順序完全隨意不用考慮兩者間的內(nèi)在影響
}
}
*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -