Who's online

There are currently 0 users and 24 guests online.

Publicidade

Displays de sete segmentos, transistores e decodificador BCD-sete segmentos

User login

PIC16: toBCD8 - Hexadecimal para BCD 8 bits

A rotina de conversão de números hexadecimais para BCD de 8 bits em assembly é uma rotina simples que consiste em sucessivas subtrações por .10 (0xA) para contagem das dezenas. Após a obtenção do dígito das dezenas, tem-se o dígito das unidades (o número restante das subtrações). Essa rotina pode ser utilizada para a exibição de 2 números em displays de 7 segmentos.
 

A função abaixo utiliza o recurso de coding folding do MPLAB. Esse recurso é utilizado através das linhas ;{ e ;}. O código abaixo é compatível com as famílias PIC16 e PIC18.
 

Variáveis utilizadas:

  • BCD_low
  • BCD_unidades
  • BCD_dezenas

 

;*********************************************************
;<FUNÇÃO> 
; toBCD8
;{
; Converte um número de 8 bits em decimal para BCD
 
; <ARGUMENTOS>
; BCD_low = número de 8 bits a ser convertido em BCD
 
; <RETORNO>
; BCD_unidades = dígito menos significativo
; BCD_dezenas = dígito mais significativo
; BCD_low = ambos os dígitos
;*********************************************************
#ifdef toBCD 
 
toBCD8: 
    banksel BCD_low
    ; .100 invés de 99 para evitar o teste de igualdade
    movlw .100 ; verifica se o número é maior que .99
    subwf BCD_low,w
    btfsc STATUS, C
        clrf BCD_low; apaga o número caso for maior que .99
 
    clrf BCD_unidades ; apaga cálculos anteriores
    clrf BCD_dezenas
 
dezenas_toBCD8: ; dígito mais significativo
    movlw .10
    subwf BCD_low, f
    btfss STATUS, C
        goto unidades_toBCD8
    incf BCD_dezenas,f
    goto dezenas_toBCD8
 
unidades_toBCD8: ; dígito menos significativo
    movlw .10
    addwf BCD_low, f
    movf BCD_low, w
    movwf BCD_unidades    
 
    swapf BCD_dezenas,w
    iorwf BCD_unidades,w
    movwf BCD_low ; retorna o resultado também em BCD_low
 
    return ; toBCD8
#endif
;} 
 
;********************************************************* 

Post new comment

The content of this field is kept private and will not be shown publicly.
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.