so hier mal der sklave der nix sendet:
Code:
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>

#define DDR_SPI PORTB
#define DD_SS	PB0
#define DD_SCK  PB1
#define DD_MOSI PB2
#define DD_MISO PB3

//#####################
void spi_slave_init(void);
void spi_slave_receive(void);
int main(void);
//#####################
volatile char tx_data;
volatile char rx_data;

SIGNAL (SIG_SPI)
{
rx_data=SPDR;
SPDR=tx_data;
}

void spi_transmit(void)
{
switch (rx_data)
{
case 0x00:	tx_data=0xFF;break;			//1.mal ini
case 0x01: tx_data=0xFE;break;			//daten
case 0x02:	tx_data=0xFD;break;			
case 0x03: tx_data=0xFC;break;
case 0x04:	tx_data=0xFB;break;			
case 0x05: tx_data=0xFA;break;
case 0x06:	tx_data=0xF9;break;			
case 0x07: tx_data=0xF8;break;
case 0x08:	tx_data=0xF7;break;			
case 0x09: tx_data=0xF6;break;
}
}

void spi_slave_init(void)
{
DDR_SPI = (1<<DD_MISO)|(0<<DD_MOSI)|(0<<DD_SS)|(0<<DD_SCK);
SPCR = (1<<SPE)|(1<<SPIE);
sei();
}

/*
void spi_slave_receive(void)
{
SPDR=tx_data;
while(!(SPSR & (1<<SPIF)));
rx_data=SPDR;
}
*/

int main(void)
{
DDRE=0xFF;

spi_slave_init();

while(1)
{
PORTE=rx_data;
spi_transmit();
//spi_slave_receive();
}
return 0;
}