Yo usaría el temporizador 2 para configurar una interrupción periódica. 1 ms (frecuencia de 1 kHz) suele ser un buen período de interrupción. A una frecuencia de reloj de 4 MHz, tiene una frecuencia de instrucción de 1 MHz, por lo que una interrupción de 1 ms sería cada 1000 instrucciones. Debería estar dentro y fuera de la interrupción en unos 10 segundos de instrucciones, por lo que es una pequeña carga general para el procesador.
Para obtener demoras prolongadas, configure un contador que disminuya la rutina de interrupción si no es cero. Cuando este contador llega a 0, la rutina de interrupción establece un indicador global. Si necesita una resolución de 1 ms para su tiempo de 1 s, entonces hace que este sea un contador de 16 bits. Si 5 ms es suficiente resolución, entonces se divide el tick de 1 ms en la rutina de interrupción por 5 para hacer un tick de 5 ms y se disminuye un contador de un solo byte cada 5 ms. Si realmente solo necesita un tiempo de 5 ms, entonces puede configurar la interrupción periódica para que sea de 5 ms (cada 5000 ciclos de instrucción).
Para usar el retardo, el código de fondo borra el indicador de retardo transcurrido y escribe el tiempo de retardo en unidades de 5 ms en el contador. El código de primer plano comprueba la bandera regularmente para ver si el retraso ha transcurrido. Mientras tanto, puede realizar otro procesamiento.