TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: JorgeCM en 20 de Abril de 2017, 01:16:04

Título: Contador superior a 255 con Timer 0 PIC16F84A
Publicado por: JorgeCM en 20 de Abril de 2017, 01:16:04
Hola,

Tengo que hacer un proyecto el cual es utilizar el  TMR0 como Contador, y mostrar el número en una pantalla, LCD de 4 bits. Utilizo además de la librería de la pantalla, otra librería de BCD, sin embargo solo me permite llegar hasta 255, por los 8 bits,   y lo que se me pide es un contador que sobrepase el 255. En el programa que tengo, por este mismo problema, cada vez que paso los 255 se reinicia el contador a 000.
Adjunto mi programa actual, y las librerías.
Título: Re:Contador superior a 255 con Timer 0 PIC16F84A
Publicado por: KILLERJC en 20 de Abril de 2017, 08:17:50
Entonces deberias detectar cuando pasa del 255 al 0 tu timer, eso lo haces con el flag de interrupcion del mismo.
Una ves que detectas eso le sumas 1 a otro registro, porque obviamente con 8bits solo podes cargar hasta 255. y necesitas al menos 2 registros usar para eso. Ya con 16bits la cuenta sube hasta 65535.
No tiene sentido cargar 256 como haces en el Timer es como sumarle 0, 256 en hexa es 0x100

Eso si... Para mostrarlo en el LCD ahora vas a tener que pasar de binario a ASCII un numero que ocupa 16bits y no solo 8. Tu codigo solo soporta hasta las centenas, lo cual no te sirve.
Asi que  o modificas el BIN_BCD.INC para agrandarlo para los miles y decenas de miles. O buscas otro codigo.

Agregando eso y detectando cuando es que paso del 255 al 0 e incrementar otra variable, tendrias tu solucion.

Otras cosas. LCD_Inicializa deberia estar fuera del loop principal
Tu BIN_A_BCD funcion, te carga los 3 registros que se llaman BCD_Centena, BCD_Decena y BCD_Unidad, eso es lo que deberias enviar al LCD, pero veo que estas enviando cualquier cosa.
Y Ademas estas llamando a varias veces a BIN_A_BCD, cuando solo deberias llamarlo 1 ves.