Hallo booty,
eigentlich steht alles in dem Link, den ich Dir gepostet habe drin, aber egal, ich erkläre es nochmal
1. Problem:
Code:
#define USART_RXC_vect _VECTOR(14)
Das ist unnötig, kann eventuell schaden, lass das weg, das ist Aufgabe von Compiler (Präprozessor) den Vektor richtig zuzuordnen.
2. Problem:
buffer muß als volatile deklariert werden, warum, sehe link oben
Code:
volatile uint8_t buffer;
3. Problem
Code:
UCSRB = (1<<TXEN) | (1<<RXEN);
Ja, hier mußt Du noch den Interrupt einschalten, sonst wird er nie ausgeführt, also
Code:
UCSRB = (1<<TXEN) | (1<<RXEN)|(1<<RXCIE);
4. Problem, der Interrupt sollte etwa so aussehen:
Code:
ISR(USART_RXC_vect)
{
buffer = UDR;
}
Du brauchst hier keine flags mehr setzen, oder auf irgendwas warten.
5. Problem, es fehlt wieder die Endlosschleife, mach das etwa so:
Code:
int main(void)
{
DDRA = 0xff;
uart_init();
sei();
for(;;){
led_init();
}
return 0;
}
So dann schaumal...
Anmerkung noch Du kannst auch anstatt von 0x31 '1' schreiben, ist vielleicht einfacher zu lesen(wenn man die ASCII Werte nicht im Kopf hat.
Viel Erfolg
@kater,
Kein Problem, der Dragon hat sich auch gefreut mal ein paar Bytes schaufeln zu dürfen, außerdem wollte ich es auch wissen...
Gruß Sebastian
Lesezeichen