Hola, tengo un problema, lo que pasa es que estoy programando el timer/counter 1 en modo PWM, en asm y el micro es el AT90S8535, estou usando los 2 canales, el OC1A y el OC1B, meto lo valores al OC1AL, y al OCR1BL, y activo el PWM, llega una combinacion al PINB, activo la interrupcion INT0 y dependiendo de la combinacion se modifican los valores OC1xL.
El problema es que solo el canal 2 del pwm funciona (OC1B) el OC1A no funciona y la verdad no se porque, si los 2 los configure igual, me comentaron que es porque el pin en donde esta el OC1A, como es parte del puerto D tiene doble funcion, y que debo activar la funcion del pwm, pero no se como hacerlo. por eso les pido ayuda, dejo el codigo que tengo, para que vean que estoy haciendo:
.include "8515def.inc"
;*****************************************
.org $000 ; Inicio
rjmp Reset
.org $001 ;Interrupcion externa
rjmp INTE
.def PARAR = r20
.def INICIAR = r21
.def MOTOR1 = r22
.def MOTOR2 = r23
;*****************************************
Reset:
;*****************************************
cli ; Descativa Interrupciones Globales
;*****************************************
; Stak Pointer
ldi r16, high(RAMEND)
out SPH, r16
ldi r16, low(RAMEND)
out SPL, r16
;*******************************************
;Configuracion del vector 0x001 INT0
ldi r16, 0b00000010
out MCUCR, r16
ldi r16, 0b01000000
out GIMSK, r16; Interrupcion Habilitada
;*******************************************
;Canal 1 Del PWM ;MOTOR 1
ldi r17, 0xFD ; Valor De OCR1A L
out OCR1AL, r17
;*****************************************
; Canal 2 Del PWM MOTOR 2
ldi r17, 0xFD ; Valor De OCR1B L
out OCR1BL, r17
;*****************************************
; Configuracion de PWM
ldi r17, 0b10100000 ;Resolucion de 8 bits
out TCCR1A, r17
;Configuracion De CLK
ldi r17, 0b00000010
out TCCR1B, r17
;****************************************
;Configuracion De Puertos
clr r17
out DDRB, r17 ;Puerto B Como Entrada
ser r17
out DDRA, r17 ;Puerto A Como Salidoa
;****************************************
ldi PARAR, 0b10100000
ldi INICIAR, 0b10100001
sei ;Activa Interrupciones Globales
INICIO:
nop
rjmp INICIO
;*************************************
;Interrupcion INT0
INTE:
in r18, PINB
cpi r18, 0x00
breq DETENER
cpi r18, 0b00000001
breq ADELANTE
cpi r18, 0b00000010
breq DERECHA
cpi r18, 0b00000011
breq IZQUIERDA
cpi r18, 0b00000100
breq REVERSA
cpi r18, 0b00000101
breq R_DERECHA
cpi r18, 0b00000110
breq R_IZQUIERDA
cpi r18, 0b00000111
breq AUMENTAR
cpi r18, 0b00001000
breq DISMINUIR
reti
DETENER:
;PWM APAGADO
out TCCR1A, PARAR
reti
ADELANTE:
;Configuracion de PULSO
ldi MOTOR1, 0xFD
ldi MOTOR2, 0xFD
out OCR1AL, MOTOR1
out OCR1BL, MOTOR2
;PWM habilitado
out TCCR1A, INICIAR
reti
DERECHA:
;Configuracion De Pulso
ldi MOTOR1, 0xFD
ldi MOTOR2, 0x7E
out OCR1AL, MOTOR1
out OCR1BL, MOTOR2
;PWM habilitado
out TCCR1A, INICIAR
reti
IZQUIERDA:
ldi MOTOR1, 0x7E
ldi MOTOR2, 0xFD
out OCR1AL, MOTOR1
out OCR1BL, MOTOR2
;PWM habilitado
out TCCR1A, INICIAR
reti
REVERSA:
reti
R_DERECHA:
reti
R_IZQUIERDA:
reti
AUMENTAR:
reti
DISMINUIR:
reti