4.5 Ejemplo 3
Timer0 como un contador, declarar variables nuevas, utilizar símbolos, utilizar relés...
En cuanto a los ejemplos anteriores, el microcontrolador ha ejecutado el programa sin haber sido afectado de ninguna forma por su entorno. En la práctica, hay pocos dispositivos que funcionen de esta manera (por ejemplo, un simple controlador de luz de neón). Los pines de entrada se utilizan también en este ejemplo. En la siguiente figura se muestra un esquema, mientras que el programa está en la siguiente página. Todo sigue siendo muy simple. El temporizador TMR0 se utiliza como un contador. La entrada del contador está conectada a un botón de presión, así que cada vez que se presiona el botón, el temporizador Timer0 cuenta un pulso. Cuando el número de pulsos coincida con el número almacenado en el registro TEST, un uno lógico (5V) aparecerá en el pin PORTD.3. Este voltaje activa un relé electromecánico, y por eso este bit se le denomina ‘RELÉ’ en el programa.
En este ejemplo, el registro TEST almacena el número 5. Por supuesto, eso puede ser cualquier número obtenido al calcular o definido como una constante. Además, el microcontrolador puede activar algún otro dispositivo en vez de relé, mientras que el sensor se puede utilizar en vez del botón de presión. Este ejemplo muestra una de las aplicaciones más comunes del microcontrolador en la industria; al realizar una cosa el suficiente número de veces, otra cosa debe estar encendida o apagada.

' Cabecera ******************************************************
program example_3 ' Nombre del programa
symbol RELAY = PORTD.3 ' Pin del puerto PORTD.3 es denominado RELÉ
dim TEST as byte ' Variable TEST es de tipo byte
main: ' Inicio del programa
TEST = 5 ' Constante TEST = 5
ANSEL = 0 ' All I/O pins are configured as digital
ANSELH = 0
PORTA = 0 ' Reiniciar el puerto PORTA
TRISA = 0xFF ' Todos los pines de E/S se configuran como digitales
PORTD = 0 ' Reiniciar el puerto PORTD
TRISD = %11110111 ' Pin RD3 se configura como una salida, mientras que los
' demás se configuran como entradas
OPTION_REG.5 = 1 ' Contador TMR0 recibe los pulsos por el pin RA4
OPTION_REG.3 = 1 ' Valor del pre-escalador es 1:1
TMR0 = 0 ' Reiniciar el temporizador/contador TMR0
while 1
if TMR0 = TEST then ' ¿Coincide el número en el temporizador con la constante TEST?
RELAY = 1 ' Números coinciden. Poner el bit RD3 a uno (salida RELÉ)
end if
wend ' Quedarse en el bucle infinito
end. ' Final de programa
Sólo un símbolo (RELÉ) se utiliza aquí. Se le asigna el tercer pin del puerto PORTD en la declaración.
symbol RELAY = PORTD.3 ' Símbolo RELÉ = PORTD.3