Autor Tema: Binario a BCD, no lo entiendo  (Leído 15783 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado vixctor

  • PIC16
  • ***
  • Mensajes: 110
Re: Binario a BCD, no lo entiendo
« Respuesta #15 en: 18 de Septiembre de 2014, 00:34:44 »
Lo más seguro es que el código este mal, así se simple...

No sabría en que parte, pero los resultados que te arroja son erróneos.

Ahora, respecto al lenguaje de programación, si te puedo asegurar que C es mucho más fácil de aprender, pero si quieres saber realmente como está funcionando el microcontrolador y que hace, realmente te recomiendo ensamblador.

Vi un comentario muy curioso en la pagina en donde Picuino publico su código, lo vi en un tema precisamente de alguien que buscaba ensamblador para los pics de la serie 24:

"No soy fan de los compiladores que hacen las veces de mami llevando al desarrollador de la mano, lo que yo quiero es saber que hace el micro"

Saludos





Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Binario a BCD, no lo entiendo
« Respuesta #16 en: 18 de Septiembre de 2014, 00:45:23 »
Lo más seguro es que el código este mal, así se simple...

No sabría en que parte, pero los resultados que te arroja son erróneos.


Eso es lo que queria saber. Gracias por aclararmelo.
Como he dicho antes, varios codigos que he probado tienen el mismo poblema, es decir, puedo pensar con tranquilidad que son erroneos? Eso me alivia un poco.

Intentare hace algo por mi mismo y, segun vaya avanzando lo ire subiendo. Este es un tema recurrente y tengo intencion de solucinarlo de una manera u otra. Seuro que es de ayuda para el que venga detras.


Ahora, respecto al lenguaje de programación, si te puedo asegurar que C es mucho más fácil de aprender, pero si quieres saber realmente como está funcionando el microcontrolador y que hace, realmente te recomiendo ensamblador.


En cuanto a lo de c o ensamblador, es una discusion que nunca tendra final. Mucha gente me recomienda el c, pero ahora que empeze con ensamblador me es dificil cambiar y empezar a estudiar de nuevo.

Saludos

Desconectado Pablolbap

  • PIC10
  • *
  • Mensajes: 37
Re: Binario a BCD, no lo entiendo
« Respuesta #17 en: 21 de Septiembre de 2014, 18:07:55 »
Lamento no ser de gran ayuda en cuanto al tema, pero no podía dejar pasar la ocasión para felicitar a vixctor por la respuesta brindada. Es el tipo de respuesta que no te soluciona de momento el problema, pero aprendes mucho a la larga.
En cuanto a los lenguajes, hay cierto rumor que se comienza con Assembler, luego C, mezclas ambos y luego lo que quieras.
Creo que para no confundirse con los lenguajes, hay que estar un poco firme en un lenguaje para comenzar otro, así siento.
Hay una librería para el PIC16F84A que quizás te sirva analizarla:

;
;   ===================================================================
;     Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;     E. Palacios, F. Remiro y L. López.
;      Editorial Ra-Ma.  www.ra-ma.es
;   ===================================================================
;
; Un número binario natural de 8 bits es convertido a BCD. El resultado se guarda en tres
; posiciones de memorias llamadas: BCD_Centenas, BCD_Decenas y BCD_Unidades.
;
; El procedimiento utilizado es mediante restas de 10, tal como se explicó en el capítulo 9.
;
; Entrada:   En el registro W el número binario natural a convertir.
; Salidas:   En (BCD_Centenas), (BCD_Decenas) y (BCD_Unidades).
;      En el registro W también las decenas (nibble alto) y unidades (nibble bajo).

; Subrutina "BIN_a_BCD" -----------------------------------------------------------------

   CBLOCK            ; En las subrutinas no se debe fijar la dirección
   BCD_Centenas         ; de la RAM de usuario. Se toma a continuación de
   BCD_Decenas         ; la última asignada.
   BCD_Unidades   
   ENDC
;
BIN_a_BCD
   clrf   BCD_Centenas      ; Carga los registros con el resultado inicial.
   clrf   BCD_Decenas      ; En principio las centenas y decenas a cero.
   movwf   BCD_Unidades      ; Se carga el número binario a convertir.
BCD_Resta10
   movlw   .10         ; A las unidades se les va restando 10 en cada
   subwf   BCD_Unidades,W      ; pasada. (W)=(BCD_Unidades) -10.
   btfss   STATUS,C      ; ¿C = 1?, ¿(W) positivo?, ¿(BCD_Unidades)>=10?
   goto    BIN_BCD_Fin      ; No, es menor de 10. Se acabó.
BCD_IncrementaDecenas
   movwf   BCD_Unidades      ; Recupera lo que queda por restar.
   incf   BCD_Decenas,F      ; Incrementa las decenas y comprueba si ha llegado
   movlw   .10         ; a 10. Lo hace mediante una resta.
   subwf   BCD_Decenas,W      ; (W)=(BCD_Decenas)-10).
   btfss   STATUS,C      ; ¿C = 1?, ¿(W) positivo?, ¿(BCD_Decenas)>=10?
   goto   BCD_Resta10      ; No. Vuelve a dar otra pasada, restándole 10 a
BCD_IncrementaCentenas         ; las unidades.
   clrf   BCD_Decenas      ; Pone a cero las decenas
   incf   BCD_Centenas,F      ; e incrementa las centenas.
   goto   BCD_Resta10      ; Otra pasada: Resta 10 al número a convertir.
BIN_BCD_Fin
   swapf   BCD_Decenas,W      ; En el nibble alto de (W) también las decenas.
   addwf   BCD_Unidades,W      ; En el nibble bajo de (W) las unidades.
   return            ; Vuelve al programa principal.
   
; La directiva "END" se debe poner en el programa principal no aquí.

;   ===================================================================
;     Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;     E. Palacios, F. Remiro y L. López.
;      Editorial Ra-Ma.  www.ra-ma.es
;   ===================================================================

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Binario a BCD, no lo entiendo
« Respuesta #18 en: 22 de Septiembre de 2014, 14:26:50 »
¿Has mirado en este hilo?, hay bastantes rutinas en ensamblador, en el mensage 13 hay una rutina de binario a BCD de 16 bits, si la pones en el MPLAB y la vas simulando paso a paso, entenderas como funciona:

http://www.todopic.com.ar/foros/index.php?topic=23812.0

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Binario a BCD, no lo entiendo
« Respuesta #19 en: 24 de Septiembre de 2014, 00:39:24 »
Gracias a todos por sus mensajes.

Mirando por aqui y por alla, y con sus explicaciones y consejos he conseguido una rutina que pasa de Binario 24bits directamente a ASCII.
No la he construido yo, solo he modificado una existente y anadido la secuencia de vixctor para pasar a ASCII.
El numero binario se introduce por 3 registros (NumH, NumM y NumL) y el resultado en ASCII sale en 8 registros (DIGITO1 a DIGITO8 ) que se pueden meter directamente al LCD

La he probado con un codigo sencillo y parece que funciona.

Aunque no sea muy orginal pero creo que le puede servir de ayuda a alguien, asi que la subo.

Gracias de nuevo a todos por su ayuda. Creo que pronto volvere a molestarles con mis dudas jejeje.

Saludos


 

anything