Contador de 0 a 10

Ejemplo de contador de 0 a 10 con dos funciones: manual y automático

MICROCONTROLADORES

Biblioman

11/10/20121 min read

Ejemplo de contador de 0 a 10 con dos funciones: manual y automático.

Esquema:

Código fuente:

/********* Contador Binario de 1 al 10, Visualizado en 4 LEDs ************
Incluye Boton para Incrementar y otro para Decrementar
Y un selector de conteo Manual o Automatico */

#Include <16F84A.h> //Define el Pic a usar
#Use delay(Clock=4000000) //Define la frecuencia de reloj
#Fuses XT,NOWDT,NOPUT,NOPROTECT //Define los fusibles activos
#Byte status = 0x03 //Direccion del registro STATUS
#Byte port_b = 0x06 //Direccion del registro PORTB
#Use fast_io(B) //Codigo mas eficiente

//INICIA CUERPO DEL PROGRAMA
void main(){
set_tris_b (0xF0); //RB7-RB4 salidas, RB3-RB0 entradas
port_b = 0x00; //Limpia el Puerto B
signed int contador=0x00; //Contador definido con signo

while (True){ //Inicia ciclo infinito
while (input(PIN_B4)){ //Mientras esté activo el modo auto
port_b = contador; //Muestra el valor de contador en PORTB
++contador; //Incrementa el contador
delay_ms(500); //Retardo de 500ms
if (contador>10) //Si elcontador es mayor que 10
contador = 0x00; //Entonces vuelve a valer 0
} //Fin del ciclo modo auto

while (input (PIN_B5)){ //Mientras esté en modo Manual
if (bit_test(port_b,6)==1){ //Si se presiona el boton de SUBE
++contador; //Incrementa en 1 el contador
if (contador>10){ //Si contador vale mas de 10
contador = 10;} //Se fija su valor en 10
port_b = contador; //Pone el valor de contador en PORTB
delay_ms(500); //Retardo de 500ms
} //Fin del ciclo SUBE

if (bit_test (port_b,7)==1){ //Si se presiona el boton de BAJA
--contador; //Decrementa en 1 el contador
if (contador<0){ //Si contador es menor a 0
contador = 0;} //Se fija su valor en 0
port_b = contador; //Pone el valor de contador en PORTB
delay_ms(500); //Retardo de 500ms
} //Fin del ciclo BAJA
} //Fin del ciclo MANUAL
} //Fin del ciclo infinito
}

El .DNS del circuito lo tenéis aquí

Saludos