Programació en mpasm 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			; Valor que sumem
	Resul:2			; Variable en la que guardem el resultat
...
	movf		Valor,w		; Llegim a W la variable que hem de sumar
	addwf		Resul,f		; L'afegim al byte de la dreta
	btfsc		STATUS,C	; 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			; Valor que restem (substrahend)
	Resul:2			; Variable en la que guardem el resultat
...
	movf		Valor,w		; Copia el valor assenyalat per FSR a W
	subwf		Resul,f		; El resta de la suma total
	btfss		STATUS,C	; 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:2			; Valor que sumem
	Resul:2			; Variable en la que guardem el resultat
...
	movf		Valor,w		; Llegim a W la variable que hem de sumar
	addwf		Resul,f		; L'afegim al byte de la dreta
	btfsc		STATUS,C	; 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:2			; Valor que restem
	Resul:2			; Variable en la que guardem el resultat
...
	comf		Valor,f		; Complementa Valor
	incf		Valor,f		; I l'incrementa (el conjunt equival a canviar el signe)
	btfsc		STATUS,Z	; 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		STATUS,C	; 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.