DCNunes
General de Pijama
Registrado
1.8K Mensagens
404 Curtidas
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
Veterano
Registrado
1.2K Mensagens
40 Curtidas
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
Tô em todas
Registrado
1.8K Mensagens
41 Curtidas
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.