anabolik
13.03.2006, 16:59
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
}
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
}