Manejo de tablas

Si bien las tablas se crean de la misma forma que en cualquier programa en C, la idea de esta nota es la de mostrar como se puede crear una tabla secuencial en este caso, aunque también puede ser indexada.
El programa que se detalla aquí es el de una tabla que se recorrerá ciclicamente, es decir el índice de la tabla sera incrementado dentro del while con el acumulador i = i + 1, y con un if se reiniciara el índice hasta que sea igual al largo de la tabla.
se puede notar que los valores ingresados en la tabla están en binario, pero se pueden ingresar en cualquier base, en este ejemplo se eligió el binario porque se mueve directamente el valor al puerto B, pero podría haber ingresado un valor decimal.
La longitud de la tabla es el valor que recorrerá el vector, entonces si ingresamos por ejemplo 20 valores en la tabla la variable longitud tendrá que ser de 20, sino el bucle se reiniciara antes o después.
La tabla no necesariamente tiene que ser automática (velocidad dada por delay) puede ser indexada por ejemplo podríamos alojar el valor en binario de los segmentos encendidos de un display de 7 segmentos, por ejemplo si el numero cero del display de 7 segmentos requiere que en el puerto b del micro exista el valor 01110111, lo que hacemos es poner en la dirección 0 de la tabla ese valor, luego en la dirección 1 pondremos los bit en 1 que sean necesarios para formar el 1 en los segmentos del display. y así sucesivamente, entonces en lugar de usar un ciclo para recorrer el vector podemos simplemente moverle el numero que necesitamos que nos devuelva en el puerto, por ejemplo SALIDA[3] y el puerto tendrá los bit seteados para que el display muestre el 3.
Esta es una de las tantas cosas que podemos hacer, también podemos guardar caracteres, o bien podemos usar dos vectores en lugar de uno, y de esa forma mediante un burbujeo podemos crear una matriz de 2 dimensiones.


#include <16F628A.h>
#FUSES NOWDT
#FUSES INTRC
#FUSES NOPUT
#FUSES NOPROTECT
#FUSES NOBROWNOUT
#FUSES NOMCLR
#FUSES NOLVP
#FUSES NOCPD
#use delay(int=4000000)
void main()
{
   int i, LargoTabla = 7;
   byte const SALIDA[10] = {0b00001111,
                            0b11110000,
                            0b00110011,
                            0b11001100,
                            0b01010101,
                            0b10101010,
                            0b00000000};
   while(1)
      {
      if (LargoTabla == i)
         {
         i = 0;
         }
      else
         {
         OUTPUT_B(SALIDA[i]);
         delay_ms(100);
         i = i + 1;
         }
      }
}


No hay comentarios.:

Publicar un comentario