Hola de nuevo, sigo en el intento de que la interrupción funcione correctamente, ahora lo que he hecho ha sido cambiar el interruptor por un tren de pulsos de 1 Hz, como lo podeis ver en la imagen adjunta, pero he puesto que después de la interrupción RA0 esté en estado alto durante 100 ms y como podéis ver en la imagen del osciloscopio dura 400 ms.
He visto varios ejemplos en el foro y tengo la misma estructura, el programa definitivo que he utilizado es el siguiente:
#include <16F84a.H>
#fuses XT,NOWDT // OSCILADOR CRISTAL DE CUARZO Y SIN WD
#use delay(clock=4000000)
#use standard_io(A)
#use standard_io(b)
#use fixed_io(a_outputs=PIN_A0,PIN_A1)
// DEFINICION DE INTERUPCION EXTERNA
#int_ext
void IntRB0()
{
output_low(PIN_A0);
output_high(PIN_A0);
delay_ms(100);
output_low(PIN_A0);
}
// PROGRAMA PRINCIPAL
void main (void)
{
// HABILITACION DE INTERUPCIONES EXTERNAS Y GLOBAL
ext_int_edge(L_TO_H); // interrupcion para comparacion flanco de subida
enable_interrupts(int_ext); // habilitacion de interupcion externa
enable_interrupts(global);
for(;
{}
}
¿porque a la hora de ejecutase el programa, siempre esta en el último for, esperando una interrupción por RB0, y una vez que haq ocurrido la interrupción se ejecuta esta parte del programa?
#int_ext
void IntRB0()
{
output_low(PIN_A0);
output_high(PIN_A0);
delay_ms(100);
output_low(PIN_A0);
}
Creo que es así como funciona esta interrupción, pero sigo sin saber que pasa con los 400 ms, ¿tendrá algo que ver con el relon?
De nuevo gracias por vuestra colaboración