Banner publicitario de PCBWay

PWM e interrupciones en ATmega328P

Hola a todos, estoy empezando con los micros avr en ensamblador, no puedo hacer que el siguiente código funcione, el pwm se genera, pero la interrupción no va al vector especificado, ya intenté con el modo 14 y 15 fast pwm, no sé qué estoy haciendo mal,
gracias de antemano.



Código:
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created:   ju. dic. 11 2025
; Processor: ATmega328P
; Compiler:  AVRASM (Proteus)
;====================================================================

;====================================================================
; DEFINITIONS
;====================================================================

;====================================================================
; VARIABLES
;====================================================================

;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================

    ; Reset Vector
    .org    0x0000
    jmp    Start
    .org    0x0016
    jmp    rsi_0
    ;.org 0x000
    ;rjmp
    ;.org 0x000

;====================================================================
; CODE SEGMENT
;====================================================================

Start:
    ldi    r16, 0b00000011                 ;configura pb0, pb1 como salida
    out    ddrb, r16
   
   
   
    ldi    r17, 0b10000010  ;0x82    ;configura pb1 como salida no invertida
    sts    tccr1a, r17               ;preescaler a 1 o sin preescaler
    ldi    r18, 0b00011001           ;modo de pwm 14 fast pwm
    sts    tccr1b, r18
    ldi    r19, 0x04                 ;frecuencia de pwm 20khz frcuencia de ic 20Mhz
    sts    icr1h, r19
    ldi    r20, 0xe2
    sts    icr1l, r20                ;ciclo de trabajo 50%
    ldi    r21, 0x02
    sts    ocr1ah, r21
    ldi    r22, 0x71        ;0x96
    sts    ocr1al, r22

   
    ldi    r16, 0x0ff               ;inicia puntero de pila
    out    spl, r16
    ldi    r16, 0x008
    out    sph, r16
   
    ldi    r23, 0x01               ;abilita interrupcion coincidencia de comparacion
    sts    timsk1, r23             ; de salida
   
    cbi    tifr1, 1                ;borra flag de interrupcion
    sei                            ;abilita interrupciones global

Loop:
    nop
    nop
    rjmp   Loop


;=============================ISR=======================================
rsi_0:                      
    sbic   pinb, 0
    rjmp   tm0
    rjmp   tm1

tm0:  
    nop
    cbi    Portb, 0
   
tm1:  
    nop
    sbi    Portb, 0
   
   
   
    cbi    tifr1,1
    reti

;====================================================================
 
Última edición por un moderador:
Atrás
Arriba