Els microcontroladors tenen uns bits d'estat que controlen el resultat de les operacions matemàtiques. En el PIC 16F690 aquests bits estan a la paraula STATUS i s'anomenen C, DC i Z.
El bit Z (en les instruccions de programa cal anomenar-lo ZERO) s'activa quan el resultat d'una operació és zero i es desactiva quan no ho és. Per exemple, si incrementem FFh obtindrem 00h i s'activarà el bit Z. El mateix passa si decrementem 01h.
El bit C (en les instruccions de programa cal anomenar-lo CARRY) s'activa quan ens en portem; és a dir quan el resultat de l'operació no cap al byte resultat. Per exemple, sumem 210 i 120:
| 210 | D2h | 1101 0010 | |||||
| + 120 | +78h | + 0111 1000 | |||||
| 330 | 1 4Ah | 1 0100 1010 | C = 1 |
Veiem que el resultat és superior a 255 i no cap en un byte, apareixent un novè bit. Aquest bit addicional és el que va a parar a C. Tindríem doncs un 74 (4Ah) a la variable i un 1 a C. Això ho podem fer servir com a comprovació o per operar amb variables de més de 8 bits a base de guardar una part en una adreça i una altra part en un altra. Sumant dos números de 8 bits mai podem portar-ne més que una. Vegem-ho amb els dos números màxims:
| 255 | FFh | 1111 1111 | |||||
| + 255 | + FFh | + 1111 1111 | |||||
| 510 | 1 FEh | 1 1111 1110 | C = 1 |
Important: El bit C es modifica en les instruccions de suma, resta i rotació però, en canvi, no a les d'increment i decrement. Per exemple, quan s'incrementa un 255 el byte passa a ser zero i s'activa el bit Z (no el C). És molt recomanable consultar quins bits es modifiquen cada cop que fem servir una instrucció en la que ens pugui interessar fer-los servir.
El bit C també es veu afectat a les restes. Per veure com funciona el bit C a les restes cal tenir clar com fa la resta el microcontrolador. Quan el microcontrolador resta dos valors (posem, per exemple, que resta W de B) el que fa, per obtenir W-B és sumar el complement a 2 de B a W.
El complement a 2 d'un byte s'obté complementant tots els bits i sumant 1 al resultat. Vegem un exemple amb el nombre 39 decimal:
| Decimal | 0010 0111 | 39 | ||||
| Complementem | 1101 1000 | 216 | ||||
| Sumem 1 | 1101 1001 | 217 = 256 - 39 |
Ara anem a veure com varíem la resta 144-39:
| 144 | 144 | 1001 0000 | |||||
| - 39 | + 217 | + 1101 1001 | |||||
| 105 | 361 | 1 0110 1001 | C = 1 |
Provem-ho amb una resta amb resultat negatiu:
| 21 | 21 | 0001 0101 | |||||
| - 39 | + 217 | + 1101 1001 | |||||
| - 18 | 238 | 0 1110 1110 | C = 0 |
I C val 0 quan el resultat és negatiu.
Ara ho provem amb una resta de resultat nul:
| 39 | 39 | 0010 0111 | |||||
| - 39 | + 217 | + 1101 1001 | |||||
| 0 | 256 | 1 0000 0000 | C = 1 |
Observem doncs que C s'activa quan en fer B - W tenim que B >= W; és a dir quan el resultat és positiu o nul.
El bit DC fa una feina semblant al C però amb el nibble de la dreta. Un byte (8 bits) està format per dos nibbles (de 4 bits cada un). En algunes aplicacions es treballa amb nibbles i, per tant, pot ser necessari mirar què passa a cada nibble. Un nibble pot emmagatzemar números entre 0 i 15 (de 0h a Fh). Vegem un exemple:
| 10 | 0Ah | 0000 1010 | |||||
| + 9 | + 09h | + 0000 1001 | |||||
| 19 | 13h | 0001 0011 | C = 0 DC = 1 |
En aquest cas, com el resultat sí cap en el byte, el resultat seria 19 (13h) però també s'activaria el bit DC per si volem fer-lo servir per alguna cosa. Vegem un altre exemple:
| 10 | 0Ah | 0000 1010 | |||||
| + 25 | + 19h | + 0001 1001 | |||||
| 35 | 23h | 0010 0011 | C = 0 DC = 1 |
Ara també s'haurà activat DC però, en canvi, el bit de més a la dreta del segon nibble és zero jque s'ha sumat a l'1 que ja hi havia.
A l'hora de restar, el bit DC s'activa quan el nibble de la dreta del minuend és més gran o igual que el del substrahend.

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