用89C51驅(qū)動(dòng)nRf905收發(fā)C源代碼
/*******************************************************************************************/
//function SpiWrite();
/*******************************************************************************************/
void SpiWrite(uchar byte)
{
uchar i;
DATA_BUF=byte; // Put functions parameter into a bdata variable
for (i=0;i<8;i++) // Setup byte circulation bits
{
if (flag) // Put DATA_BUF.7 ondataline
MOSI=1;
else
MOSI=0;
SCK=1; // Set clock line high
DATA_BUF=DATA_BUF<<1; // Shift DATA_BUF
SCK=0; // Set clocklinelow
}
}
/*******************************************************************************************/
//function SpiRead();
/*******************************************************************************************/
uchar SpiRead(void)
{
uchar i;
for (i=0;i<8;i++) // Setup byte circulation bits
{
DATA_BUF=DATA_BUF<<1; // Right shift DATA_BUF
SCK=1; // Set clock line high
if (MISO)
flag1=1; // Readdata
else
flag1=0;
SCK=0; // Set clocklinelow
}
return DATA_BUF; // Return function parameter
}
/*******************************************************************************************/
//function TxPacket();
/*******************************************************************************************/
void TxPacket(void)
{
uchar i;
//Config905();
CSN=0; // Spi enable for write a spi command
SpiWrite(WTP); // Write payload command
for (i=0;i<32;i++)
{
SpiWrite(TxBuf[i]); // Write 32 bytes Txdata
}
CSN=1; // Spi disable
Delay(1);
CSN=0; // Spi enable for write a spi command
SpiWrite(WTA); // Write address command
for (i=0;i<4;i++) // Write 4 bytes address
{
SpiWrite(RxTxConf.buf[i+5]);
}
CSN=1; // Spi disable
TRX_CE=1; // Set TRX_CE high,start Txdatatransmission
Delay(1); // while (DR!=1);
TRX_CE=0; // Set TRX_CElow
}
/*******************************************************************************************/
//function RxPacket();
/*******************************************************************************************/
void RxPacket(void)
{
uchar i,xx;
TRX_CE=0; // Set nRF905 in standby mode
CSN=0; // Spi enable for write a spi command
SpiWrite(RRP); // Read payload command
for (i=0;i<32;i++)
{
RxBuf[i]=SpiRead(); // Readdataand save to buffer
}
CSN=1; // Disable spi
while(DR||AM);
P0= RxBuf[0]; // Buffer[0] outputfromP0 port...
TRX_CE=1;
xx=(RxBuf[0]>>4)&0x0f;
TxData(xx);
Delay(500); // ...lightled
P0=0xff; // Close led
}
/*******************************************************************************************/
//function SetTxMode();
/*******************************************************************************************/
void SetTxMode(void)
{
TX_EN=1;
TRX_CE=0;
Delay(1); // delay for mode change(>=650us)
}
/*******************************************************************************************/
//function SetRxMode();
/*******************************************************************************************/
void SetRxMode(void)
{
TX_EN=0;
TRX_CE=1;
Delay(1); // delay for mode change(>=650us)
}
/*******************************************************************************************/
//Functon Scankey();
/*******************************************************************************************/
void Scankey()
{
uchar Temp,xx;
P0=0xff;
Temp=P0&0x0f; // Read key value from port P0
if (Temp!=0x0f)
{ Delay(10);
Temp=P0&0x0f; // Read key valuefromport P0
if (Temp!=0x0f)
{
xx=Temp;
Temp=Temp<<4; // Left shift 4 bits
TxBuf[0]=Temp; // Turn On the LED
P0=Temp; // Save to Tx buffer[0]
SetTxMode(); // Set Tx Mode
TxPacket(); // Transmit Tx bufferdata
TxData (xx);
Delay(500); // Delay for LEDlight
P0=0xff; // Close LED display
SetRxMode(); // Set Rx Mode
while((P0&0x0f)!=0x0f);
}
}
}
/*******************************************************************************************/
//Function TxData ();
/*******************************************************************************************/
void TxData (uchar x)
{
SBUF=x;
while(TI==0);
TI=0;
}
/*******************************************************************************************/
評(píng)論