Gast
#582661
Hallo, ich bin Anfänger und möchte gerne mit meinem STK501 Board eine Kommunikation zu einem Terminalprogramm am PC aufbauen über den USART. Ich mach jetzt schon ne ganze Weile daran rum und bekomm es einfach nicht hin, irgendwie geht wohl mein UDRE1 flag nie auf 1, da ich immer in der while Schleife hängen bleibe, das kann ich an meinen LED's sehen. Ich möchte eigentlich nur die Taste S0 drücken am STK501 und dann soll der Buchstabe x im Terminal erscheinen.... Bin bald am Verzweifeln, was mach ich falsch.?? Hier ist der Code: Bitte um Hilfe. Vielen Dank schon mal #include <stdint.h> #include <avr/io.h> int main (void) { //Port A und B initialisieren um Taster und LED`s zu steuern. DDRB= 0xff; //Ganzen Port B als Ausgang setzten DDRA= 0x00; //Ganzen Port A als Eingang setzten PORTA= 0xff; //Pull ab Widerstände für gesamten Port A aktiv //USART Contollregister initialisieren siehe S.197 Datenblatt /* USART-Init 19200 Baud bei 4MHz für AT90CAN128 */ UCSR1B |= ( 1 << TXEN1 ); // UART TX einschalten UCSR1C |= ( 1 << UMSEL1 )|(0<<UPM1)|(1<<USBS1)|( 3<<UCSZ1 ); // Asynchron modus Character Size 8-bit,2 Stopbit, kein Parity UBRR1H = 12; // Highbyte ist 12 UBRR1L = 25; // Lowbyte ist 25 ( dezimal ) ergibt 19,2k bei 4Mhz Clocktakt while (1) { if (!(PINA & (1<<PA0)) ) //Wenn PIN 0 von Port A 0 ist dann.... { UCSR1A |= //PORTB = PORTB & ~(1<<PB4); // setzte Pin4 an Port B (LED) //PORTB &= ~(1<<PB4); PORTB |= (1<<PB4); // setzte Pin4 an Port B (LED) while (!(UCSR1A & (1<<UDRE1))) /* warten bis Senden moeglich solange UDRE1 flag ist nicht*/ { /* 1 ist (also 0), durchlaufe die Schleife*/ } UDR1 = 'x'; /* schreibt das Zeichen x auf die Schnittstelle */ } else { PORTB &= ~(1<<PB4); } } }