keiner eine Idee?
Hier nochmal der ganze Code
Code:
/**************************************************************
Es soll alle halbe Sekunde im Wechsel 0 bzw. 1 gesendet werden.
Am korrespondierenden Slave soll zur Indikation jeweils die
LEDs an bzw. aus gehen
Verdrahtung: MISO(Master) --> MISO(Slave)
MOSI(Master) --> MOSI(Slave)
SCK(Master) --> SCK(Slave)
PB0(Master) --> SS(Slave)
**************************************************************/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
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
if (count == 1) {
master_transmit ('1');
count--;
PORTL = 0xFF;
return;
}
if (count == 0) {
master_transmit ('0');
PORTL = 0x00;
count++;
}
}
void timer1 (void) {
TIMSK1 |= (1<<TOIE1); //Timer Overflow Interrupt enable
TCNT1 = 0; //Rücksetzen des Timers
TCCR1B = (1<<CS10) | (1<<CS11); //8MHz/65536/64 = 1,91Hz --> 0,5s
}
void master_init (void) {
DDRB = (1<<PB1) | (1<<PB2) | (1<<PB0); // setze SCK,MOSI,PB0 (SS) als Ausgang
PORTB = (1<<PB1) | (1<<PB0); // SCK und PB0 high (ist mit SS am Slave verbunden)
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); //Aktivierung des SPI, Master, Taktrate fck/16
status = SPSR; //Status löschen
}
void master_transmit (unsigned char data) {
PORTB &= ~(1<<PB0); //SS am Slave Low --> Beginn der Übertragung
SPDR = data; //Schreiben der Daten
while (!(SPSR & (1<<SPIF)));
PORTB |= (1<<PB0); //SS High --> Ende der Übertragung
}
int main (void) {
DDRL = 0xFF;
master_init ();
timer1 ();
sei ();
for (;;);
return 0;
}
Lesezeichen