#include <SPI.h>
void setup(void){
SPI.begin();                            // Initialisation SPI
SPI.setClockDivider(SPI_CLOCK_DIV8);    // Horloge F_CPU/64
digitalWrite(SS,HIGH);                  // Désactive le périphérique
}
void loop(void){
digitalWrite(SS,LOW);
for(i=0;i<64;i++) SPI.transfer(0xe0);
digitalWrite(SS,HIGH);
}
#include <avr/io.h>
#define SPI_DDR         DDRB
#define SPI_PORT        PORTB
#define SPI_SS          2
#define SPI_MOSI        3
#define SPI_MISO        4
#define SPI_SCK         5
void spi_init(void){                                 // Initialisation du bus SPI
SPI_DDR |= (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS);   // Définition des sorties
SPI_DDR &= ~(1<<SPI_MISO);                           // Définition de l'entrée
SPI_PORT |= (1<<SPI_SS);                             // Désactivation du périphérique
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1);                 // Activation SPI (SPE) en état maître (MSTR)
                                                     // horloge F_CPU/64 (SPR1=1,SPR0=0)
}
void spi_activer(void){                              // Activer le périphérique
SPI_PORT &= ~(1<<SPI_SS);                            // Ligne SS à l'état bas
}
void spi_desactiver(void){                           // Désactiver le périphérique
SPI_PORT |= (1<<SPI_SS);                             // Ligne SS à l'état haut
}
uint8_t spi_echange(uint8_t envoi){                  // Communication sur le bus SPI
SPDR = output;                                       // Octet a envoyer
while(!(SPSR & (1<<SPIF)));                          // Attente fin envoi (drapeau SPIF du statut)
return SPDR;                                         // Octet reçu
}
int main(void){
spi_init();
int i;
spi_activer();
for(i=0;i<64;i++) spi_echange(0xe0);                 // Que de rouge
spi_desactiver();
}