You are on page 1of 6

UNIVERSIDAD TCNICA DEL NORTE

FACULTAD DE INGENIERA EN CIENCIAS APLICADAS

Nombre: Jos Miguel Carapaz


Materia: Sistemas Microprocesados
Fecha: 2 011 05 09
- Transformar un nmero binario de 10 bits a su equivalente en BCD

FLUJOGRAMA
INICIO

BIN = BL

W=100d

BIN= BIN- 100

C+1

STATUS<0>= 1 SI

NO

BIN= BIN+100

W =10d

BIN = BIN -10


D+1

SI
STATUS<0>= 1

NO

BIN = BIN+10

U =BIN

M=
SI NO C=
BH<1>=0 BH<0>=0
D=
U=
NO

FIN
U1=6
D1=5
C1=2

AJUSTAR

SI U1=8
BH<0>=1 D1=6
C1=7

NO

AJUSTAR
U1=2
D1=1
C1=5

AJUSTAR
AJUSTAR

U=U1+U
D=D1+D
C=C1+C

SI U=U 10
U>10
D+1

NO

SI D = D -10
D> 10
C+1

NO

SI C = CD -10
C> 10
M+1

NO

FIN

CDIGO EN EL PROGRAMA MPLAB

list p=18F4550

include "p18F4550.inc"

_______________________________________________________________________________________________

; ESTE ESPACIO ES PARA LA CONFIG. DE FUSIBLES

_______________________________________________________________________________________________

u equ 0x20 ;Definimos la variable u donde van a estar las unidades

d equ 0x21 ;Definimos la variable d donde van a estar las decenas

c equ 0x22 ;Definimos la variable c donde van a estar las centenas

m equ 0x23 ;Definimos la variable m donde van a estar los miles

u1 equ 0x24 ;Definimos la variable u1 en la posicion 0x24

d1 equ 0x25 ;Definimos la variable d1 en la posicion 0x25

c1 equ 0x26 ;Definimos la variable c1 en la posicion 0x26

BH equ 0x27 ;BH tendr los dos bits del numero binario de 10 bits

BL equ 0x28 ;BL tendr los 8 bits del numero binario de 10 bits
BIN equ 0x29 ;BIN ser un auxiliar para trabajar con BH sin

modificar el # original

org 0x00 ;Indica la direccin en la que inicia

movf BL,w ;Movemos el contenido de BL a w

movwf BIN ;carga en BIN el numero de los primeros 8 bits del #

movlw .100 ;Ponemos el nmero 100 en w

cent

subwf BIN,1 ;Hacemos 100 menos w para determinar las centenas

btfss STATUS,0 ;Preguntamos si el bit 0 del STATUS es 1

goto salto_1 ;Salte donde se encuentre salto_1

incf c ;Incrementamos el contenido de c centenas

goto cent ;Salte donde se encuentre cent (contine el bucle)

salto_1

addwf BIN,1 ;Hacemos la operacin w + BIN y guardamos el resultado en


Bin

movlw .10 ;Ponemos el nmero 10 en w

dec

subwf BIN,1 ; Hacemos 10 menos w para determinar las decenas

btfss STATUS,0 ;Preguntamos si el bit 0 del STATUS es 1

goto salto_2 ;Salte donde se encuentre salto_2

incf d ;Incrementamos el contenido de d decenas

goto dec ;Salte donde se encuentre dec (contine el bucle)

salto_2

addwf BIN,1 ;lo que queda en BIN mas w es el nmero de unidades

movf BIN,w ;Movemos el contenido de BIN al registro w

movwf u ;Movemos el nmero de unidades a u unidades

btfsc BH,0 ;Preguntamos si el bit 0 del BH es 0 (el bit 9 del # de 10 bits


es 0?)

goto salto_3 ;si es falso salte donde se encuentre salto_3

btfss BH,1 ;si verdadero preguntamos si el bit 1 del BH es 1(el bit 10


del # de 10 bits es 1?)
goto $ ;si es falso Findel programa

movlw .6 ;si es verdadero ponemos el nmero 6 en w

movwf u1 ;Movemos el contenido de w al registro u1

movlw .5 ;Ponemos el nmero 5 en w

movwf d1 ;Movemos el contenido de w al registro d1

movlw .2 ;Ponemos el nmero 2 en w

movwf c1 ;Movemos el contenido de w al registro c1

goto ajustar ;Salte donde se encuentre ajustar

salto_3

btfss BH,1 ;Preguntamos si el bit 1 del BH es 1

goto salto_4 ;Salte donde se encuentre salto_4

movlw .8 ;Ponemos el nmero 8 en w

movwf u1 ;Movemos el contenido de w al registro u1

movlw .6 ;Ponemos el nmero 6 en w

movwf d1 ;Movemos el contenido de w al registro d1

movlw .7 ;Ponemos el nmero 7 en w

movwf c1 ;Movemos el contenido de w al registro c1

goto ajustar ;Salte donde se encuentre ajustar

salto_4

movlw .2 ;Ponemos el nmero 2 en w

movwf u1 ;Movemos el contenido de w al registro u1

movlw .1 ;Ponemos el nmero 1 en w

movwf d1 ;Movemos el contenido de w al registro d1

movlw .5 ;Ponemos el nmero 5 en w

movwf c1 ;Movemos el contenido de w al registro c1

ajustar ;ajustamos las unidades

movf u1,w ;Movemos el contenido de u1 al registro w

addwf u,1 ;sumamos u + u1

movlw .10 ;Ponemos el nmero 10 en w

subwf u,0 ;Hacemos la operacion u - w Y guardamos en w


btfsc STATUS,0 ;Preguntamos si el bit 0 del STATUS es 0

goto salto_5 ;Salte donde se encuentre salto_5

ajustar_d ;ajustar decenas

movf d1,w ;Movemos el contenido de d1 al registro w

addwf d,1 ;sumamos d + d1

movlw .10 ;Ponemos el nmero 10 en w

subwf d,0 ;Hacemos la operacion d - w Y guardamos en w

btfsc STATUS,0 ;Preguntamos si el bit 0 del STATUS es 0

goto salto_6 ;Salte donde se encuentre salto_6

ajustar_c ;ajustar centenas

movf c1,w ;Movemos el contenido de c1 al registro w

addwf c,1 ;sumamos c +c1

movlw .10 ;Ponemos el nmero 10 en w

subwf c,0 ;Hacemos la operacion c - w Y guardamos en w

btfss STATUS,0 ;Preguntamos si el bit 0 del STATUS es 1

goto $ ;Fin

movlw .10 ;Ponemos el nmero 10 en w

subwf c,1 ;Hacemos la operacion c - w Y guardamos en c

incf m ;si el numero de centenas es mayor a diez aumentamos un


mil

goto $ ;fin

salto_5

movlw .10 ;Ponemos el nmero 10 en w

subwf u,1 ;Hacemos la operacion u - w Y guardamos en u

incf d ; si el numero de unidades es mayor a diez aumentamos


decenas

goto ajustar_d ;regresamos para sumarles las decenas (d + d1)

salto_6

movlw .10 ;Ponemos el nmero 10 en w

subwf d,1 ;Hacemos la operacion d - w Y guardamos en d

incf c ; si el numero de decenas es mayor a diez aumentamos


centenas
goto ajustar_c ;regresamos para sumarles las centenas (c+c1)

end

You might also like