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 | }
|