HOME

PRODUCTOS

PROYECTOS

TUTORIALES

VIDEOS

FREEWARE

PROGRAMAS

FUNCIONES C

EMPRESA

ENGLISH

                   

tutorial: constantes, variables y arreglos en ANSI C

 

VARIABLES ARREGLOS1.JPG (37702 bytes)

 

Descripción:

En el lenguaje ANSI C se manejan 3 tipos de datos:

1. Enteros con signo y sin signo: se definen como "int", "unsigned int"

2. Punto flotante: para variables reales con punto decimal. Se definen como "float"

3. Caracteres ASCII: para el manejo de texto, los cuales se definen como "char".

Los arreglos (arrays) son sucesiones de un cierto número de valores o elementos C(n) que pueden ser accesados por el programa modificando el subíndice n. Los arreglos permiten el manejo de tablas ("look up tables"), el almacenamiento de strings ó de cualquier sucesión de valores constantes o variables.

Los programas requieren que las constantes, variables y arreglos usados sean declarados previamente. De esta forma, el compilador les asigna una o varias localidades de memoria para almacenar sus valores en RAM ó FLASH según sea el caso. Las constantes, variables y arreglos pueden tomar distintos formatos de almacenamiento y espacio en memoria, dependiendo de cómo fueron declarados.

Los pointers o apuntadores son localidades en memoria RAM que utilizan el direccionamiento indirecto para accesar a alguna variable o arreglo. El manejo de pointers es fundamental en programación en C.

DEFINICION DEL TIPO DE VARIABLE: ANSI C maneja varios tipos de datos para sus constantes y variables, los cuales deben definirse previamente. Existen diferencias entre las definiciones del Compilador HITECH y CCS. Para información detallada de los formatos manejados en memoria para variables enteras oprima aquí. Para variables de punto flotante oprima aquí.

DEFINICIÓN EN C TIPO DE DATO RANGO EN HITECH RANGO EN CCS EJEMPLO
char entero, ASCII 0...255 (8 bits) 0...255 (8 bits) char a,b,c;
unsigned char entero, ASCII 0...255 (8 bits) 0...255 (8 bits) unsigned char x;
signed int entero con signo -32,768...+32,767 (16 bits) -128...+127 (8 bits) signed int alfa,beta;
unsigned int entero positivo 0...65536 (16 bits) 0...255 (8 bits) unsigned int fito;
long int entero 32 bits 16 bits long int var1;
float punto flotante 24 bits 32 bits float rim;

CONSTANTES:

una constante es un valor fijo que no puede variar durante el programa. Las constantes pueden ser números enteros o reales y se pueden definir de 2 maneras. La primera es usar la directiva del preprocesador:

#define pi 3.1416

También podemos almacenar las constantes directamente en la memoria FLASH mediante la declaración:

const float pi=3.1416, const signed int mik=-76;

Si se trata de un arreglo, entonces usamos:

const signed int web[5]={23,44,-81,92,-56}; const char quest[10]={"presion= "};

VARIABLES: las variables pueden modificar su valor a lo largo de un programa. Es necesario declararlas de la forma como se indicó en los ejemplos de la tabla de arriba (columna de la derecha), dependiendo del tipo de dato que manejen.

En un programa, las variables pueden tomar dos formas: variables locales ó variables globales. Las variables locales se declaran adentro de una función (después del signo { ) y solo son válidas en esa función. Su valor y su espacio en memoria son eliminados al salir de la función y por tanto no pueden ser usadas en otra parte del programa. Por tanto, pueden usarse nombres idénticos de variables locales en distintas funciones sin que esto genere ningún error por parte del compilador.

Los argumentos ó parámetros de cualquier función son siempre variables locales. Por ejemplo, en la función sum(int a,int b); las variables a y b son locales.

En contraste, las variables globales se declaran generalmente arriba de la función "main" y su valor puede ser modificado y utilizado tanto por la función "main" como por el resto de las funciones del programa. Es recomendable, para evitar confusiones al programar, usar nombres de variables globales y locales distintos.

VARIABLES, ARREGLOS, STRINGS:

Una variable puede ser definida como global con un nombre cualquiera. Las variables globales se declaran antes de la función main( ).

Las variables globales pueden posteriormente ser "pasadas" como argumento a una función. En este caso, la variable ingresa a la función con otro nombre y un valor inicial, y posteriormente es automáticamente considerada local dentro de esa función. El programador debe evitar confusiones utilizando siempre nombres de variables globales y locales diferentes.

Las variables pueden declararse al mismo tiempo en que son inicializadas. Por ejemplo:

int b=22, char web[5]={23,44,81,92,56}, float flujo=35.23;

ARREGLOS Y STRINGS: los arreglos pueden definirse como sucesiones de valores constantes ó variables que son almacenados en memoria FLASH, o en RAM respectivamente. Los strings son arreglos formados de caracteres ASCII, y terminados con un caracter "NULL".

const signed int web[5]={23,44,-81,92,-56}; es un arreglo de constantes y se almacenan en memoria FLASH. Su valor no puede modificarse.

const char wob[30]="LAS CARACTERISTICAS MAS IMPORTANTES DEL DISPOSITIVO SON"; este arreglo se almacena en la memoria FLASH. Las comillas indican al compilador que se trata de un string. Observe que no es necesario el uso de corchetes.

signed int web[5]={23,44,-81,92,-56}; es un arreglo de variables inicializadas con un valor y se almacenan en RAM, pero pueden modificarse a lo largo de un programa. Cada elemento del arreglo puede accesarse a través de su subíndice, por ejemplo, en el arreglo "web": web[0]=23 , web[5]=-56

También puede declararse el arreglo sin inicializar sus valores. Por ejemplo: 

signed int web[5];     //reserva espacio en memoria RAM para 5 variables.

PROGRAMA EJEMPLO PARA EL COMPILADOR DE HITECH, microcontrolador 16F88:

Guarde estos archivos en una carpeta: HITECHARRAY2TINY.c, key33.h. Posteriormente genere un proyecto en MPLAB y compile el programa principal. Cargue el archivo resultante HITECHARRAY2TINY.HEX en el sistema EB88, conectado a un display LCD 16 x 1.

En el ejemplo, se define el siguiente arreglo de 15 elementos en RAM :

int web[15]={-99,65,23,84,-1,8,45,22,64,35,-120,48,33,-11,77}; //SE DEFINE ARREGLO

y posteriormente se muestra cada valor, uno a uno, en el LCD, mediante la función print (int x):

void print (int x) //función convierte un número de binario a formato ASCII y lo muestra en el LCD
{   
    sprintf(array,"%d",x);               //conversión binario a string ASCII
    for (y=0;y<4;y++)
    {PutChar(array[y]);                   //función de la librería "key33.h" para mostrar caracter en LCD.
    if (array[y+1]==0)return;}        //verifica si existe caracter "NULL" en fin de string y regresa            
}

Observe el formato de la función "sprintf( )", que es parte de las librerías estándar en ANSI C (se debe incluir en el programa el archivo <stdio.h>), y la cual convierte el valor en formato binario de la variable "x", en un "string" (arreglo de códigos ASCII). El resultado de la conversión se almacena en el arreglo de 5 elementos de nombre "array" el cual debió ser previamente declarado en el programa. "%d" significa formato de salida decimal. La función se utiliza ya sea para desplegar algún valor en el display LCD o para enviar los caracteres ASCII a través del puerto serial.