This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

how to make it so that it can send and received through air...

#include<reg9e5.h>
#define HFREQ 0 // 0=433MHz, 1=868/915MHz
#define CHANNEL 106 // Channel number: f(MHz) = (422.4+CHANNEL/10)*(1+HFREQ)
#define POWER 3 // 0=min power...3 = max power
#define uchar unsigned char;
uchar incoming, outgoing;
bit newin=0, gone=0;
int i, inbox[20];
//typedef unsigned char byte;


unsigned char SpiReadWrite(unsigned char b);
void Delay400us(volatile unsigned char n);
unsigned char ReceivePacket();
void serint(void);
void UartInit(void);
void NrfInit(void);
void Receiver(void);
void send(void);
void initial_t(void);
void TransmitPacket(unsigned char b);
void Transmitter(void);




void main(void)
{
i = 0;
UartInit();
Receiver();
NrfInit();
while(1)
{
if(newin)
{
inbox[i] = incoming;
i++;
newin = 0;
}
if(gone)
{
send();
gone = 0;
}
}
}


void serint(void)
interrupt 4
{
if(RI)
{
incoming = SBUF;
RI = 0;
newin = 1;
}
if(TI)
{
outgoing = inbox[i--];
SBUF = outgoing;
TI = 0;
gone = 1;
}

}


void UartInit(void)
{
TH1 = 243; // 19200@16MHz (when T1M=1 and SMOD=1)
CKCON |= 0x10; // T1M=1 (/4 timer clock)
TMOD &= ~0x30;
TMOD |= 0x20; // Timer1 8bit auto reload
TCON = 0x40; // Start timer1
PCON = 0x80; // SMOD=1 (double baud rate)
SCON = 0x52; // Serial mode1, enable receiver
P0_ALT |= 0x06; // Alternate functions on pins P0.1-2
P0_DIR |= 0x02; // P0.1 (RxD) is input
IE=0x90; // Enable serial port interrupt

}


void NrfInit(void)
{
//unsigned char cklf;
unsigned char tmp;

SPICLK = 0; // Max SPI clock
SPI_CTRL = 0x02; // Connect SPI controller to Radio

/*// switch to 16MHz clock:
RACSN = 0;
SpiReadWrite(RRC | 0x09);
cklf = SpiReadWrite(0) | 0x04;
RACSN = 1;
RACSN = 0;
SpiReadWrite(WRC | 0x09);
SpiReadWrite(cklf);
RACSN = 1;*/
// Configure Radio:
RACSN = 0;
SpiReadWrite(WRC | 0x03); // Write to RF config address 3 (RX payload)
SpiReadWrite(0x01); // One byte RX payload
SpiReadWrite(0x01); // One byte TX payload
RACSN = 1;

RACSN = 0;
SpiReadWrite(RRC | 0x01); // Read RF config address 1
tmp = SpiReadWrite(0) & 0xf1; // Clear the power and frequency setting bits
RACSN = 1;

RACSN = 0;
SpiReadWrite(WRC | 0x01); // Write RF config address 1
// Change to 433 or 868/915MHz defined by HFREQ above:
SpiReadWrite(tmp | (HFREQ << 1));
RACSN = 1;


}


unsigned char SpiReadWrite(unsigned char b)
{
EXIF &= ~0x20; // Clear SPI interrupt
SPI_DATA = b; // Move byte to send to SPI data register
while((EXIF & 0x20) == 0x00) // Wait until SPI has finished transmitting
;
return SPI_DATA;
}

void send(void)
{
initial_t();
Transmitter();
}

void initial_t(void)
{
unsigned char tmp;
P0_ALT = 0x00;
P0_DIR = 0xFF;
RACSN = 0;
SpiReadWrite(WRC | 0x01); // Write RF config address 1
// Change power defined by POWER and to 433 or 868/915MHz defined by HFREQ above:
SpiReadWrite(tmp | (POWER <<2) | (HFREQ << 1));
RACSN = 1;
}

void TransmitPacket(unsigned char b)
{

RACSN = 0;
SpiReadWrite(WTP);
SpiReadWrite(b);
RACSN = 1;
TRX_CE = 1;
Delay400us(1);
TRX_CE = 0;
}

void Transmitter(void)
{
int b;
TXEN = 1;
for(b=1;b<=10;b++)
{
TransmitPacket(P0);
}
}

void Delay400us(volatile unsigned char n)
{
unsigned char i;
while(n--)
for(i=0;i<35;i++)
;
}


unsigned char ReceivePacket()
{
unsigned char b;

TRX_CE = 1;

while(DR == 0);
RACSN = 0;
SpiReadWrite(RRP);
b = SpiReadWrite(0);
RACSN = 1;
TRX_CE = 0;
return b;
}

void Receiver(void)
{
unsigned char b;
TXEN = 0;
for(b=1;b<=10;b++)
{
b = ReceivePacket();
P0 = (b >> 1);
}
}

0