Pessoal, sou ainda novo na progrmação de AVR, e estou tentando fazer o PWM funcionar, mas sem muito sucesso... Quando tento colocar um valor em OCR0A ou OCR0B, nada acontece... Segue abaixo o código que fiz para testes...
.include "m88def.inc"
.def W=R16
.def TEMPO0=R17
.def TEMPO1=R18
.def D1=R19
.def D2=R20
.org 0x00
RJMP CONFIG
;---------------------------------------------------------------------
; CONFIGURAÇÕES INICIAIS PARA O PROGRAMA
CONFIG:
LDI W,0b11111111 ;CONFIGURA PORTD COMO SAÍDA
OUT DDRD,W ;PD5 E PD6 SÃO AS SAIDAS PWM
;CONFIGURAÇÃO DE TIMER0 PARA OPERAR COMO "NON-INVERTING FAST PWM",
;COM PRESCALER 1:8 E DOIS CANAIS (0A E 0B)
LDI W,0b10100011
OUT TCCR0A,W
LDI W,0b00000010
OUT TCCR0B,W
RJMP INICIO
;---------------------------------------------------------------------
INICIO:
CLR W
CLR D1
CLR D2
LOOP:
LDI W,0b10000000 ;CARREGA W COM O VALOR 128
;RCALL DELAY_MS ;CHAMA DELAY PROPORCIONAL À "W"
DEC D1 ; AUMENTA DUTY DO CANAL A
OUT OCR0A,D1 ; (*) DUTY CANAL A -> OCR0A
INC D2 ; AUMENTA DUTY DO CANAL B
OUT OCR0B,D2 ; (*) DUTY CANAL B -> OCR0B
RJMP LOOP
;---------------------------------------------------------------------
DELAY_MS:
MOV TEMPO1,W ; CARREGA TEMPO1
DEL_INI:
LDI W,250
MOV TEMPO0,W ; CARREGA TEMPO0
NOP_INI:
NOP
NOP
NOP
NOP
DEC TEMPO0
IN W,SREG
SBRS W,1 ; FIM DE TEMPO0 ?
RJMP NOP_INI ; NÃO - VOLTA
; SIM
DEC TEMPO1
IN W,SREG
SBRS W,1 ; FIM DE TEMPO1 ?
RJMP DEL_INI ; NÃO - VOLTA
; SIM
RET ; RETORNA