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:

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.
Podem definir taules 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.
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 long Valor; // Variable entera de 32 bits amb signe float Mida; // Variable real
La variable Llista la faríem servir així:
...
LATD = Llista[LED]; // Busquem a la llista el valor que enviem al port
...
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.

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.