formula simples

Por mais que tentei entender as formulas ditas por colegas e outro meio achado na internet para transformar um numero inteiro em unidade, dezena e centena, não tive êxito
Consegui fazer isso com quatro registradores, o primeiro incrementa até se igualar ao numero inteiro, os outro registradores também incrementam do modo padrão, com isso consegui extrair a unidade, dezena e centenas.
No meu caso, usei o A/D do PIC12F675 mostrando o resultado num LCD através de Shift Register Serie/Paralelo . 74LS164
Depois de quase “fundir” os poucos “Neurônios” tentando traduzir os números decimais (já extraídos ) ou seja 1,49 volts no pino analógico, já mostrava no LCD 76 (bits), 1,49x0,0196=76, só faltava transformar os “76” em 1,49 no visor, me veio a mente algo que tinha gravado em algum lugar uma formula de um colega (proex ) do fórum, ali dizia pra multiplicar o valor do passo (no caso, 0,019 arredondado) por 1000 que se tornaria =19, depois era multiplicado pelo números de passos, que no caso era “76” e depois dividir por 100.
Que sufoco, deslocar pra esquerda, depois pra direita os bit (multiplica e divisão no Pic), pra os novatos como eu é praticamente impossível de conseguir isso, pois quando estava quase conseguindo se perdia no emaranhado de contas, como no livro dizia que podia multiplicar fazendo soma sucessivamente, como no caso atual era multiplicar o numero “Mágico” 19 por o numero de passos 76 que seria =1444, então agora é dividir por mil (no meu caso), depois de “meditar” muito, pensei, porque ter tanto trabalho (isso é se conseguisse) para dividir, se eu poderia só deslocar a virgula três casa pra esquerda?, dito e feito aí esta: 1,444, deu uma diferença de 5 centésimo mais baixo, isso não é nada .
Usei quase toda formula para extrair os und, dez, centena nessa nova.
Um registrador conta o números de passos (76) 19 vezes, cada vez que completa o numero (76), incrementa um contador até completar as 19 vezes, fácil.
OBS, só usei oito bit do A/D, pois o 74LS164 só possui 8 saída
Se alguém já tem essa formula, desculpe por ter dito aqui, ou se alguém tiver outra mais fácil que diga, vai as formulas a baixo 100+; um abraço; Juarez Bazzo NH-RS
;###### EXTRAIR AS CENT. DEZ. UNID. ############
;"GERAL" É O Nº INTEIRO QUE SE QUER EXTRAIR AS CENT. DEZ. UNID.
XXXX:
CLRF CENTENATER
CLRF DEZENATER
CLRF UNIDADETER
CLRF SOMATORIO
VOLTAINCTER:
MOVF SOMATORIO,W
SUBWF GERAL,W
BTFSS STATUS,Z ;SÃO IGUAIS?
GOTO INCMENTATER ;NÃO, INCREMENTA
CALL LERTABELA
RETURN
INCMENTATER:
INCF SOMATORIO
INCF UNIDADETER,F ;INCREMENTA
MOVLW .10
SUBWF UNIDADETER,W
BTFSS STATUS,Z
GOTO TERMOZINHO
CLRF UNIDADETER ;ZERA UNIDADE
INCF DEZENATER,F ;INCREMENTA
MOVLW .10
SUBWF DEZENATER,W
BTFSS STATUS,Z
GOTO TERMOZINHO
CLRF DEZENATER
INCF CENTENATER,F ;INCREMENTA
MOVLW .10
SUBWF CENTENATER,W
BTFSS STATUS,Z
GOTO TERMOZINHO
CLRF CENTENATER ;ZERA UNIDADE
TERMOZINHO:
GOTO VOLTAINCTER
;###############################################
;@@@@@@@@@@ TRANSFORMA O Nº DE PASSOS EM VALOR REAL DO ANALOGICO @@@@@@@@@@@@@@@@
;###############################################
LERTABELA:
CLRF CENTENA
CLRF DEZENA
CLRF UNIDADE
CLRF MILHAR
CLRF GERAL2
RERECONTA:
CLRF SOMATORIO2
VOLTAINCTER2:
MOVF SOMATORIO2,W
SUBWF GERAL,W ;SUBTRAI O VALOR DE W DO REG F
BTFSS STATUS,Z ;SÃO IGUAIS?
GOTO INCMENTATER2
GOTO RECONTA
INCMENTATER2:
INCF SOMATORIO2
INCF UNIDADE,F ;INCREMENTA UNIDADE
MOVLW .10
SUBWF UNIDADE,W
BTFSS STATUS,Z
GOTO TERMOZINHO2
CLRF UNIDADE ;ZERA UNIDADE
INCF DEZENA,F ;INCREMENTA DEZENA
MOVLW .10
SUBWF DEZENA,W
BTFSS STATUS,Z
GOTO TERMOZINHO2
CLRF DEZENA
INCF CENTENA,F ;INCREMENTA CENTENA
MOVLW .10
SUBWF CENTENA,W
BTFSS STATUS,Z
GOTO TERMOZINHO2
CLRF CENTENA ;ZERA CENTENA
INCF MILHAR,F ;INCREMENTA MILHAR
MOVLW .10
SUBWF MILHAR,W
BTFSS STATUS,Z
GOTO TERMOZINHO2
CLRF MILHAR ;ZERA MILHAR
TERMOZINHO2:
GOTO VOLTAINCTER2
RECONTA:
MOVLW .18 ;0,019*1000=19
SUBWF GERAL2,W
BTFSS STATUS,Z
GOTO SATURNO
RETURN
SATURNO:
INCF GERAL2,F
GOTO RERECONTA
Consegui fazer isso com quatro registradores, o primeiro incrementa até se igualar ao numero inteiro, os outro registradores também incrementam do modo padrão, com isso consegui extrair a unidade, dezena e centenas.
No meu caso, usei o A/D do PIC12F675 mostrando o resultado num LCD através de Shift Register Serie/Paralelo . 74LS164
Depois de quase “fundir” os poucos “Neurônios” tentando traduzir os números decimais (já extraídos ) ou seja 1,49 volts no pino analógico, já mostrava no LCD 76 (bits), 1,49x0,0196=76, só faltava transformar os “76” em 1,49 no visor, me veio a mente algo que tinha gravado em algum lugar uma formula de um colega (proex ) do fórum, ali dizia pra multiplicar o valor do passo (no caso, 0,019 arredondado) por 1000 que se tornaria =19, depois era multiplicado pelo números de passos, que no caso era “76” e depois dividir por 100.
Que sufoco, deslocar pra esquerda, depois pra direita os bit (multiplica e divisão no Pic), pra os novatos como eu é praticamente impossível de conseguir isso, pois quando estava quase conseguindo se perdia no emaranhado de contas, como no livro dizia que podia multiplicar fazendo soma sucessivamente, como no caso atual era multiplicar o numero “Mágico” 19 por o numero de passos 76 que seria =1444, então agora é dividir por mil (no meu caso), depois de “meditar” muito, pensei, porque ter tanto trabalho (isso é se conseguisse) para dividir, se eu poderia só deslocar a virgula três casa pra esquerda?, dito e feito aí esta: 1,444, deu uma diferença de 5 centésimo mais baixo, isso não é nada .
Usei quase toda formula para extrair os und, dez, centena nessa nova.
Um registrador conta o números de passos (76) 19 vezes, cada vez que completa o numero (76), incrementa um contador até completar as 19 vezes, fácil.
OBS, só usei oito bit do A/D, pois o 74LS164 só possui 8 saída
Se alguém já tem essa formula, desculpe por ter dito aqui, ou se alguém tiver outra mais fácil que diga, vai as formulas a baixo 100+; um abraço; Juarez Bazzo NH-RS
;###### EXTRAIR AS CENT. DEZ. UNID. ############
;"GERAL" É O Nº INTEIRO QUE SE QUER EXTRAIR AS CENT. DEZ. UNID.
XXXX:
CLRF CENTENATER
CLRF DEZENATER
CLRF UNIDADETER
CLRF SOMATORIO
VOLTAINCTER:
MOVF SOMATORIO,W
SUBWF GERAL,W
BTFSS STATUS,Z ;SÃO IGUAIS?
GOTO INCMENTATER ;NÃO, INCREMENTA
CALL LERTABELA
RETURN
INCMENTATER:
INCF SOMATORIO
INCF UNIDADETER,F ;INCREMENTA
MOVLW .10
SUBWF UNIDADETER,W
BTFSS STATUS,Z
GOTO TERMOZINHO
CLRF UNIDADETER ;ZERA UNIDADE
INCF DEZENATER,F ;INCREMENTA
MOVLW .10
SUBWF DEZENATER,W
BTFSS STATUS,Z
GOTO TERMOZINHO
CLRF DEZENATER
INCF CENTENATER,F ;INCREMENTA
MOVLW .10
SUBWF CENTENATER,W
BTFSS STATUS,Z
GOTO TERMOZINHO
CLRF CENTENATER ;ZERA UNIDADE
TERMOZINHO:
GOTO VOLTAINCTER
;###############################################
;@@@@@@@@@@ TRANSFORMA O Nº DE PASSOS EM VALOR REAL DO ANALOGICO @@@@@@@@@@@@@@@@
;###############################################
LERTABELA:
CLRF CENTENA
CLRF DEZENA
CLRF UNIDADE
CLRF MILHAR
CLRF GERAL2
RERECONTA:
CLRF SOMATORIO2
VOLTAINCTER2:
MOVF SOMATORIO2,W
SUBWF GERAL,W ;SUBTRAI O VALOR DE W DO REG F
BTFSS STATUS,Z ;SÃO IGUAIS?
GOTO INCMENTATER2
GOTO RECONTA
INCMENTATER2:
INCF SOMATORIO2
INCF UNIDADE,F ;INCREMENTA UNIDADE
MOVLW .10
SUBWF UNIDADE,W
BTFSS STATUS,Z
GOTO TERMOZINHO2
CLRF UNIDADE ;ZERA UNIDADE
INCF DEZENA,F ;INCREMENTA DEZENA
MOVLW .10
SUBWF DEZENA,W
BTFSS STATUS,Z
GOTO TERMOZINHO2
CLRF DEZENA
INCF CENTENA,F ;INCREMENTA CENTENA
MOVLW .10
SUBWF CENTENA,W
BTFSS STATUS,Z
GOTO TERMOZINHO2
CLRF CENTENA ;ZERA CENTENA
INCF MILHAR,F ;INCREMENTA MILHAR
MOVLW .10
SUBWF MILHAR,W
BTFSS STATUS,Z
GOTO TERMOZINHO2
CLRF MILHAR ;ZERA MILHAR
TERMOZINHO2:
GOTO VOLTAINCTER2
RECONTA:
MOVLW .18 ;0,019*1000=19
SUBWF GERAL2,W
BTFSS STATUS,Z
GOTO SATURNO
RETURN
SATURNO:
INCF GERAL2,F
GOTO RERECONTA