hey guys! kommt schon lasst mich bitte nicht im Stich!!
hallo! kann mir vielleicht jemand weiterhelfen mit folgendem problem: sobald ich eine Taste auf der Tastatur drücke, sollte eigentlich die statusLED rot leuchten, tut sie aber nicht! was ist falsch oder was fehlt?!
#include <avr/io.h>
#include <avr/interrupt.h>
void Init(void);
ISR(USART_RXC_vect){
StatusLED(RED); // diese Funktion funktioniert ansonsten einwandfrei! wenn sie denn einmal aufgerufen würde....
UCSRA&=~(1<<RXC);
}
// Hauptprogramm
int main(void) {
Init();
StatusLED(GREEN);
UCSRB|=(1<<RXCIE);
UCSRB |= 0x10; // enable receiver
while(1);
return 0;
}
void Init (void)
{
// prepare RS232
UCSRA = 0x00;
UCSRB = 0x00;
UCSRC = 0x86; // No Parity | 1 Stop Bit | 8 Data Bit
UBRRL = 0xCF; // 2400bps @ 8.00MHz
sei();
}
hey guys! kommt schon lasst mich bitte nicht im Stich!!
Heißt das einmal funktionierts dan nicht mehr?
Bei manchen ISR steht im datenblatt das man sie durch das schreiben einer 1 in das entsprechende Register "zurücksetzen" muss
konte aber eigendlich nichts falsches erkennen bin abber auch nicht der beste was Register angeht
MFG
maexlich
Funktioniert denn das UART, wenn du es pollst?
das USART funktioniert sonst einwandfrei!!!! das problem liegt vielmehr darin dass der Interrupt aus irgendeinem Grund nie ausgelöst wird! keine Ahnung wieso!!!!
[quote="taylor22"]
Code:ISR(USART_RXC_vect){ StatusLED(RED); // diese Funktion funktioniert ansonsten einwandfrei! wenn sie denn einmal aufgerufen würde.... UCSRA&=~(1<<RXC); }aender das mal testweise. RXC ist naemlich read only.Zitat von Datenblatt Mega32
und schieb das sei(); mal direkt vor das while
vielleicht aendert das was.
hab das jetzt mal ausprobiert, doch es funktioniert immer nocht nicht! übrigens: im AVR studio funktioniert das UCSRA&=~(1<<RXC); !!!
bin um jeden weiteren Typ froh!!!
Gibts bei dir denn das define USART_RXC_vect? Bei meinem WinAVR gibts das nicht, kann aber auch eine ältere Version sein.
Bist du dir sicher, dass die Verkabelung in Ordnung ist und du auch wirklich Zeichen vom PC aus sendest?
Hallo,
Du solltest auch den empfangenen Byte aus dem UDR holen,
mach mal uint8_t a = UDR; in Deiner ISR rein auch wenn Du den Wert nicht brauchst.
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
jungs, danke! hat sich jetzt erledigt und funktioniert endlich
Lesezeichen