Programació en pic-as del PIC 16F690

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

Sumar i restar

El PIC 16F690 incorpora instruccions que permeten sumar i restar directament números d'un byte (8 bits). Si hi ha risc que el resultat de la suma sigui més gran que 255 o que el de la resta sigui negatiu, caldrà gestionar els bits d'estat.

Quan els resultats puguin ser més grans que 255 caldrà fer operacions de més d'un byte. A continuació veurem com fer sumes i restes en les que el resultat ocupa dos bytes. Guardarem el resultat en dues posicions de memòria consecutives seguint l'estructura següent:

Resultat de dos bytes

Suma amb un operand de dos bytes

Sumem la variable Valor (1 byte) a la paraula Resul (2 bytes) i guardem el resultat a Resul.

Valor EQU 0x20  ; Valor que sumem
Resul EQU 0x21  ; Variable en la que guardem el resultat (2 bytes)
...
  movf Valor,w  ; Llegim a W la variable que hem de sumar
  addwf Resul,f  ; L'afegim al byte de la dreta
  btfsc CARRY  ; Mirem si s'activa C
  incf Resul+1,f  ; Si s'activa, incrementem el byte superior
...

Resta amb un operand de dos bytes

Restem la variable Valor (1 byte) de la paraula Resul (2 bytes) i guardem el resultat a Resul.

Valor EQU 0x20  ; Valor que restem (substrahend)
Resul EQU 0x21  ; Variable en la que guardem el resultat (2 bytes)
...
  movf Valor,w  ; Copia el valor assenyalat per FSR a W
  subwf Resul,f  ; El resta de la suma total
  btfss CARRY  ; S'ha activat C?
  decf Resul+1,f  ; Si no s'ha activat, decrementem el byte superior
...

Suma amb operands de dos bytes

Sumem la variable Valor (2 bytes) a la paraula Resul (2 bytes) i guardem el resultat a Resul.

Valor EQU 0x20  ; Valor que sumem (2 bytes)
Resul EQU 0x22  ; Variable en la que guardem el resultat (2 bytes)
...
  movf Valor,w  ; Llegim a W la variable que hem de sumar
  addwf Resul,f  ; L'afegim al byte de la dreta
  btfsc CARRY  ; Mirem si s'activa C
  incf Resul+1,f  ; Si s'activa, incrementem el byte superior
  movf Valor+1,w  ; Llegim a W la variable que hem de sumar
  addwf Resul+1,f  ; L'afegim al byte de la dreta
...

Resta amb operands de dos bytes

Restem la variable Valor (2 bytes) de la paraula Resul (2 bytes) i guardem el resultat a Resul. La funció suma Resul amb el negat de Valor.

Valor EQU 0x20  ; Valor que restem (2 bytes)
Resul EQU 0x22  ; Variable en la que guardem el resultat (2 bytes)
...
  comf Valor,f  ; Complementa Valor
  incf Valor,f  ; I l'incrementa (el conjunt equival a canviar el signe)
  btfsc ZERO  ; Mirem si s'activa Z
  decf Valor+1,f  ; Si era zero cal decrementar Valor+1
  comf Valor+1,f  ; Complementem Valor+1
  movf Valor,w  ; Llegim a W la variable que hem de sumar
  addwf Resul,f  ; L'afegim al byte de la dreta
  btfsc CARRY  ; Mirem si s'activa C
  incf Resul+1,f  ; Si s'activa, incrementem el byte superior
  movf Valor+1,w  ; Llegim a W la variable que hem de sumar
  addwf Resul+1,f  ; L'afegim al byte de la dreta
...

 

 

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