printf() dezimalzahlen größer 32768

Gast #895853
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
}

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