Contenido>Indice>Intro CursoC51

INTRODUCCIÓN


Con frecuencia se añaden puertos de IO al 8051 para compensar la pérdida de los puertos P0 y P2 que se produce al aumentar la memoria del µC. Habitualmente se dispone el hardware de forma que los puertos adicionales aparezcan como bytes de RAM externa, que pueden leerse y escribirse con instrucciones MOVX. Se dice que dispositivos externos se encuentran mapeados en memoria, cuando se accede a los mismos en la forma descrita. Es muy común mapear en memoria xdata del 8051 dispositivos tales como: UARTS, puertos de IO, o chips de reloj en tiempo real.

La forma más sencilla de conseguirlo es uniendo las líneas /RD y/o /WR al dispositivo. Suponiendo que solo haya un dispositivo, no es necesario recurrir a un decodificador de direcciones. Para acceder al dispositivo desde C, basta con declarar la variable de acceso al dispositivo con la palabra xdata. Así el compilador utilizará las instrucciones MOVX A,@DPTR y MOVX @DPTR,A para leer y escribir en él. El linker tratará de asignar una ubicación a la variable, pero como no existe ningún decodificador, el dispositivo será habilitado con las señales /RD o /WR.

En la realidad este caso tan sencillo se presenta rara vez. Lo típico es encontrarse con una mezcla de RAM, UARTs, puertos, EEPROM y otros dispositivos, mapeados en el espacio xdata del 8051. En estos casos se utiliza lógica (decodificador o una PAL) para regular el acceso a los periféricos.

En esta situación, cada dispositivo aparece en unas posiciones fijas del espacio xdata. Lo ideal sería poder referirse a estos dispositivos por su nombre, al igual que se hace con los periféricos internos del 8051. Hay tres formas diferentes de lograrlo:

  1. Usar variables normales, char, int, etc, ubicadas apropiadamente por el linker
  2. Usar apuntadores y desplazamientos, con macros XBYTE, o directamente con apuntadores definidos por el usuario.
  3. Usar las directiva _at_ y _ORDER.

Las siguientes secciones tratan detalladamente estas alternativas. 


   Contenido>Indice>Intro CursoC51