Dic 252013

 
Pin Out del PIC16F84

Pin Out del PIC16F84

Código fuente en C para contar del 0 al 9 en un display de 7 segmentos con un PIC 16F84A

//   Programa:   Contador ascendente 0-9

#include    <16f648a.h>               //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use standard_io(B)

void main(void)
{
   //contador para tabla 7 seg
   char i=0;
   // Display de 7 segmentos 0-9
   int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};

   set_tris_b(0x00);            //portb como salida
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas

   do{                        //bucle...
      output_b(tab7seg[ i ]);      //muestra por portb dígito 7 segmentos
      delay_ms(500);
      i++;            /incremento contador para visualizar siguiente dígito
      if(i>9)                  //¿ya se ha mostrado el dígito 9?
      {
         i=0;               //SI -> vuelve a empezar(dígito 0)
      }
      }while(TRUE);            //...infinito
}

Este pequeño programa nos hará una cuenta ascendente de 0 a 9, el cambio entre números tiene un retardo de 500 ms y cuando el contador i es mayor que 9 el contador pasa a tener el valor inicial 0. Una vez arranquemos el programa se ejecutara indefinidamente su bucle.

Este ejemplo es muy sencillo y sirve para poder iniciarse en la programación de PICs, este programa mediante la utilización de la matriz tab7seg[10] se ha codificado el encendido de los segmentos que componen los números del 0 al 9, este programa lo podríamos modificar para experimentar, y el valor del contador i pasarlo directamente al output_b y en los 4 bits de menor peso colocar un codificador 7447.

 



Sep 122013

 
Pin Out del PIC16F84

Pin Out del PIC16F84

Código fuente en C para hacer parpadear un LED con un PIC 16F84A

 #include  <16F84A.h>
 #fuses XT,NOWDT
 #use delay ( clock = 4000000)
 #BYTE TRISB = 0x86
 #BYTE PORTB = 0x06
 #BYTE OPTION_reg = 0x81

 void main() {
      bit_clear(OPTION_REG,7);
      bit_clear(TRISB,0);
      while(1) {
         bit_set(PORTB,0);
         delay_ms(500);
         bit_clear(PORTB,0);
         delay_ms(500);
      }
  }

Este pequeño programa es el equivalente de los Hola mundo, es muy sencillo y tiene como misión controlar una salida del puerto B0 del PIC16F84, a continuación lo comentaremos linea a linea.

  • En la primera linea se le indica al programa el PIC con el que se va a trabajar en este caso el PIC16F84.
  • Seguidamente configuramos el oscilador de cristal y desactivamos el Watchdog.
  • Especificamos la frecuencia del oscilador a 4 MHZ.
  • Definimos registros de proposito especifico (SFR) como BYTE (banco 1) dirección 0x86 TRISB.
  • PORT B como BYTE, especificamos su dirección 0x06.
  • Al poner a cero el bit 7 del registro OPTION_REG, habilitamos las resistencias de Pull UP.
  • Pone a cero el bit 1 de PORTB, B0 queda configurado como salida.
  • Entramos en el bucle infinito controlado por el while, ya que la condición se cumplirá siempre.
  • Encendemos el LED.
  • Llamamos a la rutina Delay que nos generara un retardo de 500 milisegundos.
  • Apagamos el LED.
  • Llamamos a la rutina Delay que nos generara un retardo de 500 milisegundos.
  • Y por último volvemos al inicio del bucle while repitiendo todo este ciclo indefinidamente.

 

PIC16F84 activando un LED

PIC16F84 activando un LED