int in ASCII Zeichen umwandeln

Gast #524089
Lesenswert?

hast recht, es funktioniert
habs jetzt so gemacht:
1
int main (void)
2
{  char s[2];
3
  uint8_t c;
4
  
5
    uart_EnableRX();
6
    c=uart_getc();
7
    s[0]=c;
8
    s[1]=NULL;
9
    
10
   uart_init();
11
   while (!(UCSRA & (1<<UDRE)))  
12
    {
13
    }
14
   //sprintf(s,"%c",c);
15
   uart_puts( s )
hatte "s" vorher als normalen char deklariert, wenn ich aber den ASCII 
zahlenwert übergebe und die "Ende-NULL" anfüge klapt alles wunderbar
Dank!!
Gast #524097
Lesenswert?

is schon klar, aber ich will sowieso nicht nur ein zeichen vom rechner 
empfangen, sondern mach da noch ne schleife bis /n kommt, halt bis ENTER 
gedrückt wird
da muss ich die einzelnen char doch auch in einem buffer string erst mal 
zusammenfassen (mein problem lag eigentlich in der uart_puts, die sendet 
den übergebenen string bis /n und bei nem char sucht die sich halt tot)
Gast #524155
Lesenswert?

ok, jetzt sollte ich wohl mal den ganzen code posten:
1
#include <avr/io.h>
2
#include <inttypes.h> 
3

4
#define UART_BAUD_RATE 19200UL //Baudrate 
5

6

7
void uart_init(void)
8
{
9
    // USART-Init 19200 Baud bei 16MHz für Mega32
10
    UCSRB |= ( 1 << TXEN );      // UART TX einschalten
11
    UCSRC |= ( 1 << URSEL )|( 3<<UCSZ0 );  // Asynchron 8N1
12
    UBRRH  = 0;                                 // Highbyte ist 0
13
    UBRRL  = 51;                                // Lowbyte ist 51
14
} 
15

16
void uart_EnableRX(void)
17
{
18
    UCSRB |= ( 1 << RXEN );
19
}
20

21
void uart_putc(unsigned char c)
22
{
23
    while (!(UCSRA & (1<<UDRE))) {}  // warten bis Senden möglich 
24
    UDR = c;                         // Zeichen senden   
25
}
26

27
void uart_puts (char *s)
28
{
29
    while (*s)
30
    {   uart_putc(*s);
31
        s++;
32
    }
33
}
34

35
uint8_t uart_getc(void)
36
{
37
    while (!(UCSRA & (1<<RXC))) {} // warten bis Zeichen verfügbar
38
    return UDR;                    // Zeichen aus UDR zurueckgeben
39
}
40

41
int main (void)
42
{  char s[2];
43
  uint8_t c;
44
  
45
    uart_EnableRX();
46
    c=uart_getc();
47
    //s[0]=c;
48
    //s[1]=NULL;
49

50
    uart_init();
51

52
    while (!(UCSRA & (1<<UDRE))) {} // warten bis Senden möglich                   
53
  
54
    //uart_putc( c );  // funktioniert!!!!
55
    uart_putc( c );  //mit s anstatt c funktioniert alles wunderbar???
56
    uart_puts( "\r\n" );
57

58
    return 0; 
59
}

  
Gast #524184
Lesenswert?

weil c nur ein Zeichen ist und kein string (d.h. ein _array_von chars) 
ist.

just for fun: mach mal "uart_puts(&c)" ;-)
dann siehst du, dass Arrays als Pointer übergeben werden und dass 
strings in C "\0" terminiert sind
Gast #524188
Lesenswert?

Weil c ein einzelner Character ist und uart_puts einen Zeiger auf einen 
String mit Nullterminator erwartet! Wenn Du die Funktionen doch selbst 
geschrieben hast, dann solltest Du auch wissen, welche Parameter sie 
haben. Steht doch wirklich alles in Deinem geposteten Code!
Gast #524197
Lesenswert?

bin trotzdem von ausgegangen, dass er damit klar kommt obwohl das "ende 
zeichen" beim char fehlt
hätt ja sein könn, dass der compiler merkt, dass das nur ein char is, 
wenns denn schon so definiert wurde (es kommt ja nicht mal ne warnung) 
und dass er weiss, dass die länge halt nur 1 ist
beim feld is es ja klar, da wird halt immer auf NULL (bzw. \0)geprüft

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