long char para 4 char

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

long char para 4 char

Mensagempor rebelk » 10 Nov 2007 12:03

nos pics para ler um byte de uma variavel int16 ou int32 ultiliza a função DADO_0=MAKE8 ( A,1);.

alguem poderiam me indicar umas funções que ler byte de uma variavel de 16 e 32 bits , e que tranforme dois char em um int , e quatro char em um int32 ( long int ).

em c keil!
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor henriquethiesen » 10 Nov 2007 19:24

As funções não estão prontas mas a idéia de como separar e unir bytes segue abaixo, testado no keil.

typedef union
{
long i;
char byte[4];
}u_long;


char LongToChar(long *ptr, char Nbyte)
{
return *((unsigned char*)ptr + Nbyte-1);
}

void main()
{
char Byte1;
char Byte2;
char Byte3;
char Byte4;

u_long Teste;

long Value = 0x12345678;

// convertendo de Long para char
Byte1 = LongToChar(&Value, 1); // Byte1 = 0x12
Byte2 = LongToChar(&Value, 2); // Byte2 = 0x34
Byte3 = LongToChar(&Value, 3); // Byte3 = 0x56
Byte4 = LongToChar(&Value, 4); // Byte4 = 0x78

// convertendo de char para long
Teste.byte[0] = Byte1;
Teste.byte[1] = Byte2;
Teste.byte[2] = Byte3;
Teste.byte[3] = Byte4;
// Agora Teste.i contém 0x12345678
Value = Teste.i;
}
henriquethiesen
Nibble
 
Mensagens: 50
Registrado em: 12 Out 2006 14:10

Mensagempor ze » 12 Nov 2007 06:40

2 char em um int não é só fazer (int)MSB*256+LSB?
com o pic já fiz o resultado do ad em int: ADRESH*256+ADRESL. (funcionou)
não se pode usar o mesmo princípio para o long? (vou testar)
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor rebelk » 01 Dez 2007 23:07

VALEU A TODOS DEU CERTO
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16


Voltar para 8051

Quem está online

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

cron

x