TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: kenny_pic en 03 de Febrero de 2014, 22:48:21
-
si alguien me pudiera ayudar lo agradecería estoy empezando a programar en asm con pic16f84a, llevo semanas y no me salgo necesito 2 rutinas:
hex. a bcd y otra de bcd a hex. pero que el resultado este solo en 2 registros en uno las centenas y en el otro decenas y unidades. porque todos los programas que encontrado el resultado estaba dividido en 3 registros.
gracias. un saludo
-
Bienvenido al foro.
Mira por aqui, a ver si esta esa rutina en concreto:
http://www.todopic.com.ar/foros/index.php?topic=23812.0
-
gracias, he buscado y no me sirve ninguna y no se como hacerlo.
-
Mira a ver si asi te vale, aprovechando esta rutina de Suki:
;***************************
;*** Binario 8bits a BCD ***
;***************************
;<Binario>=><Centena, Decena,Unidad>
; REGISTROS
Binario
Centena
Decena
Unidad
;Rutina
Binario_BCD
movfw Binario
movwf Unidad
clrf Decena
clrf Centena
BCD_0
movlw d'10'
subwf Unidad,W
btfss STATUS,C
goto BCD_Fin
BCD_1
movwf Unidad
incf Decena,f
movlw d'10'
subwf Decena,W
btfss STATUS,C
goto BCD_0
BCD_2 clrf Decena
incf Centena,f
goto BCD_0
BCD_Fin
Le he implementado esto:
BCD_Fin
swappf Decena,W
addwf Unidad,f
Lo he probado con tres numeros y da bien el resultado, te quedan en "Unidad" las unidades y las decenas, hago un "swappf Decena,W", para pasar el nibble bajo al alto y al sumar ya quedan los dos valores en el mismo Byte, queda asi:
;***************************
;*** Binario 8bits a BCD ***
;***************************
;<Binario>=><Centena, Decena,Unidad>
; REGISTROS
Binario
Centena
Decena
Unidad
;Rutina
Binario_BCD
movfw Binario
movwf Unidad
clrf Decena
clrf Centena
BCD_0
movlw d'10'
subwf Unidad,W
btfss STATUS,C
goto BCD_Fin
BCD_1
movwf Unidad
incf Decena,f
movlw d'10'
subwf Decena,W
btfss STATUS,C
goto BCD_0
BCD_2 clrf Decena
incf Centena,f
goto BCD_0
BCD_Fin
[b]swappf Decena,W
addwf Unidad,f[/b][/code
-
Muchísimas gracias! me va a la perfección tal y como yo quería.
-
Ademas como ves es muy sencillo, seguramente valga para cualquier otra rutina.
-
Tengo otro problema, estoy intentando hacer el programa de bcd a hexadecimal y no me sale, estuve buscando y encontré esta rutina pero no me sirve porque en el pic16f84 no está la instrucción multiplicar(mull) y no se como hacerlo para que el el valor que introduces en 2 registros de bcd este convertido en un solo registro hexadecimal. Gracias.
BCD_HEX
movwf ByteL ;carga valor a convertir contenido en W
movwf ByteH ;carga valor a convertir contenido en W
movlw 0x0f ;selecciona el nibble bajo de W
andwf ByteL,f ;introducelo en el registro ByteL
movlw 0xf0 ;selecciona el nibble alto de W
andwf ByteH,f ;introducelo en el registro ByteH
swapf ByteH,w ;invierte los nibles de ByteH e introduce el resultado en W
mullw .10 ;multiplica el contenido de W por 10d
movf PRODL,w ;caga el resultado en W
addwf ByteL,w ;suma el contenido de ByteL a W
-
Mira en la respuesta 50, creo que esta lo que buscas, tambien hay unas rutinas de sumas, restas y "multiplicaciones":
http://www.todopic.com.ar/foros/index.php?topic=23812.40