PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mega8 UART UBRRH und UCSRC Problem [gelöst]



The Man
03.02.2011, 21:32
Hallo Forum,

ich steh vor dem Problem, dass ich den UART im Mega8 nicht richtig initialisiert bekomme. Es steht ja im Datenblatt, dass UBRRH und UCSRC die gleiche Adresse haben und sich der Zugriff im siebten Bit dem URSEL unterscheidet. Jedoch läuft mein Code nicht und die Simulation zeigt, dass immer beide Register beschrieben werden.
Habe auch verschieden Varianten ausprobiert: erst UBRRH dann UCSRC und umgekehrt. Erst UBRRL dann UBRRH und umgekehrt. Da tut sich aba nada... Böhhh.

Jemand einen Vorschlag? Danke schön!!
The Man



ldi tmp1,0b00010000;;receiver enable
out UCSRB,tmp1

ldi tmp1,0b10000110; 8 Bit Modus
out UCSRC,tmp1

ldi tmp1,LOW(25); Teiler für
out UBRRL,tmp1; 38,4k Baudrate
ldi tmp1,HIGH(25); bei 16MHz
out UBRRH,tmp1

The Man
03.02.2011, 22:10
PS:
ihr könnt auch schreiben, wenn ihr dazu keinen Rat habt, damit ich auch dahingehend eine Rückmeldung habe.

Jaecko
03.02.2011, 22:58
Also meine UART-Init für nen Mega8 sieht so aus (Allerdings C)


ui8_t sreg = SREG;
ui16_t ubrr = (ui16_t) ((ui32_t) F_CPU / (16 * baud) - 1); // ist 0x33
UBRRH = (ui8_t) (ubrr>>8);
UBRRL = (ui8_t) (ubrr);
cli();
UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE);
UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
do
{
UDR;
} while (UCSRA & (1 << RXC));
UCSRA = (1 << RXC) | (1 << TXC);
SREG = sreg;


So haut das eigentlich gut hin.

The Man
04.02.2011, 15:20
such such such
such such such

Den Bock hab ich selbst geschossen, weil ich labels kopiert hatte beim Coden und eines nicht mit dem nächsten Indizee versehen hatte und fertig war die Endlosloop.

Das es wie von mir beschrieben simuliert wird, ist entweder Absicht oder ein Simulationsbug.