#include #include #include unsigned char status = 0; volatile unsigned char count; void timer1 (void); void master_init (void); void master_transmit (unsigned char data); SIGNAL (SIG_SPI) { return; } SIGNAL (SIG_OVERFLOW1) { //Senderoutine TCNT1 = 0; if (count == 1) { master_transmit ('0'); count--; return; } if (count == 0) { master_transmit ('1'); count++; return; } } void timer1 (void) { TIMSK |= _BV(TOIE1); //Timer Overflow Interrupt enable TCNT1 = 0; //Rücksetzen des Timers TCCR1B = _BV(CS10) | _BV(CS11); //8MHz/6536/64 = 1,91Hz --> 0,5s } void master_init (void) { DDRB = _BV(PB0) | _BV(PB5) | _BV(PB7); // setze SCK,MOSI,PB0 (SS) als Ausgang DDRB &= ~_BV(PB6); // setze MISO als Eingang PORTB = _BV(PB7) | _BV(PB0); // SCK und PB0 high (ist mit SS am Slave verbunden) SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPR0); //Aktivierung des SPI, Master, Taktrate fck/16 status = SPSR; //Status löschen } void master_transmit (unsigned char data) { PORTB &= ~_BV(PB0); //SS am Slave Low --> Beginn der Übertragung SPDR = data; //Schreiben der Daten while (!(SPSR & (1< Ende der Übertragung } int main (void) { for (unsigned int i = 0;i < 65000;i++) { asm volatile("nop"); } master_init (); timer1 (); sei (); for (;;)asm volatile("nop"); for (;;)asm volatile("nop"); return 0; }