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?