Hola sergio. Añado comentarios a la exlicacion:
Me remito a la siguiente explicación: La explicación es sencilla y de acuerdo a los planteamientos iniciales para llegar al tiempo de 120sg.
De la manera en que lo pensamos dijimos que al disponer de registros de 8 bits para llegar a ese tiempo íbamos a necesitar 2 registros para llegar a ese valor.
Inicialmente dijimos que cargábamos el tmr0 con el valor de 61 y que con preescaler de 256 tendríamos una interrupción cada 49,92ms.
Ojo que tienes un error en los calculos explicados anteriormente :
La interrupcion de TMRO se tiene cada 4,992msg y no 49,92msg.
- En la captura el registro conta1 ha contado 255 veces de momento tenemos=49,92msg por 256 veces tenemos un tiempo parcial acumulado de 12.779,52msg=12,77952sg.
Luego indicas que como cuenta1 es=256 tienes un retardo de 256*49,92=12,779 cuando en realidad es=256*4,992=1,2779252sg.
-En ese momento lo que es resetear ese contador, a la vez que incrementamos el contador2 en una unidad y esperamos a que el contador 1 vuelva a llegar otra vez a contar 256 interrupciones del tmr0 para repetirse el ciclo.
Como se ve si ya tenemos 12,78sg solo nos falta contar unas 9 veces el contador 2. Aquí hay una pequeña diferencia entre lo calculado y lo obtenido.
Asi que para terminar indicas que multiplicas por el valor de cuenta2 que es 9 para obtener el valor total del retado.
En realidad tienes que decir que multiplicas por 94 para obtener el valor final.
Nuevamente evaluamos el registro cuenta 2 y realizamos la función matemática cálculo
Y así también con el registro cuenta 3 y su respectiva función matemáticas.
Cuando se llego a completar el conteo la estructura de la subrutina nos quedara así
Date cuenta que en el diagrama, figura siguiente está bien
Fermin