SPI on PIC16F88 program

Status
Not open for further replies.

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;
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…