manipulação de bits

3
Instituto Federal de Educação, Ciência e Tecnologia de Sergipe Curso de Eletrônica Disciplina: Sistemas Programáveis Professor: Fábio Prudente Manipulação de Bits Na programação de microcontroladores, é muito frequente a necessidade de controlar o valor de apenas alguns bits, dentro de um byte, deixando os demais bits intactos. A linguagem C possui alguns recursos para esse fim. Vamos estudar alguns deles aqui: Máscara de Bits: Observe as propriedades lógicas abaixo: Leva a zero →Mantém →Mantém Leva a um →Mantém Inverte Perceba que, para cada par de operações, sempre há um valor que modifica o valor de X (Leva a zero, Leva a um, ou inverte), e outro que mantém o valor de X. Assim, sempre que quisermos aplicar uma dessas ações sobre alguns bits, preservando os demais, usaremos os operadores lógicos, da seguinte forma: Ex 1: deseja-se levar a zero os bits 5, 3 e 2 de um registrador, preservando o valor dos demais bits. Solução: realizar a operação AND bit-a-bit entre o registrador e uma máscara de bits, a qual contém 0 nos lugares que se deseja zerar: Código C: registrador = registrador & 0b11010011; ou

Upload: andcruz

Post on 29-Sep-2015

2 views

Category:

Documents


0 download

DESCRIPTION

Manipulação de bits em C

TRANSCRIPT

  • Instituto Federal de Educao, Cincia e Tecnologia de SergipeCurso de EletrnicaDisciplina: Sistemas ProgramveisProfessor: Fbio Prudente

    Manipulao de BitsNa programao de microcontroladores, muito frequente a necessidade de controlar o valor de apenas alguns bits, dentro de um byte, deixando os demais bits intactos. A linguagem C possui alguns recursos para esse fim. Vamos estudar alguns deles aqui:

    Mscara de Bits: Observe as propriedades lgicas abaixo:

    Leva a zeroMantm

    MantmLeva a um

    MantmInverte

    Perceba que, para cada par de operaes, sempre h um valor que modifica o valor de X (Leva a zero, Leva a um, ou inverte), e outro que mantm o valor de X. Assim, sempre que quisermos aplicar uma dessas aes sobre alguns bits, preservando os demais, usaremos os operadores lgicos, da seguinte forma: Ex 1: deseja-se levar a zero os bits 5, 3 e 2 de um registrador, preservando o valor dos demais bits. Soluo: realizar a operao AND bit-a-bit entre o registrador e uma mscara de bits, a qual contm 0 nos lugares que se deseja zerar:

    Cdigo C:registrador = registrador & 0b11010011;

    ou

  • registrador &= 0b11010011;

    Ex 2: deseja-se levar a um os bits 7, 6, 3 e 0 de um registrador, preservando o valor dos demais bits. Soluo: realizar a operao OR bit-a-bit entre o registrador e uma mscara de bits, a qual contm 1 nos lugares que se deseja levar a um:

    Cdigo C:registrador = registrador | 0b11001001;

    ouregistrador |= 0b11001001;

    Ex 3: deseja-se inverter os bits 4 e 3 de um registrador, preservando o valor dos demais bits. Soluo: realizar a operao XOR bit-a-bit entre o registrador e uma mscara de bits, a qual contm 1 nos lugares que se deseja inverter:

    Cdigo C:registrador = registrador ^ 0b00011000;

    ouregistrador |= 0b00011000;

    Mais exemplos:

    Testar apenas um bit, ignorando todos os demais:Ex: deseja-se testar apenas o bit 5 de um registrador:Soluo: zerar todos os outros bits, mantendo somente o que voc quer testar:if (registrador & 0b00100000) {...}

    Indexar um bit, dentro de um registrador:

    Ex: deseja-se aplicar o mesmo teste a cada um dos 8 bits de um registrador, individualmente:Soluo: definir a mscara como uma varivel, dentro de um for e deslocar a mscara bit a bit:

  • for (unsigned char mascara = 0x01; mascara !=0; mascara