So,
Die Lösung kann so einfach sein, einfach das ding verschieben und gut ist ist ja bei 2^x das selbe (Scheiß Hochsprachen mit ihrem ^ )
Das ^ ist neben bei eine XOR verknüpfung, wieder was gelernt
Der Rest vom Code kann ich bei bedarf auch noch posten, sind nur so triviale Sachen wie UASRT send, receive und init drin.
Code:
;----------------------------------------------------------------------------
; Variablen
;----------------------------------------------------------------------------
.equ USART = USARTE0_base // Basis Adresse des Verwendeten USART
.equ PORT = PORTE_base // Basis Adresse des Verwendeten Ports
.equ TX_EN = 1 // Receive enable: 0 = disabled, 1 = enabled
.equ RX_EN = 1 // Transmit enable: 0 = disabled, 1 = enabled
.equ BAUD = 9600
.equ BIT = USART_CHSIZE_8BIT_gc // 5, 6, 7, 8, (9) Databits
.equ PARRITY = USART_PMODE_ODD_gc // allowed values ODD, EVEN, DISABLED
.equ STOP = 1 // 0 = 1bit, 1 = 2bit
.equ CLK2X = 1 // double speed: 0 = disabled, 1 = enabled
.equ BSCALE = -7
.equ F_PER = 2000000
;----------------------------------------------------------------------------
; Berechnungen
;----------------------------------------------------------------------------
.if (CLK2X < 1)
.if (BSCALE >= 0)
.equ BSEL = ((F_PER / ((1<<BSCALE) * 16 * BAUD)) - 1)
.equ BAUD_REAL = F_PER / ((1<<BSCALE) * 16 * (BSEL + 1))
.else
.equ BSEL = ((1 << -BSCALE) * ((F_PER / (16 * BAUD)) - 1))
.equ BAUD_REAL = (F_PER * (1 << -BSCALE) / (16 * ((1 << -BSCALE) + BSEL)))
.endif
.if (BAUD > (F_PER / 16))
.error "BAUD zu groß, oder Periferie clock zu klein: (vllt. CLK2X?)"
.endif
.else
.if (BSCALE >= 0)
.equ BSEL = ((F_PER / ((1<<BSCALE) * 8 * BAUD)) - 1)
.equ BAUD_REAL = F_PER / ((1<<BSCALE) * 8 * (BSEL + 1))
.else
.equ BSEL = ((1 << -BSCALE) * ((F_PER / (8 * BAUD)) - 1))
.equ BAUD_REAL = (F_PER * (1 << -BSCALE) / (8 * ((1 << -BSCALE) + BSEL)))
.endif
.if (BAUD > (F_PER / 8))
.error "BAUD zu groß, oder Periferie clock zu klein: Periferieclock erhöhen"
.endif
.endif
.equ BAUD_ERROR = ((BAUD_REAL * 1000) / BAUD - 1000)
.if ((BAUD_ERROR > 10) || (BAUD_ERROR < -10)) ; max. +/-10 Promille Fehler
.error "Systematischer Fehler der Baudrate groesser 1 Prozent und damit zu hoch!"
.endif
E: Threadtitel geändert
Lesezeichen