32 BITS to HEX.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

32 BITS to HEX.

Mensagempor fabim » 19 Mar 2009 18:47

alguem aí me ajeita uma rotininha simprinha ?
No meu caso long.. para 10 bytes.
0x + (8 char´s)

tentei fazer, mais não sei se é a porqueira do compilador ou a porqueira do programador.

fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor tcpipchip » 19 Mar 2009 19:06

Divisoes sucessivas por 16 ate atingir 0.
Pegue os restos, use potencia base 16 somando...
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor fabim » 19 Mar 2009 20:00

tcpipchip escreveu:Divisoes sucessivas por 16 ate atingir 0.
Pegue os restos, use potencia base 16 somando...


Rapaz você chutou o pau da barraca eim ?
Eu ja peguei separei os nibles, 8 nibles em 8 bytes.
Se <=9 soma 0x30, se >=10 <=15 soma-se 0x41.

Só que eu acho que a porqueira do ponteiro para pic16f no mikroC não funca muito bem!!

Ele devolve valores loucos..
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor guest2003 » 19 Mar 2009 22:16

Talvez algo assim Fabim

Código: Selecionar todos

u32 Numero;
u8 BIN2HEX[16] = { '0','1','2', .... ,'D','E','F' };
u8 Saida[8];

for (i=0;i<8;i++)
{
    Saida[ i ] = BIN2HEX [ (u8) Numero & 0x0F ];
    Numero>>=4;
}



Da uma olhada qquer coisa avisa...

[]'s
http://www.sethi.com.br (Institucional)
http://www.sethi3d.com.br (Impressoras 3d)
http://www.sethi.com.br/blog (Blog Impressoras 3d)
Avatar do usuário
guest2003
Word
 
Mensagens: 746
Registrado em: 13 Out 2006 11:48
Localização: Campinas - SP

Mensagempor guest2003 » 19 Mar 2009 22:23

ops... talvez nao fique claro...

u32 = unsigned long
u8 = unsigned char

numero>>=4 é o mesmo que numero = numero >> 4
Roda a variavel numero 4 vezes para a direita.

(u8)blalba é um cast ... operacao que informa para o compilador que voce esta fazendo uma operacao com 32bits (neste caso) e sabe que esta convertendo para 8 bits (no caso da matriz) para o compilador nao reclamar

[]'s

PS: talvez usar um const antes de definir o array... para ficar em ROM e nao em RAM
const u8 BIN2HEX ...blablabla ao inves de u8 BIN2HEX...
Da uma olhada como definir isso no seu compilador.
http://www.sethi.com.br (Institucional)
http://www.sethi3d.com.br (Impressoras 3d)
http://www.sethi.com.br/blog (Blog Impressoras 3d)
Avatar do usuário
guest2003
Word
 
Mensagens: 746
Registrado em: 13 Out 2006 11:48
Localização: Campinas - SP

Mensagempor fabim » 19 Mar 2009 23:03

guest2003 escreveu:Talvez algo assim Fabim

Código: Selecionar todos

u32 Numero;
u8 BIN2HEX[16] = { '0','1','2', .... ,'D','E','F' };
u8 Saida[8];

for (i=0;i<8;i++)
{
    Saida[ i ] = BIN2HEX [ (u8) Numero & 0x0F ];
    Numero>>=4;
}



Da uma olhada qquer coisa avisa...

[]'s


tendeu sim sinho, mais tem que preencher o bufer ao contrário, sinão fica big endian hex...rsrsr

vlw, vai dar certim.. :) :twisted:
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor guest2003 » 19 Mar 2009 23:13

o big ou little endian era so pra ver se voce estava prestando atenção

hheheheheeh

[]'s

PS: Preciso trocar umas ideias com vc no MSN ! ve se aparece amanha :)
http://www.sethi.com.br (Institucional)
http://www.sethi3d.com.br (Impressoras 3d)
http://www.sethi.com.br/blog (Blog Impressoras 3d)
Avatar do usuário
guest2003
Word
 
Mensagens: 746
Registrado em: 13 Out 2006 11:48
Localização: Campinas - SP

Mensagempor barboza » 20 Mar 2009 00:46

Talvez esse post ajude mais um pouco.

http://www.asm51.eng.br/phpbb/viewtopic ... highlight=
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor fabim » 20 Mar 2009 09:56

long data2;
unsigned char dados_hex[8];

//*********************** pega hex de uma long******************
void pegahex(short *varlong, short *arraybytes){
short num = 4, temp=0;

arraybytes += 7;
while(num){
temp = *varlong;
temp &= 0x0f;
if(temp<=9)
temp += '0';
else
temp += 'A';
*arraybytes = temp;
arraybytes--;
temp = *varlong;
temp = (temp >> 4) & 0x0f;
if(temp<=9)
temp += '0';
else
temp += 'A';
*arraybytes = temp;
arraybytes--;
varlong++;
num--;
}
}

pegahex(&data2, &dados_hex[0]);

poisé, o mikroC esta invertendo as bolas...
* como valor
e ponteiro como endereço.
mas mesmo assim essa rotina aí não ta funcando, ele ultrapassa o F nossa saco viu..
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor fabim » 20 Mar 2009 13:04

nossa sardadi do PASCAL...

unsigned char dados_hex2[9];

//*********************** pega hex de uma long******************
void pegahex(unsigned short *varlong, char *arraybytes){
unsigned short num = 4, temp=0;

arraybytes = arraybytes + 8;
*arraybytes = '\0';// o maledito que estava socando char´s no display
arraybytes--;
while(num){
temp = *varlong;
temp &= 0x0f;
if(temp<=9)
temp = temp + '0';
else
temp = temp + ('A'-10);
*arraybytes = temp;
arraybytes--;
temp = *varlong;
temp = (temp >> 4) & 0x0f;
if(temp<=9)
temp = temp + '0';
else
temp = temp + ('A'-10);
*arraybytes = temp;
arraybytes--;
varlong++;
num--;
}
}
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?


Voltar para PIC

Quem está online

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

cron

x