以中档型的PIC16F877A单片机为例,它具有三种类型的存储器,即:程序存储器(Flash Memory)、数据存储器(Data Memory)和EEPROM。下面分别作简要介绍。
中档系列的PIC16F877A单片机有一个13位的程序计数器(PC,Program Counter),可寻址8K×14位的程序存储空间。图1-9给出了PIC16F877A单片机的程序内存及堆栈结构图。图中PCLATH为程序计数器高位锁存器,在程序存储器页之间跳转时,需要修改PC的高位(PCLATH)。当然,设计PIC单片机C语言程序时,程序计数器不需要程序设计人员来维护。另外,由该图可知,复位向量(Reset Vector)和中断向量(Interrupt Vertor)地址分别为0000H和0004H。
数据存储器由特殊功能寄存器(SFR,Special Function Registers)和通用寄存器(GPR,General Purpose Registers)组成。其中特殊功能寄存器用于控制器件的操作,而通用寄存器则是数据存储和改写的通用区域。PIC单片机C语言程序中的各类自定义变量将被编译器自动分配到数据存储器的通用寄存器区域。
图1-9 PIC16F877A 程序内存及堆栈结构图
图1-10给出了PIC16F877A的数据存储器结构图。整个存储空间被分为四层,即bank 0~bank 3,图中各bank 内低地址区域已命名的部分被分配给特殊功能寄存器(SFR),其中标有底色的单元不能使用。各bank中未命名的部分为通用寄存器。bank0~bank3的自由RAM空间分别为96字节、80字节、96字节、96字节,4个数据合计可得PIC16F877A的数据RAM仅为368字节。
图1-10 PIC16F877A 数据内存结构图
PIC单片机EEPROM存储空间是可读/写的。PIC16F877A单片机具有256字节的EEPROM存储空间,作为非易失性存储器,它被用于保存那些在单片机断电后仍需要保存的数据信息,例如应用系统配置信息、新设置的电子密码信息、读取的1-Wire总线器件ROMCODE信息等。
EEPROM存储器并不直接映射到寄存器空间,它需要通过特殊功能寄存器间接寻址。所涉及的四个控制EEPROM读/写的特殊功能寄存器如下:
EECON1、EECON2、EEDATA、EEADR。
其中EEDATA寄存器存放的是8位的读/写数据,EEADR寄存器存放的是访问EEPROM的地址。8位EEADR寄存器最多能够访问数据EEPROM的256个地址。EECON1包含相关的控制位,而EECON2是用于初始化读/写的寄存器。
有关PIC单片机EEPROM的读/写程序设计将在第3章相关案例中提供。