Autor Tema: nesecito hacer un conversor binario a bcd de 2 bytes  (Leído 3541 veces)

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

Desconectado pioman

  • PIC10
  • *
  • Mensajes: 1
nesecito hacer un conversor binario a bcd de 2 bytes
« en: 15 de Febrero de 2005, 09:47:00 »
hola como les dije necesitaria saber como hacer un conversor de binario a bcd de 2 bytes, pra un recuperatorio de la facultad. para el jk3 . gracias.
Mi correo electronico es pioestalibre@yahoo.com.ar

Desconectado el_dardo2004

  • PIC10
  • *
  • Mensajes: 5
RE: nesecito hacer un conversor binario a bcd de 2 bytes
« Respuesta #1 en: 05 de Mayo de 2005, 09:49:00 »
Buenas k tal aki te pongo la subrutina que pasa de binario a bcd, haver si te sirve

;TIPUS DE MICROCONTROLADOR

      list p=16F873A         ;Tipus de processador.
      include "P16F873.INC"    ;Definicions de registres interns.

;Convierte el valor binario presente en posición 0x10 en BCD. El resultado se deposita
;en las variables Buffer_H y Buffer_L.
      

Binario        equ   0x20      ;Valor binario inicial
Buffer_H   equ   0x21      ;Parte alta del resultado
Buffer_L    equ   0x22      ;Parte baja del resultado
Temp_1          equ   0x23      ;Registro temporal

      org   0x00      ;Vector de Reset
      goto   Inicio

      org   0x05      ;Salva el vector de interrupción

Inicio         clrf   Binario
      clrf   Temp_1
      movlw   b"111111111"
      movwf   Binario         ;Carga el valor binario inicial
      clrf    Buffer_L
                clrf    Buffer_H      ;Inicia registros de trabajo
                                     
BIN_BCD_1       addlw    0xf6             ;Resta 10 mediante suma de complemento a 2.
                         btfss    STATUS,C          ;Hay Carry?
                         goto    BIN_BCD_3       ;NO.
                         movwf    Temp_1            ;SI.Guardar en registro temporal.
                         incf    Buffer_L,F      ;Incrementar byte bajo, guardarlo y enviar...
                         movf    Buffer_L,W      ;..copia al ==> W...
                         xorlw    b"00001010"       ;..0Ah xor W.
                         btfss    STATUS,Z          ;Buffer_L es igual a 10 ??
                         goto    BIN_BCD_2       ;NO.
                         clrf    Buffer_L        ;SI. Poner Buffer_L a 0
                         incf    Buffer_H,F      ;Incrementar Buffer_H
BIN_BCD_2       movf    Temp_1,W        ;Recuperar el dato.
                         goto    BIN_BCD_1       ;Continuar la operación.

BIN_BCD_3       addlw    0x0B             ;TEMPO + 0Ah
                         swapf    Buffer_L,F        ;<3:0> <==> <7:4> y ==> Buffer_L
                         iorwf    Buffer_L,F        ;W OR Buffer_L ==> Buffer_L

Stop           nop            ;Poner breakpoint de parada
              nop

      end         ;Fin del programa fuente