www.mikrocontroller.net

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


Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...
/* ====================================================
   | OrginalName : printf_test.c
   | OrginalDatum: 2008-06-14
   | ----------------------------
   | Version: 1.0
   =====================================================
   | Beschreibung:
   | Demo Programm fuer printf()
   | Problem: wie gebe ich mit printf() zahlen groeßer 32767 aus...
   =====================================================
*/

#include <avr/io.h>
#include <stdio.h>  // für printf  

//Baud Rate fuer die Serielle Schnittstelle
#define BAUD_RATE 38400    
#define BAUD_VALUE  (F_CPU / (BAUD_RATE * 16L) - 1)

// funktionen
void UART_Init (void);
void uart_puts(char* s);
int uart_putc(char c, FILE *stream);

// main
int main (void)
{
  UART_Init();

  printf("Maximale Integerzahl von printf(): %d",32767);
  while(1);
  return 0;
}

int uart_putc(char c, FILE *stream)
{
    while (!(UCSR0A & (1<<UDRE0))); /* warten bis Senden moeglich */
    UDR0 = c;                      /* sende Zeichen */
    return 0;
}

int uart_getc(FILE *stream)
{
    while (!(UCSR0A & (1<<RXC0)));  // warten bis Zeichen verfuegbar
    return UDR0;                   // Zeichen aus UDR an Aufrufer zurueckgeben
}

void UART_Init (void)
{
  /* Set baud rate */
  UBRR0H = (unsigned char)(BAUD_VALUE>>8);
  UBRR0L = (unsigned char)BAUD_VALUE;
  /* Enable Receiver and Transmitter */
  UCSR0B = (1<<RXEN0)|(1<<TXEN0);
  /* Set frame format: 8data, 2stop bit */
  UCSR0C = (1<<USBS0)|(3<<UCSZ00);
  
  fdevopen(uart_putc, uart_getc);

}


Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
printf mit %ld im Formatstring für "long decimal"?

Autor: Stefan Ernst (sternst)
Datum:

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

Autor: yalu (Gast)
Datum:

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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
* grml * Danke Leute für eure schnelle Hilfe.

Da bin ich echt auf dem Schlauch gestanden.

jetzt tut's...

Benedikt

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.