Programació en mpasm del PIC 16F690

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

Bits d'estat

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.

Bit Z

El bit Z 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.

Bit C

El bit C 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.

Bit DC

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.

 

 

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