Eso es redundante.
La idea es que el mismo TMR0 sea el que contenga la variable que se va sumando, y la interrupcion es por si se produce el overflow de ese registro (8 bits y maximo 255). Supongamos que cuando entra a interrupcion incremento la variable llamada "contadortmr0" para indicar ese overflow
#int_TIMER0
void TIMER0_isr(void)
{
contadortmr0++;
}
Es decir llegan 50 pulsos y vas a tener esto:
TMR0 = 50
contadortmr0 = 0
Si llegan 300 pulsos ( por que pasaron 300 personas ) quiere decir que TMR0 va a sufrir un overflow, entonces quedaria los valores:
TMR0 = 44
contadortmr0 = 1
El numero total de personas es :
( contadortmr0 * 256 ) + TMR0 = 300 en ese caso
No creo que superes casi 2
16 o 65536 personas.
Si queres leer el TMR0 usas:
Buscate el manual de CCS, esta en ingles pero tenes todas las funciones, pone en google "CCS Manual" y creo que es el primer PDF que sale
Con respecto a comparar un dato viejo te doy un ejemplo:
int tmrviejo; // Valor que tenia el timer 0 en la interrupcion anterior
if (input(pin_x) == 1 && get_timer0() == tmrviejo )
{
vuelta++; // Aumento mi variable de los 30seg ya que esta fijo y no se movio para nada el pin, es decir puede estar trabado
if(vuelta==60) //si la vuelta da 60, en segundos 30,
{alarma=1;} //se activa la alarma porque el sensor esta siendo tapado
}
else
{
vuelta=0; // Pongo a 0 la varaible para contar los 30seg
// Se puede poner o no la alarma a 0 aca depende de como queres que funcione
}
tmrviejo = get_timer0(); // Actualizo los valores, sino habian cambiado quedan iguales. Si cambiaron aqui asi se actualizan, y los proximas entradas a esta interrupcion se utiliza el ultimo valor del TMR0.
Es decir si se mantiene SIEMPRE el pin en alto ( sensor presionado ) y no cambia el valor del TMR, entonces cuenta los 30 segundos y activa la alarma.
Esto es por si viene un pulso asi:
______ ________
____| |________________________| |______________
^1ra interrupcn ^2da interrupcion
Aunque es BASTANTE improbable que ocurra con 60 seguidos, mejor asegurarse. si ocurre eso como te doy el ejemplo, si vos lees unicamente el pin durante la interrpcion, vas a ver que este no cambio. Pero el valor del TMR0 si lo hizo. por que ya conto 1 mas. Vuelvo a repetir si por alguna casualidad astronomica y milagrosa se repite este escenario 60 veces va a creer que esta trabado cuando no es asi y tu TMR 0 conto esas 60 personas que pasaron cada 0.5seg por el sensor

Distintos esto:
_________________________________________________________
_____|
^1ra interrupcion ^2da interrupcion
Ahi si observas el pin es igual que el caso anterior, pero esta ves el valor del TMR no cambio para nada.