Hallo zusammen,
ich habe aktuell ein Problem mit meinem Atmega32. Ich möchte Daten der
USART über den Interrupt einlesen. Sobald Daten gesendet werden, soll
der Interrupt geöffnet werden, die Daten in ein array gespeichert, und
eine Zählvariable erhöht werden. Diese Zählvariable möchte ich später
auch im Hauptprogramm verwenden.
Leider scheiter ich gerade daran, dass die Zählvariable im Interrupt
richtig erhöht wird, aber im Hauptprogramm immer noch den Startwert
besitzt.
Hoffe es kann mir einer von euch sagen, wo mein Fehler liegt.
Code:
#include <stdio.h>
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned int baud = 103;
unsigned char data[32];
unsigned char rcv_length=0;
ISR(USART_RXC_vect)
{
data[rcv_length] = UDR;
//UDR = data[rcv_length];
rcv_length++;
};
void USART_Init(unsigned char baud)
{
UBRRH = (unsigned char) (baud>>8);
UBRRL = (unsigned char) baud;
UCSRC = (1<<URSEL) | (0<<USBS) | (3<<UCSZ0) |(2<<UPM0);
UCSRB = (1<<TXEN) | (1<<RXEN) | (1<<RXCIE);
};
void USART_Transmit(unsigned char data)
{
while( !(UCSRA & (1<<UDRE) ) );
UDR = data;
};
//Hauptprogramm
int main(void)
{
USART_Init(baud);
sei();
while(1)
{
_delay_ms(1000);
USART_Transmit(rcv_length);
};
}
Vielen Dank im Vorraus!
Gruss