printf() am ATmega16 benutzen

Gast #1763440
Lesenswert?

Hallo zusammen,
ich programmiere einen ATmega16 und will folgendes tun:

Ich will meiner stdio sagen das sie den Text den ich an printf() 
uebergebe an die Serielle Schnittstelle senden soll. Ich habe jedoch 
keine Ahnung wie ich das implementieren soll. Ich habe bereits einiges 
mit dem ATmega16 gemacht.. kenne mich mit den Eigenschaften des 
Controllers recht gut aus. Jedoch weiß ich nicht wie ich das umsetzten 
soll.. kann mir da jemand helfen?
#1763554
Lesenswert?

Na ja ... er ist kurz, also:
1
    #include <stdio.h>
2

3
    static int uart_putchar(char c, FILE *stream);
4

5
    static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL,
6
                                             _FDEV_SETUP_WRITE);
7

8
    static int
9
    uart_putchar(char c, FILE *stream)
10
    {
11

12
      if (c == '\n')
13
        uart_putchar('\r', stream);
14
      loop_until_bit_is_set(UCSRA, UDRE);
15
      UDR = c;
16
      return 0;
17
    }
18

19
    int
20
    main(void)
21
    {
22
      init_uart();
23
      stdout = &mystdout;
24
      printf("Hello, world!\n");
25

26
      return 0;
27
    }

Ein Programm, das bis auf init_uart() komplett ist und via printf() 
einen String am UART ausgibt.  Natürlich muss Du die UART-Register auf 
Deinen µC anpassen.

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