Parsing von Zeichenketten im UART

Gast #2051445
Lesenswert?

Hallo Gemeine,

ich bin neu. Martin mein Name. Versuche gerade mittels Uart meinen 
ATmega8151 16Mhz zu steuern. Verwende GCC und Avr Studio. Mein Prgramm 
soll wenn es ein Steuerzeichen "#" bekommt abhängig von den nächsten 
drei Zeichen etwas unternehmen. Das Klappt auch, jedoch nur, wenn ich 
den _delay drin lasse. Wenn ich es raus nehme, erkennt er zwar noch das 
steuerzeichen, jedoch nicht mehr die weiteren. Verwende die uart.h von 
Peter Fleury.

Vielen Dank bei der Hilfe.


#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <string.h>
#include "uart.h"

#define UART_BAUD_RATE      9600


int main(void)
{
    char c, tmp[3];
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
    sei();

  DDRD = (1<<PD5);
  PORTD = (1<<PD5);

    while(1)
  {
    c = uart_getc();
    _delay_ms(1);
    //uart_puts("warten\n");
    if(c == '#'){
      //tmp = "0";
      uart_puts("erkannt\n");

      for(int i=0; i<=2; i++){
        tmp[i] = (char)uart_getc();
      }

      if(tmp[0] == '0'){
        PORTD = (0<<PD5);
        uart_puts("LED an\n");
      } else if(tmp[0] == '1'){
        PORTD = (1<<PD5);
        uart_puts("LED aus\n");

      } else {
        uart_puts("nichts\n");
      }
    }



    }
Gast #2051711
Lesenswert?

hm könnte sein. Das würde dann wohl an der Übertragungsgeschwindigkeit 
von 9600 baud liegen. Sprich ich frage schneller ab, es kommt aber 
nichts neues

-> da '#' erkennt er zwar, aber nicht das nächste Zeichen, weil es noch 
garnicht kommt. (macht Sinn)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren