在
iom16.h中定义了
PORTA如下:
如果编译器( _SFR_ASM_COMPAT等于1)可以直接使用汇编、那么像 PORTA这样的变量,就是一个地址值。
#define PORTA _SFR_IO8(0x1B)
接着在sfr_defs.h中定义了_SFR_IO8()如下:
#if _SFR_ASM_COMPAT
......
#define _SFR_IO8(io_addr) ((io_addr) + __SFR_OFFSET)
#define _SFR_IO16(io_addr) ((io_addr) + __SFR_OFFSET)
......
#else /* !_SFR_ASM_COMPAT */
......
#define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET)
#define _SFR_IO16(io_addr) _MMIO_WORD((io_addr) + __SFR_OFFSET)
......
#endif /* !_SFR_ASM_COMPAT */
这个定义表示:
如果编译器( _SFR_ASM_COMPAT等于1)可以直接使用汇编、那么像 PORTA这样的变量,就是一个地址值。
此时、__SFR_OFFSET是IO寄存器的基地址,其值等于0x00,所以PORTA展开如下:
#define PORTA _SFR_IO8(0x1B