Forum: Mikrocontroller und Digitale Elektronik USART-Initialisierung


von Schüler (Gast)


Lesenswert?

Hallo zusammen.

Ich lerne gerade für meine Mikrocontroller-Prüfung und hänge bei einer 
Sache fest.

Initialisierung vom USART: Aus meinen Unterlagen werde ich leider nicht 
ganz schlau. Die Berechnung von UBRR und das richtige setzten der Bits 
im Register ist ja kein Problem aber wie bringe ich den 
UBRR(Teilungsfaktor) im Programm unter. Da gibt's ja UBRRH und UBRRL, 
also high und low weils ein 16bit Register ist. Aber wie könnte die 
Zuweisung eines Wertes im Programm aussehen? Angenommen UBRR währe 5000, 
wie würde die entsprechende Zeile im Programm aussehen?

Ich hoffe jemand erbarmt sich und nimmt sich die Zeit mir zu helfen.

von rmu (Gast)


Lesenswert?

UBRRH=19; UBRRL = 136;

Ohne Gewähr.

von Joe S. (joesch)


Lesenswert?

welcher controller?
welche sprache?

von Schüler (Gast)


Lesenswert?

Joe S. schrieb:
> welcher controller?
> welche sprache?

Es geht um Atmega in C.

von Schüler (Gast)


Lesenswert?

rmu schrieb:
> UBRRH=19; UBRRL = 136;

währe noch hilfreich zu erfahren wie du auf die Zahlen kommst.

von Joe S. (joesch)


Lesenswert?

Der Compiler kann das:
1
UBRR = (uint16_t)5000;

: Bearbeitet durch User
von rmu (Gast)


Lesenswert?

Schüler schrieb:
> rmu schrieb:
>> UBRRH=19; UBRRL = 136;
>
> währe noch hilfreich zu erfahren wie du auf die Zahlen kommst.

das sind einfach die oberen und unteren 8 bit von 5000.

5000 = 0001001110001000|2. 00010011|2 = 19, 10001000|2 = 136.

von Schüler (Gast)


Lesenswert?

Joe S. schrieb:
> UBRR = (uint16_t)5000;

Währe es dann so auch richtig??

UBRRH=(uint16_t)5000>>8;
UBRRL=(uint16_t)5000;

von Joe S. (joesch)


Lesenswert?

Schüler schrieb:
> Joe S. schrieb:
>> UBRR = (uint16_t)5000;
>
> Währe es dann so auch richtig??
>
> UBRRH=(uint16_t)5000>>8;
> UBRRL=(uint16_t)5000;

besser so:
1
uint16_t ubrr = 5000;
2
UBRRH = (unsigned char)(ubrr>>8);
3
UBRRL = (unsigned char)ubrr;

: Bearbeitet durch User
von Schüler (Gast)


Lesenswert?

Schon mal besten Dank für die Hilfe. Nur noch eine Frage: Wieso jetzt 
unsigned char?

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Schüler schrieb:
> Schon mal besten Dank für die Hilfe. Nur noch eine Frage: Wieso jetzt
> unsigned char?

 Weil es von 0 bis 255 geht.
 Oder uint8_t.

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
Noch kein Account? Hier anmelden.