TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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
-
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
-
si, me llega un dato de un byte y necesito saber como acceder unicamente a los 7 primeros bits para compararlos
-
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
-
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
-
si deseas leer retornando como valor es
bit_test(dato,bit)
devuelve V si el bit es 1 o F si es 0