Estoy midiendo el ancho de un impulso PWM con la interrupción externa:
void interrupt ISR() {
if (INTCON3bits.INT1IF) { // INT0 interrupt
if(INTCON2bits.INTEDG1) { // Rising edge detected
T1CONbits.TMR1ON = 1; // Start TMR1
INTCON2bits.INTEDG1 = 0; // Swap edge
} else if (!INTCON2bits.INTEDG1) { // Falling edge detected
T1CONbits.TMR1ON = 0; // Stop TMR1
INTCON2bits.INTEDG1 = 1; // Swap edge
}
INTCON3bits.INT1IF = 0; // Clear flag
}
}
Quiero almacenar el ancho del pulso actual y el ancho del siguiente pulso. Por ancho me refiero al valor TMR1 [hexadecimal], no a un valor de tiempo [s]. ¿Cómo y dónde debo hacer esto?
Algo más: si estos dos valores de pulso son los mismos, quiero hacer 'algo1', si no lo son, quiero hacer 'algo2': se parece a esto:
if (current_value == previous_value) {
Do something1; // if entered here, I will start UART communication and keep reading incomming data constantly, so I suppose this is a dead end.
} else {
Do something2; // if entered here, there is no need of pulse measurment anymore
}
Pero mientras esté en esto, si la rutina quiero verificar constantemente el ancho del pulso, ¿cómo puedo hacer eso? Pensé en una rutina de "hacer mientras", pero no estoy seguro de ello también.
Estoy trabajando con pic18f25k80, usando MPLAB X si esto es importante