Contenido>Indice>Intro CursoC51

UNIONES


Una unión es un concepto similar al de una estructura salvo que en lugar de utilizar posiciones consecutivas de memoria para los distintos elementos de la estructura, los elementos de la unión ocupan las mismas direcciones de memoria. Así una unión de 4 bytes sólo ocupa un byte. Una unión puede estar formada por un long, un char y un int. En este caso el número de bytes de RAM utilizados por la unión viene determinado por el tamaño del elemento más grande (el long). En el siguiente ejemplo:

union test { char x ;
             int y  ;
             char a[3] ;
             long z ; 
} ;

la unión requiere 4 bytes. La ubicación de cada elemento es:

dirección   0   x byte  y byte alto  a[0]  z byte más alto
           +1           y byte bajo  a[1]  z byte
           +2                        a[2]  z byte
           +3                              z byte más bajo

Recordemos que el 8051 coloca el byte más significativo de un objeto en la dirección  de memoria más baja.

En las aplicaciones con el 8051, las uniones se utilizan frecuentemente para acceder a los diferentes bytes de un int o un long, como en el siguiente ejemplo:

/* Declaración de la unión clock */

union clock {long real_time_count ; // Reservar 4 bytes
    int real_time_words[2] ;        // array de 2 int
    char real_time_bytes[4] ;       // array de 4 char 
      } ;

/* Real Time Interrupt */

void timer0_int(void) interrupt 1 using 1 {

    clock.real_time_count++ ;       // Incrementar clock
   
    if(clock.real_time_words[1] == 0x8000) { // Comprobar
                    // si el word bajo es 0x8000

    /* Hacer algo! */
    }

    if(clock.real_time_bytes[3] == 0x80) {  // Comprobar 
                   // si el byte bajo es 0x80
  
    /* Hacer algo! */
    }
      
    }
  

   Contenido>Indice>Intro CursoC51