TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Dienan en 03 de Enero de 2006, 14:27:00
-
Estoy realizando una tarjeta de adquisión de datos por el puerto serial y necesito una rutina de conversión de binario de 16bits a BCD, si alguien tiene alguna ó donde la pueda conseguir muchas gracias.
-
¿que lenguaje de programacion usas?
Suerte!!!
-
Aqui esta esta en ensamblador...
;********************************************************************
; Binary To BCD Conversion Routine
; This routine converts a 16 Bit binary Number to a 5 Digit
; BCD Number. This routine is useful since PIC16C55 & PIC16C57
; have two 8 bit ports and one 4 bit port ( total of 5 BCD digits)
;
; The 16 bit binary number is input in locations H_byte and
; L_byte with the high byte in H_byte.
; The 5 digit BCD number is returned in R0, R1 and R2 with R0
; containing the MSD in its right most nibble.
;
; Performance :
; Program Memory : 35
; Clock Cycles : 885
;
;
; Program: B16TOBCD.ASM
; Revision Date:
; 1-13-97 Compatibility with MPASMWIN 1.40
;
;*******************************************************************;
;
count equ 16
temp equ 17
;
H_byte equ 10
L_byte equ 11
R0 equ 12 ; RAM Assignments
R1 equ 13
R2 equ 14
;
include "p16c5x.inc"
;
B2_BCD bcf STATUS,0 ; clear the carry bit
movlw .16
movwf count
clrf R0
clrf R1
clrf R2
loop16 rlf L_byte, F
rlf H_byte, F
rlf R2, F
rlf R1, F
rlf R0, F
;
decfsz count, F
goto adjDEC
RETLW 0
;
adjDEC movlw R2
movwf FSR
call adjBCD
;
movlw R1
movwf FSR
call adjBCD
;
movlw R0
movwf FSR
call adjBCD
;
goto loop16
;
adjBCD movlw 3
addwf 0,W
movwf temp
btfsc temp,3 ; test if result > 7
movwf 0
movlw 30
addwf 0,W
movwf temp
btfsc temp,7 ; test if result > 7
movwf 0 ; save as MSD
RETLW 0
;
;********************************************************************
; Test Program
;*********************************************************************
main movlw 0FF
movwf H_byte
movwf L_byte ; The 16 bit binary number = FFFF
call B2_BCD ; After conversion the Decimal Number
; ; in R0,R1,R2 = 06,55,35
;
self goto self
;
org 1FF
goto main
;
END
No pude cargar el archivo porque dice no hay espacio SIEMPRE ME PASA ESO POR FAVOR EL ADMIN DEL FORO el archivo es de solo 2 KB.
Saludos
-
Que tal poi5on!!! si quieres subir algo debes hacerlo en el "almacen" del foro, aqui el link del almacen:
http://miarroba.com/foros/ver.php?id=348538
Cuando lo subas en el almacen, simplemente enlazalo aqui!
Suerte!!!
-
Hola yo tenia el mismo problema, use la subrutina y funciono bien, pero he tratado de entenderla y sigo sin entender el porque se le suma 3 o 30, si saben la teoria de esta subrutina, le agradeceria un poco de ayuda. gracias


-
A mi me pasa igual , entiendo muy bien como funciona esta rutina y porque sumar 3 ó 30, creo que tiene algo que ver con el direccionamiento indirecto pero no lo entiendo
-
Escrito originalmente por kain589
A mi me pasa igual , entiendo muy bien como funciona esta rutina y porque sumar 3 ó 30, creo que tiene algo que ver con el direccionamiento indirecto pero no lo entiendo
Nonononononon.
El direccionamiento se hace con los registros SFR y INDF
Acaso los ven en esta rutina? yo no.
No he revisado la rutina pero seguro debe tener que ver con los ajustes que hay que hacer para pasar de binario a bcd, no recuerdo bien como era la formula pero precisamente habia que sumarle algo al nibble inferior y luego al nibble superior para hacer los ajustes. Se chequeaba de a nibbles porque precisamente la conversion a bcd logra que en cada nibble haya una cifra de 0 a 9 , nunca supera este valor.