Como transformar oito variaveis bit em variavel tipo char.

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Como transformar oito variaveis bit em variavel tipo char.

Mensagempor Meson » 05 Jun 2009 23:04

como faço para acessar um determinado bit de uma variavel que ja declarei com sendo do tipo char e como posso manipular esses bits tipo

tenho essas variaveis

bit c1;
bit c2;
bit c3;
bit c4;
bit c5;
bit c6;
bit c7;
bit c8;

e gostaria de alojar esse byte na variável do tipo char que eu ja criei.

Alguem sabe como?

Obrigado.
Meson
Nibble
 
Mensagens: 54
Registrado em: 13 Out 2006 08:31

"

Mensagempor leoabubauru » 06 Jun 2009 18:13

Veja o exemplo abaixo:


Código: Selecionar todos
typedef union {
  byte Byte;
  struct {
    byte PTAD0       :1;                                       /* Port A Data Register Bit 0 */
    byte PTAD1       :1;                                       /* Port A Data Register Bit 1 */
    byte PTAD2       :1;                                       /* Port A Data Register Bit 2 */
    byte PTAD3       :1;                                       /* Port A Data Register Bit 3 */
    byte PTAD4       :1;                                       /* Port A Data Register Bit 4 */
    byte PTAD5       :1;                                       /* Port A Data Register Bit 5 */
    byte             :1;
    byte             :1;
  } Bits;
  struct {
    byte grpPTAD :6;
    byte         :1;
    byte         :1;
  } MergedBits;
} PTADSTR;
extern volatile PTADSTR _PTAD @0x00000000;
#define PTAD                            _PTAD.Byte
#define PTAD_PTAD0                      _PTAD.Bits.PTAD0
#define PTAD_PTAD1                      _PTAD.Bits.PTAD1
#define PTAD_PTAD2                      _PTAD.Bits.PTAD2
#define PTAD_PTAD3                      _PTAD.Bits.PTAD3
#define PTAD_PTAD4                      _PTAD.Bits.PTAD4
#define PTAD_PTAD5                      _PTAD.Bits.PTAD5
#define PTAD_PTAD                       _PTAD.MergedBits.grpPTAD



Ele foi extraido do fonte do CodeWarrior da Freescale.

Em sua aplicação você poderia referir-se a cada um dos bits da variável (PTAD_PTAD0, PTAD_PTAD1, etc ou _PTAD.Bits.PTAD0, _PTAD.Bits.PTAD1, etc) ou aos 8 bits de uma vez (PTAD ou _PTAD.Byte)

O byte com b minúsculo já foi devidamente definido antes deste código. Você pode substituir por char.
A Union faz com que os 8 bits da Struct sejam compartilhados pelo Byte. Neste caso um novo tipo de dado está sendo criado, mas poderia apenas ser uma declaração de uma única variável.

Se ainda não conhecia estes termos (Struct, Union e typedef), sugiro que dê uma estudada neles, pois são um poderoso recurso de C.



Espero ter ajudado.



Laercio[/quote]
Tento, tento e tento...
Me arrebento!
Também bato!
Ô negocim bunitim essa tal eletrônica de barco!
leoabubauru
Byte
 
Mensagens: 227
Registrado em: 21 Nov 2006 19:08
Localização: São Paulo

Mensagempor Francesco » 25 Jun 2009 13:15

Tem uma maneira mais simples...

Código: Selecionar todos
unsigned char dado ; // Este é seu byte.

dado  =   ( unsigned char )  c1           ;
dado |= ( ( unsigned char ) c2 ) << 1 ;
dado |= ( ( unsigned char ) c3 ) << 2 ;
dado |= ( ( unsigned char ) c4 ) << 3 ;
dado |= ( ( unsigned char ) c5 ) << 4 ;
dado |= ( ( unsigned char ) c6 ) << 5 ;
dado |= ( ( unsigned char ) c7 ) << 6 ;
dado |= ( ( unsigned char ) c8 ) << 7 ;
Avatar do usuário
Francesco
Word
 
Mensagens: 699
Registrado em: 04 Mar 2008 00:22
Localização: São Paulo - SP


Voltar para 8051

Quem está online

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

x