Professional Documents
Culture Documents
Vectores
Los vectores son pilares en el lenguaje C ya que permiten agrupar un conjunto de datos en una sola variable. Cada dato tiene una ubicacin en memoria SRAM y es accedido a travs de un ndice. La declaracin de un vector sigue el siguiente formato: tipo de dato nombre_del_vector[cantidad de elementos] Se puede inicializar un vector de varias formas, asignando una cadena de caracteres o un conjunto de datos. No es necesario indicar la dimensin en estos casos ya que el compilador automticamente asume que la dimensin del vector es igual al nmero de elementos asignados. Por ejemplo: char nombre[] = Arquitectura de computadoras II; char num[] = {1,2,3,4,5,6,7,8,9,10}; unsigned char edad[5]; /*Se crea un vector de nombre edad de 5 elementos, donde cada elemento es de 8 bits*/
void main() { edad[1] = 10; //El segundo elemento toma el valor de 10. PORTB = edad[1]; while(1); } Mag. Ing. Sergio Salas A.
0x71
0x72 0x73 0x74
edad[2]
edad[3] edad[4]
Matrices
Las matrices son realmente vectores, pero son declarados como arreglos bidimiensionales, por lo cual poseen dos ndices: uno para indicar el nmero de fila y otro para el nmero de columna. Por ejemplo: unsigned char tabla[3][4] = {0,1,2,3 10,11,12,13, 20,21,22,23}; tabla[0][0] tabla[1][0] tabla[2][0] tabla[0][1] tabla[1][1] tabla[2][1] tabla[0][2] tabla[1][2] tabla[2][2] tabla[0][3] tabla[1][3] tabla[2][3]
No es recomendable el uso de matrices en un microcontrolador dado que la cantidad de memoria necesaria equivale a multiplicar ambos ndices por el nmero de bytes de datos. Por ejemplo, la variable tabla utiliza 3x4x1 bytes = 12 bytes de la memoria SRAM. PORTB = tabla[2][2]; //PORTB = 22; Mag. Ing. Sergio Salas A.
Punteros
Los punteros son sumamente importantes en C ya que al igual que los vectores nos permiten relacionar un conjunto de datos a una sola variable. La diferencia radica en que el puntero tiene direccin dinmica y puede apuntar a cualquier posicin de la memoria SRAM. La forma de declaracin de un puntero es la siguiente: unsigned char *p; char *mensaje = Hola mundo; En el primer caso se declara un puntero de nombre p que apunta a valores de 8 bits. El compilador se encarga de definir la direccin que este puntero posee en la SRAM, el cual puede ser modificado por el programador. En el segundo caso se declara un puntero de nombre mensaje el cual ha sido inicializado con una cadena de caracteres ASCII. El compilador se encarga de asignar una direccin para almacenar estos caracteres. Dicha direccin no siempre ser la misma y depender de cuantas otras variables hayan sido declaradas.
Manejo de punteros
unsigned char mensaje[]=Hola Mundo; unsigned char *p; void main() { TRISB = 0x00; p = &mensaje[0]; //p apunta a mensaje PORTB = *p; //PORTB = H p++; //p apunta a mensaje[1] PORTB = *p; //PORTB = o p[2]='K'; //mensaje[3]= K while(1); }
Vectores punteros
En lenguaje C, un vector puede ser tambin tratado como puntero: unsigned char vec[10]; Void main() { vec[2] = 0; *(vec+2)=0; }