Mi objetivo es medir los pulsos de PWM. Pero para lograrlo, estoy dando pasos de bebé, por lo que mi primer objetivo es establecer un pin cuando se detecta un borde de la señal PWM. La señal PWM ingresa al microcontrolador (pic18f25k80, Hoja de datos ) en el pin INT1 (RB1). Escribí el código para inicializar la interrupción externa:
#include <stdio.h>
#include <stdlib.h>
#include <pic18f25k80.h>
#include "config.h"
void main() {
TRISB1 = 1; // INT1 as input
LATB1 = 0; // Clear INT1
TRISC6 = 0; // RC6 as output
LATC6 = 0; // Clear RC6
//Setup of INT1
RCONbits.IPEN = 0; //Disable priorities
INTCONbits.GIE_GIEH = 1; //Enable Global interrupt
INTCONbits.PEIE_GIEL = 1; //Enable peripheral interrupts
INTCON2bits.INTEDG1 = 1; // Edge select for INT1
INTCON3bits.INT1IE = 1; // Enable the INT1 external interrupt
//INTCON3bits.INT1IP = 0; // Low priority
INTCON3bits.INT1IF = 0; //Clear external interrupt flag bit
while(1) {
}
}
//Interrupt Service Routine
#pragma code isr=0x08
#pragma interrupt isr
void isr(void)
{
if(INTCON3bits.INT1IF){
LATC6 = 1;
}
}
#pragma code
Parece que el indicador de interrupción no sube, porque el pin RC6 está bajo. Lo he medido con un osciloscopio. ¿Qué estoy haciendo mal?
BTW es la forma correcta de llamar a un ISR?