Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

22/06/2006 #1


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
22/06/2006 #2

Avatar de EinSoldiatGott

Re: Carry
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
04/05/2008 #3


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.
04/05/2008 #4

Avatar de EinSoldiatGott

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
05/05/2008 #5


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
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.