Para un proyecto, quiero que dos microcontroladores hablen entre sí a través de una interfaz SPI. Escribí el siguiente código para el esclavo:
volatile uint8_t data;
void spi_init_slave (void)
{
DDRB=(1<<PINB4); //MISO as OUTPUT
SPCR=(1<<SPE)|(1<<SPIE); //Enable SPI && interrupt enable bit
SPDR=0;
}
uint8_t SPI_SlaveReceive(void)
{
/* Wait for reception complete */
while (!(SPSR & (1<<SPIF))) ;
/* Return data register */
return SPDR;
}
ISR(SPI_STC_vect)
{
uint8_t y = SPI_SlaveReceive();
PORTD = y;
}
int main(void)
{
DDRD = (1<<PIND0) | (1<<PIND1) | (1<<PIND2) | (1<<PIND3) | (1<<PIND4);
spi_init_slave(); //Initialize slave SPI
sei();
while(1)
{
}
}
El maestro está enviando un número que el esclavo muestra usando los LED conectados al puerto D. Estoy usando un Atmega8P para este proyecto.