Forum: Compiler & IDEs Parsing von Zeichenketten im UART


von Martin (Gast)


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");
      }
    }



    }

von Martin B. (Gast)


Lesenswert?

Hallo Martin,

frag doch mal die Returncodes ab. Wahrscheinlich kommt UART_NO_DATA, 
wenn Du das delay rausnimmst.

Viel Erfolg,
MartinBe

von Martin (Gast)


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)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.