我正在使用汇编语言编写Arduino UNO (=ATMega328P-PU)程序,以节省内存,因此我使用avra.exe(与atmel studio的avrasm32相同)进行编译,使用avrdude进行上传,像闪烁这样的简单程序可以正常运行。但是现在我尝试使用pwm来半亮一个LED。我检查了代码中的错误,但没有发现任何问题,但LED仍然全亮。我也检查了接线。以下是我的pwm.asm代码:
.nolist
.include "m328pdef.inc"
.list
.cseg
.org 0x00
rjmp start
.org 0x34
start: sbi ddrb, 5 ;pin 13
sbi portb, 5 ;pin 13 on, just to compare with the PWMed led
sbi ddrd, 5 ;pin 5 pwm
ldi r16, 0b00100011 ;fast pwm mode, non inverted pwm at oc0b = pin 5
out tccr0a, r16 ;I'm using Timer0
ldi r16, 0b00000001 ;no prescaler
out tccr0b, r16
ldi r16, 128 ; duty cycle = 50%
out ocr0b, r16
loop: rjmp loop
我尝试改变占空比数值,但没有任何改变。