-
-
Hallo H3IIGhost
Lass es mich einmal so sagen, im Prinzip ja, aber am Ende deines Programms ist nur das Bit für COM1B1 gesetzt. Du überschreibst das Register TCCR1A immer wieder.
damaltor hat es richtig Beschrieben. WGM10 , COM1A1 und COM1B1 stehen für Bitpositionen. Sie sind in der Definitationsdatei m8def.inc zum ATmega8 beschrieben.
z.B
.equ WGM10 = 0
Der Ausdruck steht also für den Wert 0, unabhängig davon auf was er angewendet werden soll. Wenn der Assembler auf einen solchen Ausdruck trifft, durchsucht er die include dateien nach diesem Ausdruck. Und wenn er ihn findet, dann ersetzt er ihn durch den zugeordneten Wert. Du könntest auch WGM10 = 0 durch Otto10 = 0 ersetzen, das Ergebnis wäre das Gleiche. Genau so Verhält es sich auch mit COM1A1 = Bitposition 7 und COM1B1 = Bitposition 5. So ist also WGM10 ein synonym für 0. Der Ausdruck in dieser Zeile besagt also, setzte im Register temp
( synonym für r16 ) an der Bitposition 0 eine 1. Danch führe eine ODER Verknüpfung an den Bitpositionen 5 und 7 mit dem Register temp durch.
Diese Anweisung kann ersetzt werden durch
ldi temp, 0xA1
oder
ldi temp, 0b10100001
Das Ergebnis ist immer gleich. Die Bits 0 - 5 - 7 werden auf 1 gesetzt und die andern Bits bleiben auf 0.
Es ist nur nicht mehr so einfach zu Verstehen, was da gemacht wird.
Diese ODER Verknüpfung fehlt noch in deinem Programm.
MfG
A.Hoffmann
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen