TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: theve en 16 de Octubre de 2004, 17:22:00

Título: convertir 3bytes en codigos BCD
Publicado por: theve 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.
Título: RE: convertir 3bytes en codigos BCD
Publicado por: wqtrp 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
Título: RE: convertir 3bytes en codigos BCD
Publicado por: PWRINVITRO 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!!!!