6. Programación en C
6.1. Tipos de datos
Declaración de los tipos de memoria
En la declaración de la variable se puede indicar en que tipo de memoria se almacenará.
La siguiente tabla muestra el tipo de memoria que se puede especificar.
- code Memoria de programa (64 KBytes). Con acceso mediante la instrucción MOVC @A+DPTR.
- data Direccionamiento directo a la memoria de datos interna. Para un acceso rápido a las variables (128 bytes).
- idata Direccionamiento indirecto a la memoria de datos interna. Con acceso a toda la memoria interna (256 bytes).
- bdata Memoria de datos interna con direccionamiento bit a bit. Permite el acceso a la zona de bits con direccionamiento por bit y por byte (16 bytes).
- xdata Memoria de datos externa (64 KBytes). Acceso mediante la instrucción MOVX @DPTR.
- pdata Paginado (256 bytes) memoria de datos externa. Acceso mediante la instrucción MOVX @Rn.
Normalmente al trabaja en C, no es necesario especificar el tipo de memoria en la que se almacenará el contenido de las variables, se asume que ésta es la RAM de trabajo. Pero en este tipo de microcontroladores al disponer de variadas zonas de memoria con comportamiento distinto, es necesario especificar si la variable se ha de asignar una u otra memoria según la necesidad. Por defecto, si no se indica nada la variable se asigna a la memoria data.
Ejemplos:
char data Var1;
char code text[] = "Entrar temperatura:";
unsigned long xdata MiArray[100];
float idata x,y,z;
unsigned int pdata Dimension;
unsigned char xdata vector[10][4][4];
char bdata Indicador;
Tipos de datos
Un tipo de dato define el rango de valores que puede tener una variable a lo largo de la ejecución del programa así como el número de bytes de memoria asignados para contener la información.
Tipo de dato | Bits | Bytes
| Rango |
bit* | 1 | | 0 a 1 |
signed char | 8 | 1 | -128 a +127 |
unsigned char | 8 | 1 | 0 a 255 |
enum | 8 / 16 | 1 or 2 | -128 a +127 o -32768 a +32767 |
signed short | 16 | 2 | -32768 a +32767 |
unsigned short | 16 | 2 | 0 a 65535 |
signed int | 16 | 2 | -32768 a +32767 |
unsigned int | 16 | 2 | 0 a 65535 |
signed long | 32 | 4 | -2147483648 a 2147483647 |
unsigned long | 32 | 4 | 0 a 4294967295 |
float | 32 | 4 | ±1.175494E-38 a ±3.402823E+38 |
sbit* | 1 | | 0 a 1 |
sfr* | 8 | 1 | 0 a 255 |
sfr16* | 16 | 2 | 0 a 65535 |