PS:
ihr könnt auch schreiben, wenn ihr dazu keinen Rat habt, damit ich auch dahingehend eine Rückmeldung habe.
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
Code: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
PS:
ihr könnt auch schreiben, wenn ihr dazu keinen Rat habt, damit ich auch dahingehend eine Rückmeldung habe.
Also meine UART-Init für nen Mega8 sieht so aus (Allerdings C)
So haut das eigentlich gut hin.Code: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;
#ifndef MfG
#define MfG
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.
Lesezeichen