Ir ao conteúdo
  • Cadastre-se

Decompor números de 16 bits com PIC


Projetos_afg

Posts recomendados

Olá, eu estou montando um contador de RPM com o microcontrolador PIC16F877. A linguagem de programação é ASM, eu ja estou na fase final do projeto, mas me deparei com um problema, o número de rotações por minuto é um valor de 16Bits, e eu preciso exibir num display LCD 16x2, então alguém conhece uma forma de separar o número em outras 5 variáveis separando em dezena de milhar, milhar, centena, dezena e unidade?

Eu consegui decompor números de 8 bits, proém de 16 bits eu não estou conseguindo. Alguém pode me ajudar?

Link para o comentário
Compartilhar em outros sites

Amigo, ja pensou na rotina de ajuste decimal?

a unica modificação que seria feita na rotina tradicional seria, a inclusão das variáveis milhar e milhão, e no decremento da variavel temporaria que seria de 16 bits e não oito:

veja eu uso essa como exemplo:


AJUSTE_DECIMAL
CLRF UNIDADE
CLRF DEZENA ; RESETA REGISTRADORES
MOVWF TEMP
MOVF TEMP,W
BTFSC STATUS,Z ; VALOR A CONVERTER = 0 ?
RETURN ; SIM - RETORNA
; NÃO
INCF UNIDADE,F ; INCREMENTA UNIDADE

MOVF UNIDADE,W
XORLW 0X0A
BTFSS STATUS,Z ; UNIDADE = 10d ?
GOTO $+3 ; NÃO
; SIM
CLRF UNIDADE ; RESETA UNIDADE
INCF DEZENA,F ; INCREMENTA DEZENA

DECFSZ TEMP,F ; FIM DA CONVERSÃO ?
GOTO $-.8 ; NÃO - VOLTA P/ CONTINUAR CONVERSÃO
RETURN ; SIM

ela é de duas variaveis pois usei em uma fonte de bancada com voltimetro.

abs.

Link para o comentário
Compartilhar em outros sites

Eu fiz uma rotina diferentepara decompor números de 8 bits:

Converter
clrf DSP1
clrf DSP2
clrf DSP3
movlw .100
subwf Dado , 1
btfss STATUS , 0
goto $+3
incf DSP1 , 1
goto $-4
movlw .100
addwf Dado , 1
movlw .10
subwf Dado , 1
btfss STATUS , 0
goto $+3
incf DSP2 , 1
goto $-4
movlw .10
addwf Dado , 0
movwf DSP3
return

E com ela eu não coneguia modifica-la para 16 Bits.

Agora com a sua rotina eu vou tentar. Obrigado pela ajuda!

Link para o comentário
Compartilhar em outros sites

Funcionou!

Eu modifiquei o programa e até que em fim consegui!

Olha como ficou:


Inicio_dec
movf RPML,W
btfss STATUS,Z
goto $+6
decf RPML,F
movf RPMH,W
btfss STATUS,Z
goto $+4
goto fim_dec
decf RPML,F
goto $+2
decf RPMH,F

incf DSP5,F ;
movf DSP5,W
xorlw 0X0A
btfss STATUS,Z ;
goto Inicio_dec ;
;
clrf DSP5 ;
incf DSP4,F ;
movf DSP4,W
xorlw 0X0A
btfss STATUS,Z ;
goto Inicio_dec

clrf DSP4 ;
incf DSP3,F ;
movf DSP3,W
xorlw 0X0A
btfss STATUS,Z ;
goto Inicio_dec

clrf DSP3 ;
incf DSP2,F ;
movf DSP2,W
xorlw 0X0A
btfss STATUS,Z ;
goto Inicio_dec

clrf DSP2 ;
incf DSP1,F ;
goto Inicio_dec
fim_dec ;Fim da decomposição do número

Muito obrigado pela ajuda!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...