controlador de interrupciones

-2

He escrito debajo del segmento de código. Pero, no pude entender por qué no es trabajo. ¿Puedes ayudar a arreglarlo?

PIC16F877

init:
    TRISB = b'11110000'
    rbif  = 0
    rbie  = 1
    gie   = 1
isr:
    btfss  INTCON, RBIF
    goto   not_pressed
    goto   pressed

pressed:
    btfsc    PORTB, RB4 
    goto     $+2
    goto     RB4_handler 
    btfsc    PORTB, RB7 
    goto     $+2
    goto     RB7_handler 
    
pregunta user1315050

1 respuesta

1

Cuando pregunte por qué 'algo no funciona', siempre debe mencionar

1) lo que está intentado hacer

2) lo que realmente hace.

No puedo entender tu código. Las primeras líneas parecen definiciones de símbolos, pero tengo la sensación de que quieres que sean asignaciones.

La etiqueta isr: probablemente debería estar en ORG 4 (ya sea de forma exclusiva o por el script del vinculador), pero no creo que sea ahora.

¿ NO usa la construcción $ + 2! Hace que el código sea difícil de leer y propenso a errores de escritura (¿es +2 una o dos instrucciones?). Use etiquetas, como lo hace en otros lugares.

Dentro de un controlador de interrupciones, no puede estar seguro de lo que contendrá PCLATCH, por lo que no puede hacer ningún goto (o llamadas) hasta que haya configurado PCLATH. Y, por supuesto, primero debe guardar el antiguo PCLATH para poder restaurarlo al final del ISR.

Si está escribiendo un gestor de interrupciones, deberá guardar y restaurar el contexto, lo que debe hacerse de forma compleja en estos chips. Consulte la hoja de datos para ver ejemplos.

No muestra el código del controlador, así que no puedo verificarlo. Al menos debe borrar el bit de fuente de interrupción y terminar con un RETFIE.

    
respondido por el Wouter van Ooijen

Lea otras preguntas en las etiquetas