Duvida em C no Keil

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Duvida em C no Keil

Mensagempor fmaesso » 02 Jan 2008 13:46

Olá a todos!
Tenho um variavel int, mas só preciso usar a parte baixa da variavel. Como
indico para o Keil para pegar apenas o byte menos significativo de um valor
inteiro?

x = 0x0123;

preciso apenas do 0x23.



Obrigado!

Fernando Maesso
fmaesso
Bit
 
Mensagens: 17
Registrado em: 16 Nov 2006 17:21

Mensagempor Iran » 02 Jan 2008 14:06

Sei não mas,

low(variavel) não resolve?
Avatar do usuário
Iran
Word
 
Mensagens: 558
Registrado em: 16 Out 2006 18:10
Localização: Imperatriz - MA

Mensagempor andre_luis » 02 Jan 2008 16:31

Filtrando, com mascara,

Código: Selecionar todos
x  &=  0x0FF ;


ou viajando no casting,


Código: Selecionar todos
x = (char)x  ;     // nao sei se funciona, mas tenta
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor veioloko » 03 Jan 2008 06:46

Eu uso a AND ja citada
Código: Selecionar todos
x  &=  0x0FF ;
veioloko
Byte
 
Mensagens: 348
Registrado em: 10 Nov 2006 06:01
Localização: São Bernardo do Campo

Mensagempor Maurício » 03 Jan 2008 18:59

Eu uso este:

Código: Selecionar todos
int x;
unsigned char y;
char t;

    x = 1023;
    y = x;  //Pega a parte baixa do INT e atribui a Y sem sinal.
               // Y = 0xFF; 255D;

    x = 0x83FE;  // decimal -31746
    y = x;          // 0xFE = 254 ==> parte sem sinal de x

    t = x;    // parte com sinal de x => 0xFE = -2 decimal.


Dá pra fazer através de UNION, tb.
Têm vários métodos!

[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor quique » 14 Jan 2008 16:27

Olá,

Para pegar a parte menos signficativa eu pego o módulo da divisão por 0x100 :

Código: Selecionar todos
unsigned int  Inteiro;
unsigned char Alta,Baixa;

Inteiro = 0x1234;
Alta    = Inteiro / 0x100;    // Faz a variavel Alta ficar com 0x12
Baixa   = Inteiro % 0x100;    // Faz a variável baixa ficar com 0x34


Abraço
quique
Bit
 
Mensagens: 16
Registrado em: 16 Out 2006 08:47

Mensagempor edusoppa » 17 Jan 2008 12:22

Eu faço assim, uso deslocamento de bits.

x=0x0123;
y=x<<8;
x=y>>8;

Eduardo.
edusoppa
Nibble
 
Mensagens: 55
Registrado em: 23 Out 2006 15:55

Mensagempor edusoppa » 17 Jan 2008 12:27

Melhorando um pouquinho.

#include<regx52.h>

void main()
{
int xxxx;
char tttt;

xxxx=0x0123;

tttt=(xxxx<<8)>>8;
}
edusoppa
Nibble
 
Mensagens: 55
Registrado em: 23 Out 2006 15:55

Mensagempor edusoppa » 17 Jan 2008 12:29

fera

Melhorando um pouquinho.

#include<regx52.h>

void main()
{
int xxxx;
char tttt;

xxxx=0x0123;

tttt=(xxxx << 8 ) >>8;

}
edusoppa
Nibble
 
Mensagens: 55
Registrado em: 23 Out 2006 15:55

Mensagempor B-EAGLE » 18 Jan 2008 11:05

fazer o AND com 0xFF acredito que é a forma mais rápida aí, só uma instrução.
B-EAGLE
Word
 
Mensagens: 847
Registrado em: 19 Out 2006 14:12
Localização: Campo Grande - MS


Voltar para 8051

Quem está online

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

x