gets problem

OP #942451
Lesenswert?
• ▲
▼
hallo,

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

code hab ich vom tutorial:
1
uint8_t uart_getc(void)
2
{
3
    while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
4
        ;
5
    return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
6
}
7
 
8
void uart_gets( char* Buffer, uint8_t MaxLen )
9
{
10
  uint8_t NextChar;
11
  uint8_t StringLen = 0;
12
 
13
  NextChar = uart_getc();         // Warte auf und empfange das nächste Zeichen
14
 
15
                                  // Sammle solange Zeichen, bis:
16
                                  // * entweder das String Ende Zeichen kam
17
                                  // * oder das aufnehmende Array voll ist
18
  while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
19
    *Buffer++ = NextChar;
20
    StringLen++;
21
    NextChar = uart_getc();
22
  }
23
                                 // Noch ein '\0' anhängen um einen Standard
24
                                  // C-String daraus zu machen
25
  *Buffer = '\0';
26
}
27
//zeit und datum einstellen (uart zuvor configurieren!)
28
void zeit_einstellen(void)
29
{
30
  myprintf("Datum? yy.mm.dd\n\r");
31

32
  uart_gets(zeittemp,9);
33

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

40

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

43
  uart_gets(zeittemp,9);
44
  
45
  h=(zeittemp[0]-'0')*10+(zeittemp[1]-'0');
46
  min=(zeittemp[3]-'0')*10+(zeittemp[4]-'0');
47
  sek=(zeittemp[6]-'0')*10+(zeittemp[7]-'0');
48
  sek--;
49
  sprintf_P(zeittemp,PSTR("%2i:%2i:%2i"),h,min,sek);
50
  
51
  myprintf("%s",zeittemp);
52

53
  myprintf("\n\n");
54
}

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?
OP #942498
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

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