Página 1 de 1

Ler parte da variável

MensagemEnviado: 15 Mai 2007 23:54
por phophollety
Olá pessoal, se puderem dar uma força aqui:

Assembly!

tenho as seguintes variáveis:

X
X1
X2
X3

A váriavel X está sendo tratada como uma decinal e tem dentro dela um valor qualquer por exemplo 215

Eu preciso jogar cada algarismo e uma varíavel auxiliar, por exemplo, o "2" no X1, o "1' no X2 e assim por diante

Sei que para testar um bit em binário dá para fazer assim:
se eu tenho a varíavel A com o valor 1010 dentro posso fazer assim:

BTFSS X,3

Então pensei em fazer o mesmo com o a minha variável X

MOVLW X , 0
MOVWF X1

MOVLW X , 1
MOVWF X2

MOVLW X , 2
MOVWF X3

Só que não funfa!

Essa variável X é o valor do display, depois eu jogo numa tabela de dados e cada X vem com um dígito, depois faço o mux do display!

Valeu pessoal!

MensagemEnviado: 16 Mai 2007 02:59
por hermes
Olá,

No livro Técnicas avançadas do Fábio Pereira tem esta rotina que vc precisa, inclusive o inverso tb, além de mtas outras!
Uma ótima ferramenta!
No site da editora tem o código fonte pra download se nao me engano.

[]'s

MensagemEnviado: 16 Mai 2007 08:02
por fabim
Então pensei em fazer o mesmo com o a minha variável X

MOVLW X , 0
MOVWF X1

MOVLW X , 1
MOVWF X2

MOVLW X , 2
MOVWF X3
.........................................................................................
EM assembly.

movlw X ==== eu guardar em W o endereço que x ocupa na ram.

movfw X
ou
movf x,w === eu pegar o valor da variavel X e colocar no w.
...........................................................................................

MOVFW X
MOVWF XA

MOVFW X1
MOVWF X1B

MOVFW X2
MOVWF X2B


experimenta assim. mais com moderação.rs


Fabim

MensagemEnviado: 16 Mai 2007 08:41
por dreher
Para fazer isso que voce quer fazer, eu sempre utilizei a seguinte tecnica:

primeiro eu faço um loop, decrementando 100 da variável, cada decremento que resulta em numero positivo, eu incremento 1 na centena. se o resultado for negativo, status,c = 1, quer dizer que cheguei em um numero menor que a centena. depois eu reduzo a centena da variavel original. o resultado eu vou reduzindo 10, para incrementar a dezena, e faço o mesmo processo para a unidade. Infelizmente troquei de micro recentemente e não tive tempo ainda de restaurar os meus backups, mas vou procurar e posto aqui uma rotina que faça isso.

MensagemEnviado: 16 Mai 2007 08:43
por zielpunkt
Tem que converter de binário pra bcd-3 digitos (centena, dezena e unidade). No Piclist tem umas rotinas em asm prontas pra isso, ok. Dá uma olhada ali: http://www.piclist.com/techref/microchip/math/radix/b2bhp-8b3d.htm. O valor a converter vai em "bin" e retorna em "hundreds", "tens" e "ones".



É isso.