1.5 ATmega 16 单片机的存储器组织
ATmega 16单片机的存储器分为独立寻址的Flash程序存储器、片内SRAM数据存储器和EEPROM 3部分,均采用线性编址,其结构如图1-3所示。
图1-3 ATmega 16单片机的存储器组织
1.程序存储器Flash
ATmega 16单片机具有16KB(8KB)的在线可编程Flash用以存放指令代码。因为所有的AVR指令都是16位或者32位的,故Flash组成8KB×16位的形式。Flash存储器被分为两个区:引导(Boot)程序区和应用程序区。
ATmega 16的程序计数器PC为13位,因此可以寻址整个8KB的Flash空间。因为ATmega 16单片机的程序计数器PC是13位宽,故可寻址8KB的Flash空间。Flash存储器至少可以擦写10000次。
2.数据存储器SRAM
ATmega 16具有1120B的片内SRAM,由通用寄存器组(R0~R31)、I/O寄存器和数据存储器SRAM组成。
ATmega 16单片机的SRAM采用线性编制。最低地址段0x0000~0x0001F是寄存器组,依次设置为R0~R31共32个8位通用寄存器。其中最后6个寄存器R26~R31组成X、Y、Z 3个16位的寄存器,用于存放间接寻址的地址指针,如图1-4所示。
图1-4 ATmega 16单片机的X、Y、Z寄存器结构
从0x0020~0x005F设置为I/O寄存器,I/O寄存器支持专用的I/O指令访问和SRAM地址访问。当用IN和OUT指令访问I/O寄存器时,地址单元为0x00~0x3F;而把I/O寄存器视做普通SRAM访问时,地址单元则为0x0020~0x005F。
I/O空间中保留的位应改写为“1”,而保留的地址单元一般不应该对其进行操作,否则会对程序的执行产生难以预测的影响。表1-2是ATmega 16单片机的寄存器映射表。
表1-2 ATmega 16单片机的I/O空间
(续表)
直接给用户使用的SRAM单元为0x006F~0x045F共1024字节,这部分SRAM单元用于存放在程序执行过程中定义的各种变量。
3.数据存储器EEPROM
ATmega 16单片机具有512字节的EEPROM,可以通过对相关的寄存器进行操作来实现对EEPROM按字节进行读写。EEPROM的擦写次数在100000次以上。