Ler parte da variável

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Ler parte da variável

Mensagempor phophollety » 15 Mai 2007 23:54

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!
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor hermes » 16 Mai 2007 02:59

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
hermes
Bit
 
Mensagens: 18
Registrado em: 21 Abr 2007 22:46

Mensagempor fabim » 16 Mai 2007 08:02

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
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor dreher » 16 Mai 2007 08:41

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.
dreher
Byte
 
Mensagens: 489
Registrado em: 12 Out 2006 11:10
Localização: Blumenau - SC

Mensagempor zielpunkt » 16 Mai 2007 08:43

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.
"Talento é mais barato que sal. O que separa a pessoa talentosa da bem-sucedida é muito trabalho duro." [ Stephen King ]
zielpunkt
Byte
 
Mensagens: 376
Registrado em: 12 Out 2006 11:36
Localização: Sao Paulo - SP


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x