如何更改 PWM AVR 的占空比(汇编 - 无 C)

How to change duty cycle on PWM AVR (assembly - no C)

我想将 PWM 占空比从 20% 更改为 70%。虽然我改变了我的 OCR1AL 值。占空比保持不变。这是为什么?我应该改变其他东西吗?据我了解,虽然 OCR1A 显示最高值,但它是我可以用来更改占空比的唯一参数(寄存器)。

.include "m16def.inc"
.cseg

PWM:
    ;input
    ldi r16, 0x00
    out DDRA, r16

    ;output
    ldi r16, 0xff
    out DDRD, r16
    out PORTD, r16

    ldi r20, 0xc1
    out TCCR1A, r20
    ldi r20, 0x01


    out TCCR1B, r20
    ldi r20, 0x00
    out OCR1AH, r20
    ldi r20, 0x33
    out OCR1AL , r20

    in r22, TIFR
    andi r22, 0b00000100
    out PORTD, r22

SW0:

in r23, PINA
cpi r23, 0b11111110
brne SW0

ldi r16, 0x82
in r17, OCR1AL
ADD r16,r17
out OCR1AL, r16
jmp SW0

ldi r16, 0x00
out PORTD, r16

我正在使用 4MHz 的 AVR ATmega16

您的问题与计时器设置有关。你应该先检查一下。 如果你想使用 16 位定时器,你应该使用这些配置来设置你的定时器设置: 类型:快速 PWM 顶部 0xFFFF

您可以在微控制器数据表中了解如何配置定时器。

此配置后,如果更改前 8 位,占空比将发生很好的变化。

我认为您的设置是针对 8 位定时器的,因此您必须将 OCR1AL 从 0 更改为 255,以将占空比从 0% 更改为 100%。