如何更改 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%。
我想将 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%。