Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

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

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top