Hallo mic,
danke für denTest.
Hier der komplette Code, vielleicht kannst du einen Fehler entdecken?
Code:
//test
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h> // itoa etc.
#define UART_BAUD_RATE 9600L //baudrate definieren
#define UART_BAUD_CALC ((F_CPU)/((UART_BAUD_RATE)*16L)-1)
volatile uint8_t zaehler;
void usart_init (void)
{
UCSRC |= (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); // Asynchron, 8N1
UBRRH=(uint8_t)(UART_BAUD_CALC>>8); // Baudrate wählen
UBRRL=(uint8_t)UART_BAUD_CALC;
}
void usart_start (void)
{
UCSRB |= (1 << TXEN); // UART TX (senden) einschalten
UCSRB |= (1 << RXEN); // UART RX (empfangen) einschalten
}
void usart_putc(unsigned char c) // Ein Zeichen senden
{
while(!(UCSRA & (1 << UDRE))); // warte, bis UDR bereit
UDR = c; // sende Zeichen
}
void usart_puts (char *s) // Einen String senden
{
while (*s) // so lange *s != NULL
{
usart_putc(*s);
s++;
}
}
void usart_put_int (int wert)
{
char text [7];
itoa (wert, text, 10);
usart_puts (text);
}
void timer0_init (void)
{
TCCR0 |= (1<<CS01);
TCCR0 |= (1<<CS00);
TCCR0 |= (1<<WGM01);
OCR0=124;
}
void timer0_start (void)
{
TIMSK |= (1 << OCIE0); //Timer0 Interrupt freigegeben
}
void timer0_stop (void)
{
TIMSK &= ~(1 << OCIE0); //Timer0 Interrupt sperren
}
ISR(TIMER0_COMP_vect) // wird jede ms ausgeführt
{
zaehler++;
}
void pause(uint8_t faktor, uint8_t ms) //millisek eingeben max 255
{
uint8_t i;
for (i=1; i<=faktor; i++)
{
zaehler=0;
while (zaehler<ms);
}
}
int main(void)
{
sei();
usart_init();
usart_start();
timer0_init ();
timer0_start();
int8_t a=0;
while(1)
{
usart_put_int (a);
usart_puts("\r\n");
pause(1,10);
//a=a+1;
a++;
}
while(1);
return 0;
}
Gruss
M.
Lesezeichen