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
Sebastian Z. schrieb: > Leider scheiter ich gerade daran, dass die Zählvariable im Interrupt > richtig erhöht wird, aber im Hauptprogramm immer noch den Startwert > besitzt. volatile unsigned char rcv_length=0;
Vielen Dank Karl Heinz! Wenn ich jetzt "data[rcv_legth]" über die Funktion USART-Transmit senden möchte?
Sebastian Z. schrieb: > Vielen Dank Karl Heinz! > > Wenn ich jetzt "data[rcv_legth]" über die Funktion USART-Transmit senden > möchte? Dann schickst du es. Wo ist das Problem? (Ausser das in data[rcv_length] noch nichts sinnvolles stehen wird, weil es noch nie beschrieben wurde) Wenn du alles bisher empfange wieder zurückschicken willst, dann wäre zb eine Schleife das Mittel der Wahl.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.