Interrupción de hardware de MikroC

0

Estoy intentando programar un PIC 16F876A usando mikroC. Necesito que el programa se ejecute cuando presiono un botón hasta cierto punto, deténgase y espere hasta que se presione nuevamente el botón antes de terminar.

void interrupt() // ISR 
{ 
 INTCON.INTF=0; // Clear the interrupt 0 flag 
 PORTC=~PORTC; // Invert (Toggle) the value at PortD 
 Delay_ms(1000); // Delay for 1 sec 
}

He leído que usar una interrupción de hardware es la forma de hacerlo, pero no puedo hacer que la mía funcione.

    
pregunta user3004927

1 respuesta

1

No especificas lo que significa "no funciona", por lo que solo señalaré algunas cosas.

La rutina de servicio de interrupción publicada no parece abordar la función de programa descrita. Esta rutina alterna un puerto, espera un segundo y luego vuelve a lo que se estaba ejecutando antes de que se activara la interrupción. En su lugar, usted dice que desea que el programa espere a que se presione un botón, luego haga algo y luego que espere a que se presione otro botón.

Si el programa no hace nada más que esperar una entrada, realmente no necesita una interrupción, solo un ciclo de sondeo. Se deben usar interrupciones cuando necesite responder rápidamente a un evento o hacer algo en un momento preciso. Los ISR deben terminar rápidamente; Nunca se debe incluir un retraso de un segundo.

Otra cosa a considerar: hay más en usar una interrupción que escribir un ISR. No estoy familiarizado con mikroC, pero en general necesitará al menos configurar un vector de interrupción, configurar la E / S o el periférico para generar una interrupción y habilitar las interrupciones. ¿Has hecho toda esta necesaria inicialización?

Además, al ingresar a una rutina de interrupción, el contexto de la CPU, su estado y registros, se deben guardar y restaurar al regresar. Normalmente, el compilador recibe una alerta de esto utilizando una palabra clave, a menudo interrumpir , en la definición de la función. ¿El compilador entiende que esto es un ISR?

Finalmente, asegúrate de que tu perro guardián no se agote mientras espera la entrada.

Ah, y no lo olvides: es posible que debas rebotar el botón pulsador.

    
respondido por el user28910

Lea otras preguntas en las etiquetas