[CCS] Programando un PIC (I/O)

Iniciado por kal23, Enero 27, 2014, 07:29:58 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

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.

Código: c

#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.

.

link de descarga del proyecto: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta