-
-
probleme mit printf()
hallo.
bin anfänger. heute habe ich mich mit dem UART von ATmega8 beschäftigt. wollte ein programm schreiben, welches einfach einen zählerzustand auf hyperterminal ausgibt.
mein problem ist folgender: die formartierung mit PrintF() klappt irgendwie nicht. auf hyperterminal wird dann "Counter: d" an stelle von "Counter:0" , "Counter:1", "Counter:2" u.s.w. ausgegeben. was mache ich falsch?
CODE:
#include <avr/io.h>
#include <avr/delay.h>
#include "datentypen.h"
#define F_CPU 3686400
#define UART_BAUD_RATE 9600
#define MYUBRR F_CPU/(UART_BAUD_RATE * 16L) - 1
int PrintF(const u8 *format, ...);
void uart_putc(u8 c);
void InitUART(u16);
int main(void)
{
PORTD|=(1<<PD2);
InitUART(MYUBRR);
u16 cnt=0;
while(1)
{
if(!(PIND & (1<<PD2)))
{
_delay_ms(80);
if(PIND & (1<<PD2))
cnt=0;
}
PrintF("Counter:%d\r\n",cnt);
cnt+=1;
_delay_ms(1000);
}
}
int PrintF(const u8 *format, ...)
{
u8 buffer;
while(*format != '\0')
{
if(*format=='%')
*format++;
buffer=*format;
uart_putc(buffer);
*format++;
}
}
void uart_putc(u8 c)
{
while (!(UCSRA & (1<<UDRE))); /* warten bis Senden moeglich */
UDR = c; /* sende Zeichen */
}
void InitUART(u16 ubrr)
{
/* Set baud rate */
UBRRH = (u8)(ubrr>>8);
UBRRL = (u8)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron 8N1
}
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen