www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik gets problem


Autor: J. K. (rooot)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich möchte mit gets daten über die tastatur einlesen (datum und uhrzeit)

code hab ich vom tutorial:
uint8_t uart_getc(void)
{
    while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
        ;
    return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
}
 
void uart_gets( char* Buffer, uint8_t MaxLen )
{
  uint8_t NextChar;
  uint8_t StringLen = 0;
 
  NextChar = uart_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
  while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
    *Buffer++ = NextChar;
    StringLen++;
    NextChar = uart_getc();
  }
                                 // Noch ein '\0' anhängen um einen Standard
                                  // C-String daraus zu machen
  *Buffer = '\0';
}
//zeit und datum einstellen (uart zuvor configurieren!)
void zeit_einstellen(void)
{
  myprintf("Datum? yy.mm.dd\n\r");

  uart_gets(zeittemp,9);

  y=(zeittemp[0]-'0')*10+(zeittemp[1]-'0');
  m=(zeittemp[3]-'0')*10+(zeittemp[4]-'0');
  d=(zeittemp[6]-'0')*10+(zeittemp[7]-'0');
  sprintf(zeittemp,"%2i:%2i:%2i",y,m,d);
  myprintf("%s",zeittemp);


  myprintf("\n\nZeit? hh:mm:ss\n\r");

  uart_gets(zeittemp,9);
  
  h=(zeittemp[0]-'0')*10+(zeittemp[1]-'0');
  min=(zeittemp[3]-'0')*10+(zeittemp[4]-'0');
  sek=(zeittemp[6]-'0')*10+(zeittemp[7]-'0');
  sek--;
  sprintf_P(zeittemp,PSTR("%2i:%2i:%2i"),h,min,sek);
  
  myprintf("%s",zeittemp);

  myprintf("\n\n");
}

zeittemp ist 19 Byte groß.

Epmpfang ist auch aktiviert:
#define UART0_CONFIGURE1    UCSRB= (1<<RXCIE) | (1<<TXCIE) | (1<<RXEN) | 
(1<<TXEN)

wird natürlich auch aufgerufen.

das problem ist, dass die eingabe nicht nach 9 zeichen stoppt, sondern 
erst nach 21 eingaben stoppt.

wie kann das sein?

Autor: J. K. (rooot)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die (my)printf Funktion hab ich von holger klabunde

hab mir mal da genauer angeschaut.

der löste das mit transmit und receive interrupts.

kann das der Grund sein? Die UART-Schnittstelle ist auch auf das 
initialisiert.

Weiteres Problem:
Ich hab einen Timer1 overflow interrupt
zur kontrolle gib ich isr über die uart aus.

es wirt nur das "i" übermittelt, dann steckt der Controller.
kann das mit den UART-Interrupts zusammenhängen?

kann ich die uart interrupts irgendwie entfernen?

Was muss ich ändern das es geht?

Anlage:
serial
printf
von holger klabunde

Autor: J. K. (rooot)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
sry anhang

Autor: J. K. (rooot)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann es stören dass in serial.c noch "SIGNAL" verwendet wird?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.