11 de abril de 2011

Temporizadores · Contar desbordamientos

Cuando el tiempo que deseamos temporizar es mayor que un desbordamiento, entonces necesitamos una variable externa (por ejemplo un entero) donde ir "acumulando" los desbordamientos.

Suponiendo que usamos 16bits@12Mhz...
- 1 desbordamiento --> 65.536µs...variable desbordes=1..
- 2 desbordamientos -->  131.072µs...variable desbordes=2..
- 3 desbordamientos -->  196.608µs...variable desbordes=3..

Es la manera que tenemos de temporizar cantidades grandes. En estos casos, seguimos necesitando controlar cuando se produce el desbordamiento (mirando TF0) para ir incrementando la variable "desbordes".

Pero sucede que necesitaremos comprobar cuando la variable "desbordes" alcance un valor determinado. Supongamos que deseamos temporizar 1s..

- 1s = 1000000µs => dividimos entre un desborde completo 65536 = 15 (parte entera).
Por lo tanto para el caso de temporizar 1 segundo, en el bucle de control, tendré que controlar cuando la variable "desbordes" alcanza el valor de 15. Aquí puedes ver un ejemplo:


Observa que en el bucle "while" hemos añadido la condición "desbordes<15" para controlar cuando se alcanza el tiempo acumulado correspondiente. Dentro del mismo, debe seguir comprobándose "TF0" para detectar el debordamiento e incrementar la variable. 

* Puedes descargar el código aquí.

No hay comentarios: