Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
50
Добавлен:
14.04.2015
Размер:
1.37 Mб
Скачать

212

Chapter 8. Library Reference

 

 

Absolute Memory Access Macros

The Cx51 standard library contains definitions for a number of macros that allow you to access explicit memory addresses. These macros are defined in ABSACC.H. Each of these macros is defined to be used like an array.

CBYTE

The CBYTE macro allows you to access individual bytes in the program memory of the 8051. You may use this macro in your programs as follows:

rval = CBYTE [0x0002];

to read the contents of the byte in program memory at address 0002h.

CWORD

The CWORD macro allows you to access individual words in the program memory of the 8051. You may use this macro in your programs as follows:

rval = CWORD [0x0002];

to read the contents of the word in program memory at address 0004h (2 × sizeof (unsigned int) = 4).

NOTE

The index used with this macro does not represent the memory address of the integer value. To obtain the memory address, you must multiply the index by the size of an integer (2 bytes).

8

C51 Compiler

213

 

 

DBYTE

The DBYTE macro allows you to access individual bytes in the internal data memory of the 8051. You may use this macro in your programs as follows:

rval = DBYTE [0x0002]; DBYTE [0x0002] = 5;

to read or write the contents of the byte in internal data memory at address 0002h.

DWORD

The DWORD macro allows you to access individual words in the internal data memory of the 8051. You may use this macro in your programs as follows:

rval = DWORD [0x0002]; DWORD [0x0002] = 57;

to read or write the contents of the word in internal data memory at address 0004h (2 × sizeof (unsigned int) = 4).

NOTE

The index used with this macro does not represent the memory address of the integer value. To obtain the memory address, you must multiply the index by the size of an integer (2 bytes).

8

214

Chapter 8. Library Reference

 

 

FARRAY, FCARRAY

The FARRAY and FCARRAY macros can be used to access an array of type object in the far and const far memory areas. FARRAY provides access to the far space (memory class HDATA). FCARRAY provides access to the const far space (memory class HCONST). You can use this macros in your programs as follows:

int i; long l;

l = FARRAY (long, 0x8000)[i];

FARRAY (long, 0x8000)[10] = 0x12345678;

#define DualPortRam FARRAY (int, 0x24000) DualPortRam [i] = 0x1234;

l = FCARRAY (long, 0x18000)[5];

The FARRAY and FCARRAY macros scales the index by the size of type object and adds the result to addr. The final address is then used to access the memory.

NOTE

The absolute addressed object cannot cross a 64KB segment boundary. For example, you cannot access a long array that has 10 elements and starts at address 0xFFF8.

8

C51 Compiler

215

 

 

FVAR, FCVAR,

The FVAR and FCVAR macro definitions may be used to access absolute memory addresses in the far and const far memory areas. FVAR provides access to the far space (memory class HDATA). FCVAR provides access to the const far space (memory class HCONST). You can use these macros in your programs as follows:

#define IOVAL FVAR (long, 0x14FFE)

// long at HDATA address 0x14FFE

 

var = IOVAL;

/* read

*/

 

IOVAL = 0x10;

/* write */

 

var = FCVAR (int, 0x24002)

/* read int from HCONST address 0x24002

*/

The HVAR macro uses the huge modifier to access the memory by segment and offset, as opposed to MVAR’s page and offset.

NOTE

The absolute addressed object cannot cross a 64KB segment boundary. For example, you cannot access a long variable at address 0xFFFE.

8

Соседние файлы в папке HLP