> ldi R16, LOW(31250)
> out OCR1AL, R16
> ldi R16, HIGH(31250)
> out OCR1AH, R16
Ganz typischer Fehler: Bei solchen 16-Bit-Doppelregistern muss IMMER
erst das High-Byte und dann das Low-Byte geschrieben werden. Das
High-Byte wird in einem temporären Register gepuffert. Der Zugriff auf
das Low-Byte "triggert" den eigentlichen Schreib- bzw. Lesevorgang.
Also:
- Beim schreiben erst High-, dann Low-Byte
- Beim Lesen erst Low-, dann High-Byte
Du schreibst das Low-Byte, was dazu führt, dass das (noch leere)
temporäre Register ins High-Byte übernommen wird. Das anschließende
Schreiben des High-Bytes hat überhaupt keinen Effekt mehr, weil der Wert
erst beim Schreibzugriff auf das Low-Byte ins Register übernommen werden
würde.