Usando el simulador PIC16 ( Proteus ) puede verificar este código de reloj digital y cambiarlo según sus necesidades. Este código está escrito en lenguaje C usando MPLAB con el compilador C HI-TECH. Puede descargar este código desde la sección ' Descargas ' en la parte inferior de esta página.
⚠️Al leer este artículo, se supone que usted sabe
La figura anterior se tomó después de 2 minutos y 59 segundos de simulación de código en Proteus . En el código, timer0 se usa como base para la generación de relojes digitales. Timer0 se usa aquí para generar interrupciones de 1 mseg. Después de cada 1 ms, se incrementa una variable global denominada msCounter . Cuando msCounter alcanza un valor de 1000, se incrementa otra variable global llamada secCounter y este proceso se repite. De manera similar, cuando secCounter llega a 60, minCounter se incrementa. Y cuando minCounter llega a 60, entonces hrCounter incrementa. Este proceso continúa hasta hrCounter llega a 24, entonces todas estas variables restablecen sus valores. La pantalla LCD se actualiza con los nuevos valores de hrCounter , minCounter y secCounter después de cada segundo.
En este circuito se utiliza un cristal de 4 MHz de valor, lo que hace que este PIC16F877 funcione a una velocidad de 1 MIPS (millones de instrucciones por segundo).
El código de la función principal se muestra a continuación.
En la figura anterior, se muestra el código de interrupción para timer0. El temporizador 0 expira cada 1 mseg y se genera una interrupción que ejecuta la función de interrupción ISR() que se muestra arriba. En esta función, el registro del temporizador 0 se inicializa con un valor de 0x08, lo que hace que el temporizador 0 caduque después de exactamente 1 ms. Después de eso, el indicador de interrupción timer0 se borra y la variable msCounter se incrementa. Entonces, esto significa que la variable msCounter se incrementa después de cada 1 mseg.
El código utilizado para inicializar Timer0 se muestra a continuación.
En la función Init1msecTimerInterrupts() , timer0 se inicializa para generar una interrupción cada 1 mseg. El temporizador 0 cuenta de 0 a 249 y un preescalar de 1:4 significa que se generará una interrupción cada 250 × 4 = 1 ms de tiempo.
El código de la función UpdateTimeCounters() se muestra a continuación.
Este código pretende ser un ejemplo simple de cómo se puede usar PIC16F877 para hacer una pantalla de reloj digital. Puede dejar sus comentarios en la sección de comentarios a continuación.
[1] msCounter aumenta a un valor de 1000, luego se restablece a 0 y comienza a incrementarse nuevamente. Entonces, msCounter vuelve a ser cero después de cada segundo exactamente. Entonces, la pantalla LCD se actualiza con un nuevo valor de tiempo después de cada segundo.
?
El código de visualización del reloj digital que utiliza PIC16F877 se compiló en MPLAB v8.85 con el compilador HI-TECH C v9.83 y la simulación se realizó en Proteus v7.10. Para descargar el código y la simulación de Proteus , haga clic aquí .