Programació en pic-as 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.

D1 EQU 0x20  ; Variable unitats	
D2 EQU 0x21  ; Variable desenes	
D3 EQU 0x22  ; 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 CARRY  ; 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 CARRY  ; 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.