Programa desarrollado en CCS PCWH Compiler. Consiste en demostrar en funcionamiento de básico de entradas y salidas. Se demostrara mediante un pulsador. Almacenaremos las veces que se ha pulsado en una variable y luego usaremos esa variable para encender dos led de acuerdo a la cantidad de pulsos, con el tercer pulso la variable volverá a 0.
#include <16f690.h> //librería de microcontrolador 16f690
#fuses HS, NOWDT, INTRC_IO //Configuración de fusibles, al final dejaré una tabla con los fusibles validos para este micro y para que son.
#USE delay(Clock=4000000) //velocidad del cristal que usaremos.
#byte portc=0x07 //Uso de puerto C
#byte porta=0x05 //Uso de puerto A
void main()
{
set_tris_c(0x00); //Puerto C como Salidas en Hexadecimal
set_tris_a(0b00011111); //Puerto A como entradas y salidas en Hexdecimal es 0x1F
porta=0x00; //Inicializamos el puerto A en 0
portc=0x00; //Inicializamos el puerto C en 0
int a; //Variable unsigned "a" de 8 bits donde almacenaremos los pulsos.
a=0; //Le asignamos el valor 0 para iniciar.
for(;;) //Bucle infinito, estaremos leyendo constantemente el bucle.
{
if (input(pin_a4)==1) //Si presionamos el pulsador, que estará conectado en el Pin A4.
{
a=a+1; //Sumaremos 1 a la variable "a"
}
switch(a) //sentencia de selección
{
case 1: //en caso que "a" sea 1
delay_ms(200); //Esperamos 200 milisegundos (Anti rebote del pulsador)
portc=0x01; //Daremos un High en el Pin C0 (1 lógico = 5 Volt)
break; //continúa la ejecución de las instrucciones que le sigue
case 2: //en caso que "a" sea 2
portc=0x02; //Daremos un High en el Pin C1 (1 lógico = 5 Volt)
delay_ms(200); //Esperamos 200 milisegundos (Anti rebote del pulsador)
break; //continúa la ejecución de las instrucciones que le sigue
case 3: //en caso que "a" sea 3
portc=0x00; //Volvemos a 0 todo el puerto C (0 lógico = 0 Volt)
delay_ms(200); //Esperamos 200 milisegundos (Anti rebote del pulsador)
break; //continúa la ejecución de las instrucciones que le sigue
default: //Si el valor que toma "a" no coincide con los valores especificados, se realizarán las acciones definidas en la etiqueta default
a=0; // la variable "a" vuelve a 0.
}
}
}
Lista de fusibles validos para PIC 16f690
1.00 LP Low power osc < 200 khz
1.00 XT Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
1.00 HS High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
1.00 EC_IO External clock
1.00 INTRC_IO Internal RC Osc, no CLKOUT
1.00 INTRC Internal RC Osc
1.00 RC_IO Resistor/Capacitor Osc
1.00 RC Resistor/Capacitor Osc with CLKOUT
1.03 WDT Watch Dog Timer
1.03 NOWDT No Watch Dog Timer
1.04 PUT Power Up Timer
1.04 NOPUT No Power Up Timer
1.05 MCLR Master Clear pin enabled
1.05 NOMCLR Master Clear pin used for I/O
1.06 PROTECT Code protected from reads
1.06 NOPROTECT Code not protected from reading
1.07 CPD Data EEPROM Code Protected
1.07 NOCPD No EE protection
1.08 NOBROWNOUT No brownout reset
1.08 BROWNOUT Reset when brownout detected
1.08 BROWNOUT_NOSL Brownout enabled during operation, disabled during SLEEP
1.08 BROWNOUT_SW Brownout controlled by configuration bit in special file register
1.10 IESO Internal External Switch Over mode enabled
1.10 NOIESO Internal External Switch Over mode disabled
1.11 NOFCMEN Fail-safe clock monitor disabled
1.11 FCMEN Fail-safe clock monitor enabled
Diagrama electrónico en proteus.
(http://i39.tinypic.com/dljh92.jpg)
.
link de descarga del proyecto: https://mega.co.nz/#!ksd11JKB!jsqX_U5Di6Qdxpe2sT9MMZtcNnRychQYrtbVm_aoUFg (https://mega.co.nz/#!ksd11JKB!jsqX_U5Di6Qdxpe2sT9MMZtcNnRychQYrtbVm_aoUFg)