Hallo!
Ich habe dem AVR-Tutorial ein Codeschnipsel entnommen um mir vom
Assembler den Wert für UBRR0 bei gegebener Taktfrequenz und Baudrate
berechnen zu lassen. Ist der Baudratenfehler zu hoch, so wird mit einer
Fehlermeldung abgebrochen. Ansonsten soll der Wert für UBRR0 ausgegeben
werden. Hier das Minimalbeispiel:
1 | #include <m88PAdef.inc> ;Definitionsdatei ATMega88PA
|
2 |
|
3 | #define XTAL 8000000 ;Systemtakt 8 MHz
|
4 | #define BAUD 9600 ;Baudrate
|
5 |
|
6 | ;Berechnungen für Baudratenfehler
|
7 | #define UBRR0_VAL ((XTAL+BAUD*8)/(BAUD*16)-1) ;Gerundeter Wert für UBBR0
|
8 | #define BAUD_REAL (XTAL/(16*(UBRR0_VAL+1))) ;Reale Baudrate
|
9 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) ;Fehler in Promille
|
10 |
|
11 | #if ((BAUD_ERROR > 10) || (BAUD_ERROR < -10)) ;Max. +/-10 Promille, sonst Fehlermeldung
|
12 | #error "Fehler bei Baudrate grösser 1 Prozent!"
|
13 | #else
|
14 | #message "UBBR0 = " UBRR0_VAL
|
15 | #endif
|
16 |
|
17 |
|
18 | .CSEG
|
19 | nop
|
Als Ausgabe erfolgt:
test.asm(14): UBBR0 = ( ( 8000000 + 9600 * 8 ) / ( 9600 * 16 ) - 1 )
Wie bekomme ich es hin, dass dieser Term fertig ausgerechnet dort
erscheint? Es wäre schön wenn mir hier jemand weiterhelfen kann!
Viele Grüße, Chris