Hallo Leute bin neu hier weil ich als alter Anfänger hier noch verzweifel. Folgendes Problem:
Ich habe folgenden Code (in C) bei dem ich Zeichen(Hex) vom PC mit HTerm über die Serielle an den AVR schicke, dieser gibt mir dann eine Prüfsumme(alle Zeichen aufaddiert) zurück über die Serielle(und noch was auf dem Display ist aber nebensächlich).
wenn ich in hterm 20(hex) schicke kommt 00 zurück obwohl ja 20 kommen
müsste.
wenn ich 20 20 20(also alles eingeben und auf einmal schicken) eingebe
dann kommt 00 60 raus. also das 60 stimmt ja(lasse alle empfangenen
Zeichen aufaddieren) aber warum kommt vorher 00 was wird hier zu oft
durchlaufen oder was ist hier schief???
Ich verzweifle an so einer einfachen Sache
Ich habe folgenden Code (in C) bei dem ich Zeichen(Hex) vom PC mit HTerm über die Serielle an den AVR schicke, dieser gibt mir dann eine Prüfsumme(alle Zeichen aufaddiert) zurück über die Serielle(und noch was auf dem Display ist aber nebensächlich).
Code:
int main(void)
{
UCSRB |= (1<<TXEN); // UART TX einschalten
UCSRB |= (1<<RXEN);
UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron 8N1
UBRRH = UBRR_VAL >> 8;
UBRRL = UBRR_VAL & 0xFF;
char daten[41];
int ende = 0;
int wert = 0;
int checksumme(char Nextchar,int wert)
{
wert = wert + Nextchar;
return wert;
}
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}
uint8_t usart_getc(void)
{
while (!(UCSRA & (1<<RXC))) // warten bis Zeichen verfuegbar
;
return UDR; // Zeichen aus UDR an Aufrufer zurueckgeben
}
void usart_gets( char* Buffer, uint8_t MaxLen )
{
uint8_t NextChar;
uint8_t StringLen = 0;
NextChar = usart_getc(); // Warte auf und empfange das nächste Zeichen
// Sammle solange Zeichen, bis:
// * entweder das String Ende Zeichen kam
// * oder das aufnehmende Array voll ist
wert = checksumme(NextChar,wert);
*Buffer++ = NextChar;
ende = wert;
while( (UCSRA & (1<<RXC)) && StringLen < MaxLen - 1 )
{
NextChar = usart_getc();
*Buffer++ = NextChar;
wert = checksumme(NextChar,wert);
ende = wert;
StringLen++;
};
}
// LCD Initialisieren
uint8_t loop;
lcd_init();
lcd_clear();
lcd_set_cursor(0,LINE0); // set cursor position
lcd_putc(small_font,'1'); // draw some singel chars
lcd_putc(small_font,'2');
lcd_putc(small_font,'3');
anweisungen:
usart_gets( daten, sizeof( daten ) );
lcd_clear();
lcd_set_cursor(0,LINE2);
int i;
for(i=0;i<=ende;i++)
{
lcd_putc(small_font,daten[i]);
}
USART_Transmit(ende);
goto anweisungen;
}
wenn ich in hterm 20(hex) schicke kommt 00 zurück obwohl ja 20 kommen
müsste.
wenn ich 20 20 20(also alles eingeben und auf einmal schicken) eingebe
dann kommt 00 60 raus. also das 60 stimmt ja(lasse alle empfangenen
Zeichen aufaddieren) aber warum kommt vorher 00 was wird hier zu oft
durchlaufen oder was ist hier schief???
Ich verzweifle an so einer einfachen Sache