brew
Member level 3
- Joined
- Mar 4, 2011
- Messages
- 59
- Helped
- 2
- Reputation
- 4
- Reaction score
- 2
- Trophy points
- 1,288
- Activity points
- 1,693
here's a function in C for PIC16F88 interfaced with an nRF24L01+ transceiver.
void transmit_data(void)
{
uns8 i, data, cmd;
bit data2;
TX_CSN = 0;
data = 0x7E; //clear previous ints======================================================================================
cmd = 0x27;
for(i = 0 ; i < 8 ; i++)
{
TX_MOSI = cmd.7;
TX_SCK = 1;
data2 = TX_MISO;
TX_SCK = 0;
cmd <<= 1;
while(TXIF == 0); //print out the status register before clearing stuff...==============================
TXREG = data2+48;
}
while(TXIF == 0);
TXREG = 44;
while(TXIF == 0);
TXREG = 32;
for(i = 0 ; i < 8 ; i++)
{
TX_MOSI = data.7;
TX_SCK = 1;
TX_SCK = 0;
data <<= 1;
}
TX_CSN = 1;
TX_CSN = 0;
data = 0x3A; //PWR_UP = 1===========================================================================================
cmd = 0x20;
for(i = 0 ; i < 8 ; i++)
{
TX_MOSI = cmd.7;
TX_SCK = 1;
TX_SCK = 0;
cmd <<= 1;
}
for(i = 0 ; i < 8 ; i++)
{
TX_MOSI = data.7;
TX_SCK = 1;
TX_SCK = 0;
data <<= 1;
}
TX_CSN = 1;
TX_CSN = 0;
//clear TX fifo===========================================================================================
//the data sheet says that this is supposed to come up 0 after POR, but that doesn't seem to be the case
cmd = 0xE1;
for(i = 0 ; i < 8 ; i++)
{
TX_MOSI = cmd.7;
TX_SCK = 1;
TX_SCK = 0;
cmd <<= 1;
}
TX_CSN = 1;
TX_CSN = 0;
data2 = 0;
data = 0x34; //4 byte payload================================================================================
cmd = 0xA0;
for(i = 0 ; i < 8 ; i++)
{
TX_MOSI = cmd.7;
TX_SCK = 1;
data2 = TX_MISO;
TX_SCK = 0;
cmd <<= 1;
while(TXIF == 0); //print out status register after clearing ints...===============================
TXREG = data2+48;
}
while(TXIF == 0);
TXREG = 10;
while(TXIF == 0);
TXREG = 13;
//clock in payload==============================================================================================
for(i = 0 ; i < 8 ; i++) //"4"
{
TX_MOSI = data.7;
TX_SCK = 1;
TX_SCK = 0;
data <<= 1;
}
data = 0x33;
for(i = 0 ; i < 8 ; i++) //"3"
{
TX_MOSI = data.7;
TX_SCK = 1;
TX_SCK = 0;
data <<= 1;
}
data = 0x32;
for(i = 0 ; i < 8 ; i++) //"2"
{
TX_MOSI = data.7;
TX_SCK = 1;
TX_SCK = 0;
data <<= 1;
}
data = 0x31;
for(i = 0 ; i < 8 ; i++) //"1"
{
TX_MOSI = data.7;
TX_SCK = 1;
TX_SCK = 0;
data <<= 1;
}
TX_CSN = 1;
//Pulse CE to start transmission ========================================================================
TX_CE = 1;
delay_ms(1);
TX_CE = 0;
}
my question is, what does these lines do?
while(TXIF == 0);
TXREG = 44;
while(TXIF == 0);
TXREG = 32;
void transmit_data(void)
{
uns8 i, data, cmd;
bit data2;
TX_CSN = 0;
data = 0x7E; //clear previous ints======================================================================================
cmd = 0x27;
for(i = 0 ; i < 8 ; i++)
{
TX_MOSI = cmd.7;
TX_SCK = 1;
data2 = TX_MISO;
TX_SCK = 0;
cmd <<= 1;
while(TXIF == 0); //print out the status register before clearing stuff...==============================
TXREG = data2+48;
}
while(TXIF == 0);
TXREG = 44;
while(TXIF == 0);
TXREG = 32;
for(i = 0 ; i < 8 ; i++)
{
TX_MOSI = data.7;
TX_SCK = 1;
TX_SCK = 0;
data <<= 1;
}
TX_CSN = 1;
TX_CSN = 0;
data = 0x3A; //PWR_UP = 1===========================================================================================
cmd = 0x20;
for(i = 0 ; i < 8 ; i++)
{
TX_MOSI = cmd.7;
TX_SCK = 1;
TX_SCK = 0;
cmd <<= 1;
}
for(i = 0 ; i < 8 ; i++)
{
TX_MOSI = data.7;
TX_SCK = 1;
TX_SCK = 0;
data <<= 1;
}
TX_CSN = 1;
TX_CSN = 0;
//clear TX fifo===========================================================================================
//the data sheet says that this is supposed to come up 0 after POR, but that doesn't seem to be the case
cmd = 0xE1;
for(i = 0 ; i < 8 ; i++)
{
TX_MOSI = cmd.7;
TX_SCK = 1;
TX_SCK = 0;
cmd <<= 1;
}
TX_CSN = 1;
TX_CSN = 0;
data2 = 0;
data = 0x34; //4 byte payload================================================================================
cmd = 0xA0;
for(i = 0 ; i < 8 ; i++)
{
TX_MOSI = cmd.7;
TX_SCK = 1;
data2 = TX_MISO;
TX_SCK = 0;
cmd <<= 1;
while(TXIF == 0); //print out status register after clearing ints...===============================
TXREG = data2+48;
}
while(TXIF == 0);
TXREG = 10;
while(TXIF == 0);
TXREG = 13;
//clock in payload==============================================================================================
for(i = 0 ; i < 8 ; i++) //"4"
{
TX_MOSI = data.7;
TX_SCK = 1;
TX_SCK = 0;
data <<= 1;
}
data = 0x33;
for(i = 0 ; i < 8 ; i++) //"3"
{
TX_MOSI = data.7;
TX_SCK = 1;
TX_SCK = 0;
data <<= 1;
}
data = 0x32;
for(i = 0 ; i < 8 ; i++) //"2"
{
TX_MOSI = data.7;
TX_SCK = 1;
TX_SCK = 0;
data <<= 1;
}
data = 0x31;
for(i = 0 ; i < 8 ; i++) //"1"
{
TX_MOSI = data.7;
TX_SCK = 1;
TX_SCK = 0;
data <<= 1;
}
TX_CSN = 1;
//Pulse CE to start transmission ========================================================================
TX_CE = 1;
delay_ms(1);
TX_CE = 0;
}
my question is, what does these lines do?
while(TXIF == 0);
TXREG = 44;
while(TXIF == 0);
TXREG = 32;