Logo Hardware.com.br
intruso
intruso Tô em todas Registrado
1.8K Mensagens 41 Curtidas

Imprimir dígitos de um numero em assembly

#1 Por intruso 06/11/2007 - 17:21
Olá senhores, eu estou programando um PIC18F877A de 8 bits e tenho um número de 32 bits que é representado por 4 variaveis de 8 bits.

Ai, eu queria imprimir os dígitos (em decimal) desse número em um display de 16x2.

Ou seja, esse número é binário e não posso mandar imprimir ele todo de uma vez, então, eu preciso pegar cada dígito dele em um registrador de 8 bits e mandar imprimir do display.

Eu até sei que dá pra fazer pelo algoritmo das divisões suscessivas, mas, esse PIC não tem a instrução de divisão e muito menos divisão de 32 bits, logo, eu teria de implementar tudo.

Alguém sabe de alguma outra idéia para fazer isso?

abraço.
DCNunes
DCNunes General de Pijama Registrado
1.8K Mensagens 404 Curtidas
#2 Por DCNunes
06/11/2007 - 19:03
intruso, nunca programei esse PIC então não sei se a minha dica vai servir.

Se você puder usar um vetor de 10 elementos (suficiente para um inteiro sem sinal) você representaria o número a ser impresso nele. Cada elemento do vetor seria um dígito e você montaria o resultado analisando suas variáveis bit a bit, entendendo esse número como um somatório de potências de 2. A soma seria feita dígito por dígito, como nós humanos fazemos no papel.

Por exemplo, se minha variável fosse de 8 bits, eu poderia representar os números de 0 a 255. O meu vetor para compor o resultado teria 3 elementos e seria iniciado com zeros.

Supondo que eu tivesse o número 1000 0101 na variável, que vale 128 + 4 + 1 = 133:
A partir do bit mais significativo da minha variável, começaria a somar:
- se o bit 7 (o mais significativo) valer 1 (e nesse exemplo vale), então somo 1 no primeiro elemento do resultado, 2 no segundo e 8 no terceiro;
- se o bit 6 valer 1 (nesse exemplo não vale), somo 6 no segundo elemento e 4 no terceiro, verificando depois se a soma ultrapassou 10 (o "vai 1");
e assim por diante...

Foi o que consegui pensar...Esse processador parece bem limitado.
mcv
mcv Veterano Registrado
1.2K Mensagens 40 Curtidas
#3 Por mcv
07/11/2007 - 02:27
Consegui bolar este algoritmo, como não conheço as instruções PIC fazer em assembly só iria dificultar a leitura, então fiz em C, tá facinho de entender.


[php]

int main(void)
{
int a = 9129;

int b[20] = {0};

int i, tmp;

b[0] = a;

for( i = 0; b[i]; i++ ){

tmp = b[i];
while(tmp >= 0){
tmp = b[i] - 10;
if(tmp >= 0){
b[i+1] = b[i+1] + 1;
b[i] = b[i] - 10;
}
}
}

printf("%d %d %d %d\n", b[3], b[2], b[1], b[0]);


return 0;
}
[/php]Se precisar de ajuda com o assembly posta aí.



_
intruso
intruso Tô em todas Registrado
1.8K Mensagens 41 Curtidas
#4 Por intruso
07/11/2007 - 15:01
Obrigado a todos, acho que vou tentar implementar a idéia do IronManDCN, por questões de limitação.

A idéia do mvc é boa, porém, meu maior problema esta em acessar os valores do binário, pois o meu int não cabe em um único registrador, então tenho que trabalhar por partes (estou usando 4 variáveis de 8 bits) para representar o meu int de 32 bits, assim não tem como simplesmente subtrair as potências de 10 do valor original, eu teria de implementar a subtração de 32 bits, pois este modelo de PIC so trabalha com 8 bits.

Eu tenho algo assim em C:

char inteiro_a;
char inteiro_b;
char inteiro_c;
char inteiro_d;


onde cada variável do tipo char tem 8 bits, e as quatro juntas representam meu número inteiro de 32 bits. Como este PIC só fornece soma e subtração de 8 bits, eu tenho de implementar o restante.

obrigado a todos pela ajuda, vou tentar algo e se der certo eu posto aqui :-)

abraço.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal