Hallo Christian,
Hier sind zwei C-Programme mit denen du zwei
Atmels miteinander komunizieren lassn kannst.
Die Tasten im Master-Prog sind zur Kontrolle.
Ueber Portc kannst du dir die zurueckgesendeten Daten
anschauen.
Gruss Michael
// MASTER
#include <io.h>
int main(void)
{
unsigned int dataout;
outp(0xFF, DDRA); //Port A als Ausgang
outp(0xFF, DDRC); //Port C als Ausgang
outp(0x00, DDRD); //Port D als Eingang
outp(0x11, PORTA); //11 Fuer definierten Zustand
outp(0x11, PORTC); //11 Fuer definierten Zustand
outp(0X00, SPDR);
outp(0x70, PORTB); //01110000
outp(0xB0, DDRB); //1011 0000
outp(0x50, SPCR); //0101 0000
sbi(PORTB, 4);
while ((inp(PIND)&(0x01))==0);
cbi(PORTB, 4);
dataout=0xFF;
outp(dataout, SPDR);
outp(dataout, PORTA);
while(bit_is_clear(SPSR, SPIF));
outp((inp(SPDR)), PORTC);
cbi(SPSR, 7);
while ((inp(PIND)&(0x02))==0);
dataout=0x55;
outp(dataout, SPDR);
outp(dataout, PORTA);
while(bit_is_clear(SPSR, SPIF));
outp((inp(SPDR)), PORTC);
//cbi(SPSR, 7);
while ((inp(PIND)&(0x04))==0);
dataout=0xaa;
outp(dataout, SPDR);
outp(dataout, PORTA);
while(bit_is_clear(SPSR, SPIF));
outp((inp(SPDR)), PORTC);
//cbi(SPSR, 7);
while ((inp(PIND)&(0x08))==0);
dataout=0xcc;
outp(dataout, SPDR);
outp(dataout, PORTA);
while(bit_is_clear(SPSR, SPIF));
outp((inp(SPDR)), PORTC);
//cbi(SPSR, 7);
return 0;
}
//Slave
#include <io.h>
int main(void)
{
outp(0xFF, DDRC);
outp(0x00, PORTC);
outp(0x00, SPDR);
outp(0x40, SPCR); //0100 0000
outp(0x40, DDRB); //0100 0000
while(1)
{
while(bit_is_clear(SPSR, SPIF));
outp((inp(SPDR)), PORTC);
cbi(SPSR, 7);
}
return 0;
}