Hallo zusammen,
ist das korrekt, dass die ISR(USART_RXC_vect) eventuell nach mehrfacher Eingabe von
Zeichen über die Tastatur, die Ausgabe einer if then Abfrage "überschreibt"??
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define F_CPU 7372800
#define BAUD 9600
#define UBRR_VAL F_CPU/16/BAUD-1
volatile unsigned char receive_char;
volatile int buffersize = 8;
ISR(USART_RXC_vect)
{
receive_char = UDR;
}
void init_uart(unsigned int ubrr)
{
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)(ubrr);
UCSRB = (1 << RXEN) | (1 << TXEN) | (1<<RXCIE);
UCSRC = (1<<URSEL)|(1<<UCSZ0) | (1<<UCSZ1);
}
void send_char(unsigned char data)
{
while (!(UCSRA & (1<<UDRE)));
UDR = data;
}
void send_string(char *data)
{
while (*data)
{
send_char(*data);
data++;
}
}
int main(void)
{
DDRB |= (1<<PB1);
init_uart(UBRR_VAL);
send_string("TESTING");
sei();
PORTB |= (1<<PB1);
_delay_ms(300);
PORTB &=~ (1<<PB1);
uint8_t i;
while (1)
{
//i = strlen(receive_char);
cli();
if (receive_char == 100)
{
send_string("Yes, we wrote e");
}
if (receive_char == 114)
{
send_string("Yes, we wrote r");
}
if (receive_char == 116)
{
send_string("Yes, we wrote t");
}
receive_char = "";
sei();
}
return 0;
}
Erst nach der Definition von cli() und sei() wurde das Ergebnis besser, ist das euch auch schon vorgekommen?
Vielen Dank!
Lesezeichen