1
« en: Martes 15 de Septiembre de 2009, 15:24 »
DOS RUTINAS BIN_8_BCD
;******************************************************
;Libreria encargada de convertir un numero binario
;de 8 bits (1 byte) a su equivalente en BCD. El resul-
;tado de la conversion del numero binario a BCD ocupa
;un byte y medio y se representa en las variables de
;memoria BCDH y BCDL. El numero binario a convertir
;debe estar almacenado en la variable BIN.
;
;ej. 0xFF = 255
; BIN -> BCDH:BCDL
; FF 02 55
;
;La conversion se hace realizando divisiones mediante
;restas sucesivas. Primero entre 100 para obtener
;el nibble bajo de BCDH y despues entre 10 para obte-
;ner el nibble alto de BCDL y el residuo pasa a formar
;el nibble bajo de BCDL.
;
;Para iniciar la conversion solamente se ocupa llamar
;a la rutina BIN8_BCD3.
;
;Fecha: 20.06.07 Autor: Jorge Arturo Bojorquez
;******************************************************
BIN8_BCD3
clrf BCDH
clrf BCDL
BCD_HIGH
movlw .100
subwf BIN,f
btfss STATUS,C
goto SUMA_100
incf BCDH,f
goto BCD_HIGH
SUMA_100
movlw .100
addwf BIN,f
movlw 0x0F
movwf BCDL
BCD_LOW movlw .10
subwf BIN,f
btfss STATUS,C
goto SUMA_10
incf BCDL,f
movlw 0x0F
iorwf BCDL,f
goto BCD_LOW
SUMA_10 movlw .10
addwf BIN,f
movlw 0xF0
andwf BCDL,f
movf BIN,w
iorwf BCDL,f
return
end
;******************************************************
;Libreria encargada de convertir un numero binario
;de 8 bits (1 byte) a su equivalente en BCD. El resul-
;tado de la conversion del numero binario a BCD ocupa
;un byte y medio y se representa en las variables de
;memoria BCDH y BCDL. El numero binario a convertir
;debe estar almacenado en la variable BIN.
;
;ej. 0xFF = 255
; BIN -> BCDH:BCDL
; FF 02 55
;
;La conversion se hace empleando el algoritmo Recorre
;y Suma+3. El algoritmo funciona de la siguiente manera:
;
;1. Recorre 1 bit a la izquierda el numero binario
;2. Si se han hecho 8 corrimientos, el numero BCD se en
; cuentra en las columnas CENTENAS, DECENAS y UNIDADES
;3. Si el valor binario de cualquiera de las columnas
; es 5 o mayor, se suma 3 al valor en esta columna BCD
;4. Si se desea convertir un byte despues de haber efec-
; tuado 8 corrimientos la conversion ha finalizado
;
;Para iniciar la conversion solamente se ocupa llamar
;a la rutina BIN2BCD_RS3
;
;Fecha: 21.06.07 Autor: Jorge Arturo Bojorquez
;******************************************************
BIN2BCD_RS3
clrf BCDH
clrf BCDL
movlw 0x08
movwf CUENTA
CONVERSION1
bcf STATUS,C
rlf BIN,f
rlf BCDL,f
rlf BCDH,f
decfsz CUENTA,f
goto $+2
goto TERMINA_CONVERSION
movlw b'00001111'
andwf BCDL,w
movwf BCD_TEMP
movlw 0x05
subwf BCD_TEMP,w
btfsc STATUS,C
call SUMA0x03
movlw b'11110000'
andwf BCDL,w
movwf BCD_TEMP
movlw 0x50
subwf BCD_TEMP,w
btfsc STATUS,C
call SUMA0x30
goto CONVERSION1
TERMINA_CONVERSION
return
;*******************************
;Subrutina que se encarga de
;sumar 3 al nibble bajo de BCDL
;*******************************
SUMA0x03
movlw 0x03
addwf BCDL,f
btfss STATUS,C
return
rlf BCDH,f
return
;*******************************
;Subrutina que se encarga de
;sumar 3 al nibble alto de BCDL
;*******************************
SUMA0x30
movlw 0x30
addwf BCDL,f
btfss STATUS,C
return
rlf BCDH,f
return