Autor Tema: convertir 3bytes en codigos BCD  (Leído 1319 veces)

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

Desconectado theve

  • PIC10
  • *
  • Mensajes: 4
convertir 3bytes en codigos BCD
« en: 16 de Octubre de 2004, 17:22:00 »
Hola amigos, he realizado un programa que me convierte 3 bytes en BCD (0 a 9) pero resulta que me tarda muchisimo, cerca de 0,75 segundos trabajando con un Xtal a 20Mhz, el pic es el 16f876.

El funcionamiento del programa es el siguiente: resto una unidad y se la sumo a un contador, cuando este contador pasa de nuevo le sumo 6 y asi lo voy conviertiendo.Bueno espero que alguien me pueda ayudar a como debo realizar el programa o algun programa ya hecho. Mi nick es theve, soy electronico y me gusta muchisimo diseñar circuitos utilizando  tambien microcontroladores. En la medida en que mis conocimientos me lo permitan colaborare en el foro aportando mi experiencia y conocimiento. Un saludo.

Desconectado wqtrp

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 170
RE: convertir 3bytes en codigos BCD
« Respuesta #1 en: 16 de Octubre de 2004, 21:56:00 »
hola,
fijate en este, es el q yo uso y funciona, de algun lado lo he sacado
la primera parte es como se hace para llamarlo y luego la rutina en si misma
claro q es para 2 bytes(16bits) , pero no debe ser muy dificil ampliarla a mas
yo la usaba para el f877 y luego creo haberla adaptado para el f452.

        movfw   GncH
        movwf   H_byte  
        movfw   GncL
        movwf   L_byte  
        call B2_BCD



B2_BCD
        bcf STATUS,0 ; clear the carry bit
        movlw .16
        movwf count
        clrf R0
        clrf R1
        clrf R2
       
loop16
        rlf L_byte, F
        rlf H_byte, F
        rlf R2, F
        rlf R1, F
        rlf R0, F
       
        decfsz count, F
        goto adjDEC
        RETLW 0
       
       
adjDEC
       
        ;lfsr 0 , R2
       
        movlw   low(R2)
        movwf   FSR0L
        movlw   high(R2)
        movwf   FSR0H
       
        call adjBCD

;        lfsr 0 , R1
        movlw   low(R1)
        movwf   FSR0L
        movlw   high(R1)
        movwf   FSR0H
        call adjBCD
       
;        lfsr 0 , R0
        movlw   low(R0)
        movwf   FSR0L
        movlw   high(R0)
        movwf   FSR0H
        call adjBCD
       
        goto loop16
       
adjBCD
        movlw 3
        addwf INDF0,W
        movwf temp
        btfsc temp,3 ; test if result > 7
        movwf INDF0
        movlw 30
        addwf INDF0,W
        movwf temp
        btfsc temp,7 ; test if result > 7
        movwf INDF0
       
        RETLW 0

Suerte

Desconectado PWRINVITRO

  • PIC12
  • **
  • Mensajes: 78
RE: convertir 3bytes en codigos BCD
« Respuesta #2 en: 17 de Octubre de 2004, 10:06:00 »
Saludos... la tabla es algo muy estatico y depende de muchos parametros en un programa y no es flexible ni reutilizable.... por otro lado todos sabemos lo q es BCD es gracioso q lo aclares.... y a parte una buena manera de hacerlo es:

BIN_BCD
btfss registro,3
return ;ya esta en bcd
btfss registro,0
return ;ya esta en bcd
movlw .6
addwf registro
retun ;ya esta en bcd
(dura unos pocos nanosegundos por registro con un resonador de 20 Mhz, no 0,75 segundos)
y esto es suponiendo q solo estas trabajando con el nibble menos significativo de cada registro ya q si no es asi entonces aclara bien q es lo q kieres hacer!!!!


 

anything