sábado, 27 de abril de 2013

PROGRAMACION DE PIC EN C

CONTADOR DE DE 0  a 9

En esta oportunidad haremos un contador que cuente de 0 a 9, o que cuente de 9 a 0, todo depende de lo que pongamos en el codigo del PIC.
Ahora pasaremos a ver el esquema en ISIS Proteus:


Explicaremos un poco del display, para poder entender que es lo que vamos hacer. El display que se presenta en la figura es de tipo Cátodo común, es decir que el pin común a todos es el cátodo  que es el pin que va a tierra; en el caso que sea Ánodo común, el pin en común va a +Vcc..

Para que a la salida del puerto D, visualizemos los numeros, tenemos que tener en cuenta lo siguiente:


Eso nos quiere decir, que si por el puerto D sacamos la secuencia de bits: 0b100000110 en el display se mostrara el numero "1"; el 1 que se encuentra al costado de la "b" es el bit que prende el punto que se encuentra abajo de todos los display. A continuación presentamos una tabla que donde se encuentran las posibles combinaciones para mostrar los números en el display.


Luego de haber explicado el funcionamiento del display, pasaremos hacer el codigo en C, en el código utilizaremos un poco de Arrays (Arreglos,matrices), a medida que iremos poniendo el codigo iremos comentando los que significa cada linea.

// Contador de 0 a 9

#include <16f877a.h> // incluimos el pic a utilizar.
#use delay (clock = 20 000 000) // Reloj de 20 Mhz
#fuses HS, NOWDT,NOLVP // son los fusibles que utilizaremos para la grabación de nuestro PIC
#fast_IO(D) // declaramos el pines del puerto de D

// declaracion de las variables y de nuestro arreglo
int i;
int DISPLAY[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67}
// Tambien se pudo haber puesto en binario: 0b10111111,0b10000110 ...

// funcion principal
void main ()
{
     set_tris_D(0x00) ; // declaramos pines del puerto D como salida (0= output)

     while(true) // Bucle infinito
     {
        output_D(DISPLAY[i]); // sacamos por el puerte D, lo que se encuentra en el arreglo DISPLAY
        delay_ms(300); // hacemos que cada numero de muestre en el display durante 300 ms
        i++ ; // tenemos que aumentar la cuenta para que pase al siguiente numero
      }
}  // Fin del programa.

Ahora si queremos que nuestro contador no pare en nueve y que se reinicie a 0 y vuelva a la cuenta, agregamos lo siguiente:

// Dentro del while ponemos:
      if(i>9)
      {
            i =0;
      }

Listo una vez hecho eso veremos que nuestro contador se reinicia y luego vuelve a contar.


1 comentario: