Programació en mpasm del PIC 16F690

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

Conversió d'un byte a BCD

La funció següent agafa el valor que hi ha a l'acumulador (un byte, valor de 0 a 255) i el converteix a BCD de tres xifres guardat en tres variables. L'acumulador retorna amb un zero.

El següent diagrama descriu el procediment:

Conversió a BCD

El que fem és anar restant 100 a la variable fins que el resultat és negatiu (C = 0). Mentre el resultat és positiu, incrementem les centenes cada cop que restem 100. Després anem restant 10 a la variable fins que el resultat és negatiu. Mentre el resultat és positiu, incrementem les desenes cada cop que restem 10.

A l'exemple MT podem veure una mostra de com emprar aquesta funció.

	D1			; Variable unitats	
	D2			; Variable desenes	
	D3			; Variable centenes	
					;
					; Funció que converteix un número de 8 bits a BCD (3 dígits)
					;
BCD	
	clrf		D3		; Posa D3 (centenes) a zero
	clrf		D2		; Posa D2 (desenes) a zero
	movwf		D1		; Guarda W (valor a convertir) a D1 
					; D1 són les unitats
Cent					; Anem a trobar les centenes (D3)
	movlw		.100		; Carrega 100 decimal a W
	subwf		D1,w		; Li resta W a D1
	btfss		STATUS,C	; Mira C i si és 1 no fa la següent
					; Si és 1 vol dir resultat positiu
	goto		Desen		; Si el resultat és negatiu les centenes ja estan
					; el valor de W es perd i anem a les desenes
	movwf		D1		; Guarda el resultat (W) a D1
	incf		D3,f		; La centena restada a D1 l'afegeix a D3
	goto		Cent		; Tornem-ho a fer
Desen					; Anem a trobar les desenes
	movlw		.10		; Carrega 10 decimal a W
	subwf		D1,w		; Li resta W a D1
	btfss		STATUS,C	; Mira C i si és 1 no fa la següent
					; Si és 1 vol dir resultat positiu
	goto		Final		; Si el resultat és negatiu les desenes ja estan
					; el valor de W es perd i anem a ASCII
	movwf		D1		; Guarda el resultat (W) a D1
	incf		D2,f		; La desena restada a D1 l'afegeix a D2
	goto		Desen		; Tornem-ho a fer
Final
	retlw		0		; Retorn amb un 0 a W

 

 

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