Hallo,
ich möchte beim Empfang eines Zeichens über die serielle Schnittstelle
in die Interrupt-Routine springen und das Zeichen auf das Display
schreiben.
Jedoch springt er nicht in die Interrupt Routine. Ich hab kein Ahnung
warum. Die Interrupts sind mittels sei(); aktiviert. Der
Interrupt-Vektor stimmt auch!
Flo
#include <avr/io.h>
#include <avr/interrupt.h>
void USART_Init()
{
UCSRB |= ( 1 << TXEN )|( 1 << RXEN );
UCSRC |= ( 1 << URSEL )|( 3<<UCSZ0 );
UBRRH = 0;
UBRRL = 51;
}
ISR (USART_RXC_vect)
{
unsigned char buffer;
buffer = UDR;
glcdWriteChar(buffer);
}
int main(void)
{
//Interrupts freigeben
sei();
//Display initialisieren
glcdInit();
//serielle Schnittselle initialisieren
USART_Init();
while(1)
{
}
}
Abgesehen von
1 | UCSRB |= ((1<<RXEN) | (1<<TXEN)|(1<<RXCIE)); //Transmit&Receive&RX Int |
wirst du noch mehr Probleme bekommen indem du aus einer ISR eine warscheinlich sehr koplexe Funktion (glcdWriteChar) aufruft. Aber wie immer: Aus Erfahrung lernen. ;-) Werner
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.