SPI (Serial Peripheral Interface) Basic

#define SPI_DDR 	           DDRx
#define SPI_ MOSI 	           DDx
#define SPI_ SCK 	           DDx
#define SPI_SS                 DDx
#define SPI_ MISO 	           DDx
#define SPI_PORT 	           PORTx
#define SPI_CS		           PINx
SPI_DDR|=(1<< SPI_ MOSI)|(1<< SPI_ SCK)|(1<< SPI_SS);
SPI_DDR&=~(1<< SPI_ MISO);
SPI_PORT&=~(1<<SPI_CS);               //Chip selection
SPCR|=(1<<SPE);                       //SPI Enable   
SPCR|=(1<<MSTR);                      //Set as Master
SPCR|=(1<<SPR1)|(1<<SPR0);            //Clock select
#define SPI_DDR 	           DDRx
#define SPI_ MOSI 	           DDx
#define SPI_ SCK 	           DDx
#define SPI_SS 	               DDx
#define SPI_ MISO 	           DDx
#define SPI_PORT 	           PORTx
#define SPI_CS		           PINx
SPI_DDR&=~((1<< SPI_ MOSI)|(1<< SPI_ SCK)|(1<< SPI_SS);
SPI_DDR|=(1<< SPI_ MISO);
SPCR|=(1<<SPE);                       //SPI Enable   
SPCR&=~(1<<MSTR);                     //Set as Slave
SPCR|=(1<<SPR1)|(1<<SPR0);            //Clock select
void SPIWrite(unsigned char datain)
{
	SPDR = datain; // send the data
while(!(SPSR & (1<<SPIF)))
	{
	; // wait until transmission is complete
	}
}
unsigned char SPIRead(void)
{
	while(!(SPSR & (1<<SPIF)))
	{
		; // wait until all data is received
	}
return SPDR;
}