Forum: Mikrocontroller und Digitale Elektronik printf() dezimalzahlen größer 32768


von Benedikt (Gast)


Lesenswert?

Hallo Zusammen,
ich habe weniger ein Problem ich brauch mehr einen Rat.
Ich möchte ein unsinged short int (2byte) in voller größe mit Hilfe von 
printf() aus der stdio.h ausgeben.

Nun ist mein "Problem" dass ich dazu in der stdio.h rumpfuschen müsste. 
Momentan weiß ich noch nicht wo, sollte sich aber finden lassen.
Doch gibt es da eine elegantere Methode?

Hier mein Code:
Ich würde gerne bis an die Grenze von 65535 gehen...
1
/* ====================================================
2
   | OrginalName : printf_test.c
3
   | OrginalDatum: 2008-06-14
4
   | ----------------------------
5
   | Version: 1.0
6
   =====================================================
7
   | Beschreibung:
8
   | Demo Programm fuer printf()
9
   | Problem: wie gebe ich mit printf() zahlen groeßer 32767 aus...
10
   =====================================================
11
*/
12
13
#include <avr/io.h>
14
#include <stdio.h>  // für printf  
15
16
//Baud Rate fuer die Serielle Schnittstelle
17
#define BAUD_RATE 38400    
18
#define BAUD_VALUE  (F_CPU / (BAUD_RATE * 16L) - 1)
19
20
// funktionen
21
void UART_Init (void);
22
void uart_puts(char* s);
23
int uart_putc(char c, FILE *stream);
24
25
// main
26
int main (void)
27
{
28
  UART_Init();
29
30
  printf("Maximale Integerzahl von printf(): %d",32767);
31
  while(1);
32
  return 0;
33
}
34
35
int uart_putc(char c, FILE *stream)
36
{
37
    while (!(UCSR0A & (1<<UDRE0))); /* warten bis Senden moeglich */
38
    UDR0 = c;                      /* sende Zeichen */
39
    return 0;
40
}
41
42
int uart_getc(FILE *stream)
43
{
44
    while (!(UCSR0A & (1<<RXC0)));  // warten bis Zeichen verfuegbar
45
    return UDR0;                   // Zeichen aus UDR an Aufrufer zurueckgeben
46
}
47
48
void UART_Init (void)
49
{
50
  /* Set baud rate */
51
  UBRR0H = (unsigned char)(BAUD_VALUE>>8);
52
  UBRR0L = (unsigned char)BAUD_VALUE;
53
  /* Enable Receiver and Transmitter */
54
  UCSR0B = (1<<RXEN0)|(1<<TXEN0);
55
  /* Set frame format: 8data, 2stop bit */
56
  UCSR0C = (1<<USBS0)|(3<<UCSZ00);
57
  
58
  fdevopen(uart_putc, uart_getc);
59
60
}

von Sven P. (Gast)


Lesenswert?

printf mit %ld im Formatstring für "long decimal"?

von Stefan E. (sternst)


Lesenswert?

Wenn du mit printf ein unsigned int ausgeben willst, dann sag das dem 
printf doch einfach:
printf("%u",ui);

von yalu (Gast)


Lesenswert?

Ein unsigned short wird mit %hu ausgegeben. %d ist für signed int.
S. printf-Doku.

von Benedikt (Gast)


Lesenswert?

* grml * Danke Leute für eure schnelle Hilfe.

Da bin ich echt auf dem Schlauch gestanden.

jetzt tut's...

Benedikt

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.