Programació en C del PIC 16F690 amb PICkit 2

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Variables

Els noms de les variables poden estar formats per lletres, números i el signe _. Es distingeix entre majúscules i minúscules. El primer caràcter del nom d'una variable no pot ser un número. No podem fer servir les paraules reservades del C com a noms de variables.

Les variables s'han de declarar. Per declarar una variable s'escriu el seu tipus seguit del nom de la variable. Els tipus de variables s'indiquen amb una o més paraules que ens diuen la mida de la variable i com emmagatzema la informació. En alguns casos, per compatibilitat amb diverses versions de C, el mateix tipus pot tenir noms diferents. Les variables poden ser dels següents tipus:

Tipus Comportament Valor mínim Valor màxim Bits
char Enter sense signe 0 255 8
unsigned char
signed char Enter amb signe -128 127
short Enter amb signe -32768 32767 16
int
signed short
signed int
unsigned short Enter sense signe 0 65535
unsigned int
short long Enter amb signe -8 388 608 8 388 607 24
signed short long
unsigned short long Enter sense signe 0 16 777 215
long Enter amb signe -2 147 483 648 2 147 483 647 32
long long
signed long
signed long long
unsigned long Enter sense signe 0 4 294 967 295
unsigned long long
float Real aprox. -1·1038 aprox. 1·1038 24
double
long double

A l'hora de guardar els valors de més de 8 bits a la memòria del microcontrolador, sempre es guarden de forma que a la primera posició de memòria hi ha els bits de menys pes.

En els tipus amb signe, els nombres negatius s'emmagatzemen en complement a dos. El complement a 2 d'un nombre binari s'obté complementant tots els bits i sumant 1 al resultat. Vegem un exemple amb el nombre -39 (decimal) expressat en 8 bits:

                Decimal                 0010 0111                 39                
                Complementem                 1101 1000                 216                
Sumem 1 1101 1001 217 = 256 - 39

Si aquests 8 bits corresponguessin a valors sense signe podrien guardar valors de 0 a 255, per a 256 caldria ja un bit més. El número -39 es guarda amb signe de la mateixa manera que sense signe es guardaria 217 que és 256 (el següent al màxim) - 39.

Les variables reals són, en principi, de 24 bits però canviant la configuració del compilador poden ser de 32 bits. El rang de valors és el mateix amb 24 o amb 32 bits, la diferència és la precisió amb la que guarda els valors. Per triar-lo, picarem amb el botó dret sobre el nom del projecte i marcarem Properties. Se'ns obrirà una finestra nova on podrem triar-lo:

Conf.

Les variables reals es guarden en un format de mantissa i exponent, és a dir un número multiplicat per una potència de 10. Això pot portar problemes en alguns casos. Per exemple, segons el contingut d'una variable quan li sumem 1 pot no canviar de valor. De la mateixa manera, en comparar números diferents però propers el microcontrolador es pot comportar com si fossin iguals.

Vectors o llistes i matrius

Podem definir vectors o llistes posant entre els signes [ i ] el nombre d'elements. Cal tenir present que a l'hora de llegir un element concret la primera posició és la 0.

Podem fer sevir matrius indicant dos índexs on el primer serien les fileres i el segon les columnes. També hi pot haver més dimensions.

Alguns exemples de declaració de variables:

unsigned char LED;  				// Variable de 8 bits sense signe (0 a 255)
char Llista[8];					// Tenim una llista amb 8 valors
char Matriu[4][8];				// Tenim una matriu de quatre fileres i vuit columnes
long Valor;					// Variable entera de 32 bits amb signe
float Mida;					// Variable real

La variable Llista la faríem servir així:

...
        PORTC = Llista[LED];			// Busquem a la llista el valor que enviem al port
...

Cal tenir present que En C no podem tractar les llistes completes (tampoc les fileres o columnes de les matrius). Haurem de treballar element per element fent servir bucles.

Variables locals i elements constants

Les variables poden ser declarades amb especificacions. Segons les especificacions d'una variable, el compilador la guardarà de forma diferent. A continuació tenim una llista d'especificacions:

Especificació Significat
const El valor es manté constant indefinidament
Es pot guardar a la memòria de programa
persistent La variable manté el valor quan es reinicia el microcontrolador
static La variable només té sentit dins de la funció on es defineix
L'espai de memòria pot ser usat per altres variables static en altres funcions

Si, per exemple, la variable Llista és constant ens caldrà definir els valors i el compilador la pot guardar a la memòria de programa. Si volem, podem especificar l'adreça on l'ha de guardar emprant el signe @.

const char Llista[8] @ 0x180 = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};

Les variables globals (les que definim abans de main) es guarden en la memòria de dades i són accessibles des de qualsevol posició del programa. També podem definir variables locals dins d'una funció; aquestes es crearan a la pila i desapareixeran quan el programa surti de la funció.

També podeu consultar el manual del MPLAB XC8 al web de Microchip.

 

 

Licencia de Creative Commons
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.