TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Davidquiv en 01 de Septiembre de 2015, 15:50:47

Título: Como manejar bit's en CCS
Publicado por: Davidquiv en 01 de Septiembre de 2015, 15:50:47
Tengo una duda de como manejar los datos en un byte ya que necesito saber los primeros 7 bits de un byte pero no se como trabajarlo lo venia trabajando por una structura pero quisiera saber si hay otra forma
esto es lo que venia manejando

struct   Datos_byte
   {
      unsigned instruccion : 7;  //Instruccion de 7 bits
      unsigned RoW         : 1;  //Lectura=0 o escritura=1
   }Data , Direccion;
Nota: no se si es la forma correcta
Título: Re: Como manejar bit's en CCS
Publicado por: juaperser1 en 01 de Septiembre de 2015, 15:58:32
Hola David, no te he entendido muy bien, ni tampoco se que quieres hacer con la estructura.

¿ lo que intentas saber es cuales son los primeros 7 bits  de los 8 de un byte? Y que deseas hacer hacer con esos 7 bits guardarlos como un único numero? O saber cuales son uno a uno?

Explica tu problema un poco mejor, si es algo parecido a lo que te he dicho arriba la estructura no te hace falta.

Un saludo
Título: Re: Como manejar bit's en CCS
Publicado por: Davidquiv en 01 de Septiembre de 2015, 16:18:11
si, me llega un dato de un byte y necesito saber como acceder unicamente a los 7 primeros bits para compararlos
Título: Re: Como manejar bit's en CCS
Publicado por: Davidquiv en 01 de Septiembre de 2015, 16:23:06
Es lo que trato de hacer:

struct   Datos_byte
   {
      unsigned instruccion : 7;  //Instruccion de 7 bits
      unsigned RoW         : 1;  //Lectura=0 o escritura=1
   }Data , Direccion;

void main()
{
   char caso;
   write_program_eeprom(0x1FF,0x00);               //limpia la direccion de memoria
   Data = 0x01;                               //inserta "1" en data para que se cumpla la condicion en el siguiente for
   for(int i=0;i<30||Data.RoW>0;i++)         //Retardo de 30 segundos para la modificacion de la direccion
      {
       
       if(kbhit()==1)
         {
         Data = getchar();
         }
           
         if(Data.RoW==1)                        //Pregunta si es de Escritura
            {
            Data.RoW = 0;
            unsigned direc;
            //Resetea el valor a lectura
            write_program_eeprom(addres,direc);         //Asigna la instruccion como nueva direccion   
            }
           
          delay_ms(1000);                     //Retardo de 1 segundo
      }

Honestamente no se nada sobre pic habia venido trabajando con puros MSP430 y me esta costando cambiarme de MCU
Título: Re: Como manejar bit's en CCS
Publicado por: allennet en 01 de Septiembre de 2015, 16:37:33
segun entiendo lo que deseas, se hace con una mascara
int dato;
dato=255;
dato =dato & 0b01111111; //ahora dato es igual a 127 los primeros 7 bits

Título: Re: Como manejar bit's en CCS
Publicado por: allennet en 01 de Septiembre de 2015, 16:40:19
si deseas leer retornando como valor es

bit_test(dato,bit)
devuelve V si el bit es 1 o F si es 0