Forum: Mikrocontroller und Digitale Elektronik Atmega48 Uart endlosschleife


von Simon (Gast)


Lesenswert?

Hallo,
ich habe einen Atmega48 und ich möchte erstmal über den USART etwas mit 
der Interrupt "USART_RX_vect" empfangen und dann einfach ein Zeichen 
zurücksenden. Das Problem ist, dass das Interrupt scheinbar endlos oft 
aufgerufen wird, nachdem ich 1 einziges Zeichen vom PC zum µC gesendet 
habe.
Hier ist der Quellcode vom Programm:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
#ifndef F_CPU
5
  #define F_CPU 8000000UL 
6
#endif
7
 
8
#define BAUD 9600UL
9
 
10
// Berechnungen
11
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
12
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
13
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
14
 
15
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
16
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! 
17
#endif
18
19
void uart_init ( unsigned int ubrr)
20
{
21
  UBRR0H = (unsigned char) (ubrr>>8);
22
  UBRR0L = (unsigned char) ubrr;
23
  UCSR0B = (1<<RXCIE0) | (1<<RXEN0) | (1<<TXEN0);
24
  
25
  UCSR0C = (1<<USBS0) | (3<<UCSZ00);
26
}
27
28
void uart_putc (char c)
29
{
30
  while (!(UCSR0A & (1<<UDRE0)))
31
    ;
32
  UDR0 = c;
33
}
34
35
ISR(USART_RX_vect)
36
{
37
  uart_putc ('a');
38
}
39
40
int main(){
41
  uart_init (UBRR_VAL);
42
  
43
  sei();
44
  while (1)
45
  {
46
    
47
  }
48
  return 0;
49
}
Ich sende das Zeichen zum Mikrocontroller mit dem Programm HTerm. Da 
habe ich 9600 Baud, 8 Data- und 2 Stopbits eingestellt.
Ich hoffe ihr könnt mir helfen.
Viele Grüße
Simon

von Stefan E. (sternst)


Lesenswert?

Simon schrieb:
> Das Problem ist, dass das Interrupt scheinbar endlos oft
> aufgerufen wird, nachdem ich 1 einziges Zeichen vom PC zum µC gesendet
> habe.

Weil du das empfangene Zeichen nicht ausliest.

von Simon (Gast)


Lesenswert?

Argh danke das hat das Problem gelöst..

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.