PAGE1
PAGE1
PIC18F系列的存储器结构
存储器概述
PIC18F系列单片机具有多种存储器类型,包括程序存储器、数据存储器、EEPROM存储器和配置寄存器。这些存储器类型在单片机的运行中扮演着不同的角色,理解它们的结构和功能对于高效地开发嵌入式系统至关重要。
程序存储器
程序存储器(也称为闪存存储器)用于存储单片机的程序代码。PIC18F系列单片机的程序存储器通常是一个24位宽的闪存存储器,其大小根据不同的型号而有所不同。程序存储器的地址空间分为多个块,每个块的大小和数量也因型号而异。程序存储器的访问速度非常快,可以支持高速的指令执行。
程序存储器的地址空间
程序存储器的地址空间通常从0x0000开始,不同的型号有不同的地址范围。例如,PIC18F4550的程序存储器地址范围为0x0000到0x7FFF,总共32K字节。
程序存储器的块结构
程序存储器被划分为多个块,每个块可以独立地进行擦除和编程。这种块结构使得程序更新更加灵活,可以在不影响其他部分的情况下对特定块进行操作。
程序存储器的访问
程序存储器通过程序计数器(PC)进行访问。PC指向当前要执行的指令地址,每执行一条指令,PC自动递增到下一条指令的地址。程序存储器的访问时间通常为1个时钟周期。
数据存储器
数据存储器用于存储运行时的数据,包括变量、堆栈和I/O寄存器。PIC18F系列单片机的数据存储器通常是一个16位宽的RAM存储器,其大小和结构根据不同的型号而有所不同。数据存储器的地址空间分为多个部分,包括通用寄存器、特殊功能寄存器(SFR)和直接地址空间。
数据存储器的地址空间
数据存储器的地址空间通常从0x00开始,不同的型号有不同的地址范围。例如,PIC18F4550的数据存储器地址范围为0x00到0x1FF,总共512字节。
数据存储器的分段
数据存储器被分为多个段,每个段可以独立地进行访问。例如,PIC18F4550的数据存储器分为以下几段:
直接地址空间(DirectAddressSpace):从0x00到0x7F,可以直接访问。
间接地址空间(IndirectAddressSpace):从0x80到0x1FF,需要通过间接寻址寄存器(FSR)进行访问。
数据存储器的访问
数据存储器的访问通过直接寻址和间接寻址两种方式完成。直接寻址可以直接使用寄存器名称或地址进行访问,而间接寻址需要通过FSR寄存器进行。
EEPROM存储器
EEPROM存储器是一种非易失性存储器,用于存储需要在断电后保持的数据。PIC18F系列单片机通常具有1K字节的EEPROM存储器。EEPROM存储器的访问速度较慢,但可以保证数据的持久存储。
EEPROM存储器的地址空间
EEPROM存储器的地址空间通常从0x0000开始,不同的型号有不同的地址范围。例如,PIC18F4550的EEPROM地址范围为0x0000到0x03FF,总共1K字节。
EEPROM存储器的读写操作
EEPROM存储器的读写操作需要通过特定的函数或命令完成。读操作通常较快,而写操作需要较长时间,因为每次写操作都需要先擦除再编程。
配置寄存器
配置寄存器用于设置单片机的初始配置,包括时钟源、复位向量、看门狗定时器等。配置寄存器的内容在单片机复位时加载,对单片机的运行有重要影响。
配置寄存器的地址
配置寄存器通常位于程序存储器的特定地址。例如,PIC18F4550的配置寄存器地址为0x300000到0x30000D。
配置寄存器的设置
配置寄存器的设置通常在程序的开始部分进行,可以通过C语言或汇编语言完成。以下是一个C语言的例子,设置PIC18F4550的配置寄存器:
//设置配置寄存器
#pragmaconfigFOSC=HS//选择外部高速振荡器
#pragmaconfigWDT=OFF//关闭看门狗定时器
#pragmaconfigLVP=OFF//关闭低电压编程
#pragmaconfigBOR=ON//打开Brown-outReset
#pragmaconfigCPD=OFF//关闭数据EEPROM保护
#pragmaconfigCP=OFF//关闭程序存储器保护
存储器映射
存储器映射是指将不同的存储器类型和功能映射到特定的地址空间。理解存储器映射有助于更好地管理和使用存储资源。
存储器映射表
以下是一个典型的PIC18F4550存储器映射表:
地址范围|功能|
|—————-|———————|
0x0000-0x0003|中断向量表|
0x0004-0x0007|