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