Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

18/05/2011 #1


Variable de 32 bits
Hola:
Para un programa necesitaría declarar una variable como 32 bits (int32), pero luego necesito poder acceder a cada byte de esa variable, no se si me explico bien. Utilizo el CCS.

Por ejemplo declaro una variable: int32 leds;

pero luego poder acceder al primer byte con leds1, al segundo byte con leds2, etc....
¿Alguien me puede dar una pista? Gracias

Yo mismo me respondo, que ya lo he logrado:

int32 leds;
#locate leds=0x50
#byte leds1=0x50
#byte leds2=0x51
#byte leds3=0x52

Era más fácil de lo que pensaba.
Saludos
18/05/2011 #2


es mas facil con punteros, ademas no te hara falta declarar las variables en una localizacion de memoria. Seria:

int32 leds;

char *leds1, *leds2, *leds3;

leds1=&leds;
leds2=&leds+1;
leds3=&leds+2;

hay mas soluciones con punteros pero bueno
18/05/2011 #3

Avatar de Eduardo

Para eso el standard de C tiene la declaración union

// Declaracion de las variables

union { int32 l32 ; struct {int8 g0,g1,g2,g3;} l8 ;} led ;

// Sintaxis

led.l32 = 0x12345678 ;

led.l8.g0 = 0x78 ;
led.l8.g1 = 0x56 ;
led.l8.g2 = 0x34 ;
led.l8.g3 = 0x12 ;


La verdad... es que no se gana. Solamente que se usa la declaracion especifica para estos casos.
19/05/2011 #4


MerLiNz dijo: Ver Mensaje
es mas facil con punteros, ademas no te hara falta declarar las variables en una localizacion de memoria. Seria:

int32 leds;

char *leds1, *leds2, *leds3;

leds1=&leds;
leds2=&leds+1;
leds3=&leds+2;

hay mas soluciones con punteros pero bueno

¿Por qué declaras las variables leds1, leds2... como char?
¿No vale simplemente como int?
Muchas gracias a todos. Siempre se aprende algo

PD: lo estoy intentado simular y no me funciona.
19/05/2011 #5


es que yo vengo del mikroc y ahi no existen los int8 ni nada asi por eso puse char que en todos los compiladores que he visto valen 8bits.

Quiza no te funciona porque con los punteros para ver su contenido hay que poner un * delante, por ejemplo:

PORTD=*leds1;

si pones PORTD=leds1; estarias poniendo en portd la direccion de memoria de leds1.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.