ich hab's jetzt mal so probiert:
hab außer RXD und TXD noch eine Verbindung zwischen den beiden Contoller hergestellt.
Jetzt setze ich den einen Pin high und der Sender soll das erste Byte schicken. Danach wieder low und beim 2. high soll er das 2. Byte schicken (der Sender zählt die Anzahl der highs/ Impulse mit).
Das funktioniert so aber nicht, mein Display zeigt die beiden Werte abwechseln an.
Code vom Sender:
Code:
void uart_putc(unsigned char zahl)
{
while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
{
}
UDR = zahl; /* sende Zeichen */
}
int main(void)
{
//Steuerleitung
DDRA &= ~(1<<DDA6); //Eingang
//init UART
UBRRH = 0; // Highbyte ist 0
UBRRL = 3; // Lowbyte ist 51
UCSRB |= (1<<TXEN); //auf senden gestellt
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
unsigned char Bsp1 = 43;
unsigned char Bsp2 = 78;
int i = 0;
for( ; ; )
{
if(i==0)
{
if (PINA & (1<<PINA6))
{
uart_putc(Bsp1);
i=1;
}
}
else if (i==1)
{
if (PINA & (1<<PINA6))
{
uart_putc(Bsp2);
i=0;
}
}
}
return 0;
}
hier der Code vom Empfänger:
Code:
unsigned char uart_getc(void)
{
while (!(UCSRA & (1<<RXC)))
{
} // warten bis Zeichen verfügbar
return UDR; // Zeichen aus UDR zurueckgeben
}
int main(void)
{
lcd_init(LCD_DISP_ON); //Display
lcd_clrscr();
//init UART
UBRRH = 0; // Highbyte ist 0
UBRRL = 3; // Lowbyte ist 51
UCSRB |= (1<<RXEN); //auf empfangen gestellt
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
//Steuerleitung
DDRD |= (1<<PD2); //Ausgang
char buffer1[6];
char buffer2[6];
int a;
int b;
while(1)
{
PORTD |= (1<<PD2);
a = uart_getc();
PORTD &= ~(1<<PD2);
PORTD |= (1<<PD2);
b = uart_getc();
PORTD &= ~(1<<PD2);
itoa( a, buffer1, 10 );
lcd_gotoxy(0, 0);
lcd_puts(buffer1);
itoa( b, buffer2, 10 );
lcd_gotoxy(0, 1);
lcd_puts(buffer2);
}
return 0;
}
Lesezeichen