?? nrf2401_t.c
字號(hào):
#include "NRF2401_T.H"
uchar TX_InitData[15]= //初始化2401用的數(shù)組 先發(fā)送高位
{
0xD0, //TX receiver 2, Datalength 0bit( 0 byte )
0xD0, //TX receiver 1, Datalength 208bit(26 bytes)
0x00, //TX receiver 2 address High byte
0xCC, //TX receiver 2 address High byte
0xcc, //TX receiver 2 address High byte
0xcc, //TX receiver 2 address High byte
0xcc, //TX receiver 2 address High byte
0x00, //TX receiver 1 address High byte
0xCC, //TX receiver 1 address High byte
0xcc, //TX receiver 1 address High byte
0xcc, //TX receiver 1 address Low byte
0xcc, //TX receiver 1 address Low byte
//0x82, //this is for 32 bit address(100000), 16bit CRC(Bit1=1), CRC disable(Bit0=1 for ES chip
0x83, //this is for 32 bit address(100000), 16bit CRC(Bit1=1), CRC enable(Bit0=1) for final chip
//0x4f, //One receiver(Bit7=0), shock Mode(Bit6=1), Datarate(Bit5=0) 250K, crystal(16M), RF Power(0dbm)
0x6c, //One receiver(Bit7=0), shock Mode(Bit6=1), Datarate(Bit5=1) 1M, crystal(16M), RF Power(-20dbm)
0x00 //Channel Number(0000010), RX/TX mode(1/RX,0/TX)
};
/*************************************InitnRF2401 START******************************/
void TX_InitnRF2401(unsigned char channel)
{
unsigned char tempi;
unsigned char i,j;
TX_OperateIO_DIR|=TX_CE+TX_CLK1+TX_DATA1+TX_CS+TX_PWR;
TX_OperateIO_DIR&=~TX_DR1;
TX_OperateIES &= ~ TX_DR1; //上升沿觸發(fā)
TX_OperateIE |= TX_DR1; //中斷使能
TX_OperateIO &=~TX_CE; //TX_CE=0;
TX_OperateIO |= TX_CS; //配置模式,TX_CS=1
TX_Delay5();
TX_InitData[14] =channel * Frequencytimes*2; //左移一位 Ferquencytimesad +
for (i=0;i<15;i++)
{
tempi=TX_InitData[i];
for (j=0;j<8;j++)
{
if (tempi&0x80) //Check if first bit is HIGH
TX_OperateIO|=TX_DATA1; //Set Data high Data=1
else
TX_OperateIO&=~TX_DATA1; //Set Data low Data=0
tempi=tempi<<1; //Left Shift to get next bit
TX_DoSPIClock(); //Call "DoClock" to generate a clock pulse
}
}
TX_OperateIO &=~TX_CS ; //Disable TX_CS--standby mode TX_CS=0
TX_OperateIO &=~TX_DATA1; //Set Data low DATA=0
TX_OperateIO |=TX_CE; //TX_CE=1
TX_delay200();
}
/*************************************InitnRF2401 END *******************************/
/*************************************DoSPIClock START******************************/
void TX_DoSPIClock(void)
{
TX_OperateIO |=TX_CLK1; //TX_CLK1=1
_NOP();
_NOP();
TX_OperateIO &=~TX_CLK1; //TX_CLK1=0
}
/*************************************DoSPIClock END *******************************/
/*************************************nRF2401_ON START******************************/
void TX_nRF2401_ON(void)
{
TX_OperateIO |=TX_PWR; //TX_PWR=1
TX_delay200();
}
/*************************************nRF2401_ON END *******************************/
/*************************************nRF2401_OFF START*****************************/
void TX_nRF2401_OFF(void)
{
TX_OperateIO &=~ TX_PWR; // Set Power_Up low
}
/*************************************nRF2401_OFF END ******************************/
/*************************************TXEN_HIGH START ******************************/
void TX_RXEN_HIGH(void)
{
TX_OperateIO &=~ TX_CE ; //TX_CE=0;
TX_OperateIO |= TX_CS ; //配置模式,TX_CS=1
TX_Delay5();
TX_OperateIO |= TX_DATA1; //Set Data high Data=1
TX_DoSPIClock(); //Make one SPIClock cycle
TX_OperateIO &=~ TX_CS ; //Disable TX_CS--standby mode TX_CS=0
TX_OperateIO |= TX_CE ; //TX_CE=1
TX_OperateIO &=~TX_DATA1; //Set Data low DATA=0
TX_Delay10();
}
/*************************************TXEN_HIGH END *******************************/
/*************************************TXEN_HIGH START ******************************/
void TX_TXEN_HIGH(void)
{
TX_OperateIO &=~ TX_CE ; //TX_CE=0;
TX_OperateIO |= TX_CS ; //配置模式,TX_CS=1
TX_Delay5();
TX_OperateIO &=~ TX_DATA1; //Set Data low Data=0
TX_DoSPIClock(); //Make one SPIClock cycle
TX_OperateIO &=~ TX_CS ; //Disable TX_CS--standby mode TX_CS=0
TX_OperateIO |= TX_CE ; //TX_CE=1
TX_OperateIO &=~TX_DATA1; //Set Data low DATA=0
TX_Delay10();
}
/*************************************TXEN_HIGH END *******************************/
/*************************************delay5 START ******************************/
void TX_Delay5(void)
{
uchar y;
for(y=0;y<35;y++)
{
_NOP();
}
}
/*************************************delay5 END *******************************/
/*************************************delay10 START ******************************/
void TX_Delay10(void)
{
uchar x;
uchar y;
for(y=0;y<150;y++)
{
for(x=0;x<8;x++)
{
_NOP();
_NOP();
}
}
}
/*************************************delay10 END *******************************/
/*************************************delay100 START *****************************/
void TX_delay200(void)
{
uchar x;
uchar y;
for(y=0;y<120;y++)
{
for(x=0;x<200;x++)
{
_NOP();
}
}
}
/*************************************delay100 END *******************************/
/************************************* ShockBurst START *******************************/
void TX_Trans(unsigned char *pt,unsigned char Length)
{
unsigned char tempi;
unsigned char i,j;
TX_OperateIO &=~ TX_CS ; //Disable TX_CS--standby mode TX_CS=0
TX_OperateIO |= TX_CE ; //TX_CE=1
TX_OperateIO &=~TX_CLK1;
TX_OperateIO_DIR |= TX_DATA1; //set Data Direction OUT
TX_Delay5();
for (i=0;i<Length;i++)
{
tempi=*pt;
for (j=0;j<8;j++)
{
if (tempi&0x80) //Check if first bit is HIGH
TX_OperateIO |= TX_DATA1; //Set Data high Data=1
else
TX_OperateIO &=~ TX_DATA1; //Set Data low Data=0
tempi=tempi<<1; //Left Shift to get next bit
TX_DoSPIClock();
}
pt++;
}
TX_OperateIO &=~ TX_CE ; //TX_CE=0;
TX_OperateIO &=~ TX_DATA1; //Set Data low Data=0
TX_Delay10();
}
/************************************* ShockBurst END *********************************/
/************************************* ReceiveShock START *********************************/
void TX_ReceiveShock(unsigned char *pt,unsigned char Length)
{
unsigned char Temp=0;
unsigned char i,j;
TX_OperateIO &=~ TX_DATA1; //Set Data low Data=0
TX_OperateIO_DIR&=~ TX_DATA1; //set Data Direction IN
for (i=0;i<Length;i++)
{
for(j=0;j<8;j++)
{
Temp=Temp<<1; //shift left to receive next bit
TX_OperateIO |= TX_CLK1; //set clock high clk=1
_NOP();
_NOP(); //wait one clk cycle
if(TX_OperateIO_IN&TX_DATA1) //check if Data=high
Temp+=0x01; //yes - set bit high
TX_OperateIO &=~ TX_CLK1; //set clock low clk=0
_NOP(); //wait one clk cycle
}
_NOP();
*pt=Temp;
pt++;
}
TX_OperateIO_DIR |= TX_DATA1; //set Data Direction IN
TX_OperateIO &=~ TX_DATA1; //Set Data low Data=0
}
/************************************* ReceiveShock END *********************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -