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.