No sabes cuanto siento el que lo dejes. Me queda el mal sabor de boca y pensar de no haber sabido hacerme entender. No obstante voy a intentarlo una vez más.
El fichero que te adjunté hacia lo siguiente:
Nada mas comenzar, dar tensión al equipo, empieza a funcionar tu programa main; que solo hace el estar comprobando si la cuenta total ha llegado a 0. Inicialmente como no detecta ninguna moneda, el programa se va por el "no" y no hace nada". En el momento que hubiese pasado una moneda y el tiempo se hubiese decrementado y llegado a 0 te cambiaria el estado que hubieses puesto al detectar un paso de moneda.
Además, digamos que en 2º plano, el micro está esperando que se detecte el paso de una moneda. Cuando la detecta, por hardware (pulsador) se manda un pulso que es detectado por el pic. El main se para y salta a realizar el entorno "incremento de tiempo". Este lo único que realiza es sumar a la variable "tiempo_total" el valor de 60 y regresa al entorno del main prosiguiendo el programa donde lo dejó.
En este momento como todavía esa variable no se ha descontado y llegado a 0, pro tanto el entorno del main sigue sin realizar nada.
Por otra parte, también bajo 2º plano, el pic por medio del oscilador esta contando pulsos. Eso se realiza en el entorno de "interrupción TMR0". En el se incrementa, cada vez que el contador se desborda y pasa de FF a 00, una unidad la variable cuenta_1sg. Después de compara para ver si llega, en este caso a 122, que con la configuración del TMR0 que tenemos indica que ha pasado 1 sg. Cuando lo hace, las acciones que realizamos== decrementar en una unidad el tiempo total y resetear el contador de 1sg para una nueva cuenta.
Como tu main sigue funcionando a la vez que el TMR0 cuando la cuenta total llega a 0, realizas la acción de cambiar la salida.
Esto es mas o menos lo que te entendí, pero además habría algún detalle mas a mejorar pero eso seria para mas adelante pues lo importante era que entendieses lo anterior.