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"??
Erst nach der Definition von cli() und sei() wurde das Ergebnis besser, ist das euch auch schon vorgekommen?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; }
Vielen Dank!







Zitieren

Lesezeichen