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?