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; }







Zitieren

Lesezeichen