2.4 存储器结构和地址空间
2.4.1 支持ISP的Flash程序存储器
AVR单片机包括1K~128KB的片内支持ISP的Flash程序存储器。由于AVR单片机所有指令为16位字或32位双字,故Flash程序存储器的结构为(512~64KB)×16位。Flash存储器的使用寿命最少为1万次写/擦循环。ATmega16单片机的程序存储器为8KB×16(16KB×8),程序计数器PC宽为13位,以此来对8K字程序存储器地址进行寻址。
程序存储器的地址空间与数据存储器的地址空间是分开的,地址空间从$000开始。如要在程序存储器中使用常量表,则常量表可以被设定在整个Flash地址空间中。
2.4.2 SRAM数据存储器空间
图2-10给出ATmega16单片机SRAM数据存储器的组织结构。全部共1120个数据存储器地址为线性编址,前96个地址为寄存器组(32个8位通用寄存器)、I/O寄存器(64个8位I/O寄存器),分配在SRAM数据地址空间的$0000~$001F、$0020~$005F。接下来的1024个地址是片内数据SRAM,地址空间占用$0060~$045F。
图2-10 ATmega16存储器结构
CPU对SRAM数据存储器的寻址方式分为5种:直接寻址、带偏移量的间接寻址、间接寻址、带预减量的间接寻址和带后增量的间接寻址。在寄存器堆中,寄存器R26~R31具有间接寻址指针寄存器的特性。ALU可使用直接寻址的方式对整个存储器空间进行寻址操作。带偏移量的间接寻址方式可以寻址由寄存器Y和Z给出的基本地址附近的63个地址。当使用带预减量和后增量的间接寻址方式时,3个16位的地址寄存器X、Y和Z都可作为间接寻址的地址指针寄存器,寄存器中的地址指针值将根据操作指令的不同,自动被增加或减小。
32个通用工作寄存器、64个I/O寄存器,以及ATmega16单片机中1024B的数据SRAM,都可通过上述的寻址方式进行访问操作。
ATmega16不支持外部SRAM扩展,用户使用时要特别注意SRAM的容量。
2.4.3 内部EEPROM存储器
AVR系列单片机还包括64B~4KB的EEPROM数据存储器。它们被组织在一个独立的数据空间中。这个数据空间采用单字节读写方式。EEPROM的使用寿命至少为10万次写/擦循环。ATmega16的EEPROM容量是512B,地址范围为$0000~$01FF。EEPROM数据存储器可用于存放一些需要掉电保护,而且比较固定的系统参数、表格等。