conversor binario-bcd, problemas con carry

Hola,

estoy haciendo un programa conversor de binario a bcd. Este programa hara que el pic 16f84 lea las entradas del puerto A, Ra0, Ra1 etc, las convierta de binario a bcd, y deposite el resultado en el puerto B, Bb0, Rb1 etc.

el resultado de esta conversion tiene dos partes, la parte alta y la parte baja, imagino que sera las decenas y las unidades.

de momento he conseguido que las unidades se me vean bien, tanto en la placa simuladora como con integrados bcd 7 segmentos, este resultado en bcd sale por Rb0, Rb1,Rb2 yRb3

el problema es que las decenas no consigo que me salgan, imagino que sera por cuestion de carry, alguien me puede hechar una mano? :(

aqui os paso el programa que tengo hasta ahora:


RESET

clrf PORTB
bsf STATUS,RP0
clrf TRISB
movwf TRISA
bcf STATUS,RP0

inicio

movf PORTA,W

BIN_BCD_1

addlw H'00F6'
btfss STATUS,C
goto BIN_BCD_3
movwf Temp_1
goto BIN_BCD_2

BIN_BCD_2

movf Temp_1,W
goto BIN_BCD_1

BIN_BCD_3

addlw H'0A'
movwf PORTB
goto inicio


END


si teneis un programa que lo haga directamente, aunque sea distinto a este os lo agradeceria mucho :)

gracias
 
Hola agregaré en azul algunos detalles que observo

omfreg dijo:
RESET

clrf PORTB
bsf STATUS,RP0
clrf TRISB
movwf TRISA<<<--¿Que valor se ha cargado en W?
bcf STATUS,RP0

inicio

movf PORTA,W

BIN_BCD_1

addlw H'00F6'<<--Esto no lo entiendo, esta sumando un 246 a lo que se movío del PORTA a W? Para que? Abajo veo que checa si hay desborde pero no le hayo sentido
btfss STATUS,C
goto BIN_BCD_3
movwf Temp_1
goto BIN_BCD_2<<<---Esto no se ocupa

BIN_BCD_2

movf Temp_1,W
goto BIN_BCD_1

BIN_BCD_3

addlw H'0A'
movwf PORTB
goto inicio


END


si teneis un programa que lo haga directamente, aunque sea distinto a este os lo agradeceria mucho :)

gracias


Se me ocurre que sería mejor hacerlo así:
Usamos RB4 como entrada de control, si esta ne alto es la parte MSB si esta en bajo es la LSB

1.- Esperamos a que RA4 este en alto
2.- Movemos lo de PORTA a un registro
3.- Lo recorremos a la izquierda 4 veces
4.- Esperamos a que RA4 este en bajo
5.- Sumamos lo del porta con lo del registro que recorrimos.
6.- Lo mostramos


Así no ocupamos timmer, hay una sincronía perfecta :9

Saludos
 
Para la conversion binario -BCD al menos para numeros de 2 cifras se realiza el siguiente proceso:

Se toma el numero de entrada de puerto A y se guarda en algun registro.

Al numero de entrada se le hayan cuantas decenas tiene.

Al numero de entrada se le añade 6 por cada decena que tenga.

y el nuevo resultado se manda por puerto B.

Supongo que si se puede realizar este proceso por medio de un microprocesador 0808, el pic tendra las herramientas suficientes para hacerlo.
 
ERICK LEONARDO SAENZ P dijo:
Al numero de entrada se le añade 6 por cada decena que tenga.

y el nuevo resultado se manda por puerto B.

No precisamente, o tal vez no le entendi que quiso decir, si quiero sumar un (0010,0010)= 22 BCD más + cualquier otro número, tiene 2 decenas, quiere decir que le sumo 2 veces 6? si es así es incorrecto.

Para emepezar, no es posible hacerlo así directo, por ejemplo quiero sumar 28+12=
"""""""""""""""""En BCD sería
(0010,1000)
+(0001,0010)
___________
.............1010 ---------------> Cuando el resultado es > 9, se le suman 6
...........+0110
____________
..............0000
____________ ------------->Ahora se suman las decenas + (1) de acarreo
..0010
..0001
..0001
____________
..0100,0000 = 40

En esas ocasiones es cuando se le suma 6, cuando el número es mayor que 9, pero solo cuando el número esta en """"BCD"""""

En binario no aplica.
Por ejemplo
22 en binario es 10110
18 = 10010

Por que por ejemplo el número 122
En binario=1111010
En BCD= 0001,0010,0010 ------> No es una serie de 1 y 0, sino que estan agrupados de 4 en 4.

----------

Un saludo
 
Segun entiendo no se trata de sumas o restas de numeros BCD sino de una conversion de Binario a BCD , por tanto aqui envio un ejemplo de lo que intentaba decir:

tenemos el numero 38(base decimal) en binario

0010 0110

como tiene tres decenas vamos a agregarle 18 unidades en base binario

0010 0110
0001 0010
------------------
0011 1000
------ -------
3 8 en BCD

por ultimo recuerdo que este proceso solo funciona para numeros BCD de 2 cifras es decir hasta el numero 99.

ojala ahora quede un poco mas claro y pueda servirles de algo
 
Atrás
Arriba