PAGE1
PAGE1
5.存储器组织
5.1存储器类型和结构
PIC16系列单片机的存储器分为多个部分,每个部分都有其特定的功能和用途。了解这些存储器的类型和结构是进行高效编程和系统设计的基础。PIC16系列单片机主要包含以下几种存储器:
程序存储器(ProgramMemory):用于存储指令代码,通常为闪存(Flash)类型,可以多次编程和擦除。
数据存储器(DataMemory):用于存储运行时数据,分为通用寄存器(GeneralPurposeRegisters,GPR)和特殊功能寄存器(SpecialFunctionRegisters,SFR)。
EEPROM存储器:用于存储非易失性数据,即使断电后数据也不会丢失。
配置寄存器(ConfigurationRegisters):用于设置单片机的工作模式和配置参数。
5.2程序存储器
程序存储器用于存储单片机的指令代码,通常为闪存(Flash)类型。闪存的特点是可以多次编程和擦除,这对于开发和调试过程非常有用。PIC16系列单片机的程序存储器通常以字(Word)为单位进行寻址,每个字包含14位或16位的指令。
5.2.1程序存储器的寻址方式
程序存储器的寻址方式决定了单片机如何访问和执行存储在其中的指令。PIC16系列单片机采用以下几种寻址方式:
直接寻址:通过指令中的地址字段直接访问程序存储器中的某个位置。
间接寻址:通过一个寄存器中的值来访问程序存储器中的某个位置。
5.2.2程序存储器的组织
程序存储器通常被分成多个银行(Bank),每个银行包含一定数量的字。例如,PIC16F877A单片机有4个程序存储器银行,每个银行包含4096字。这种组织方式有助于管理大量的指令代码。
5.3数据存储器
数据存储器用于存储单片机在运行时需要处理的数据。数据存储器分为通用寄存器(GPR)和特殊功能寄存器(SFR)两部分。
5.3.1通用寄存器(GPR)
通用寄存器用于存储用户数据,可以自由读写。GPR通常也被分成多个银行,每个银行包含一定数量的寄存器。例如,PIC16F877A单片机有4个数据存储器银行,每个银行包含128个寄存器。
5.3.2特殊功能寄存器(SFR)
特殊功能寄存器用于控制单片机的各个功能模块,如定时器、中断、I/O端口等。每个SFR都有特定的地址和功能,编程时需要特别注意。
5.4EEPROM存储器
EEPROM存储器用于存储非易失性数据,即使断电后数据也不会丢失。这对于需要长期保存数据的应用非常有用。PIC16F877A单片机包含256字节的EEPROM存储器。
5.4.1EEPROM存储器的读写操作
EEPROM存储器的读写操作需要通过特定的指令来完成。以下是一个简单的例子,演示如何读写EEPROM存储器:
#includepic16f877a.h
#includestdio.h
#includestdlib.h
//定义EEPROM读写函数
voidEEPROM_Write(unsignedcharaddress,unsignedchardata){
//选择EEPROM存储器
EEDATA=data;
EEADR=address;
EECON1bits.EEPGD=0;//选择数据EEPROM存储器
EECON1bits.WREN=1;//允许写操作
INTCONbits.GIE=0;//禁用全局中断
EECON1bits.WR=1;//开始写操作
while(EECON1bits.WR==1);//等待写操作完成
EECON1bits.WREN=0;//禁止写操作
INTCONbits.GIE=1;//重新启用全局中断
}
unsignedcharEEPROM_Read(unsignedcharaddress){
EEADR=address;
EECON1bits.EEPGD=0;//选择数据EEPROM存储器
EECON1bits.RD=1;//开始读操作
returnEEDATA;//返回读取的数据
}
voidmain(){
//初始化单片机
TRISA=0x00;//设置RA端口为输出
TRISB=0x00;//设置RB端口为输出
//写入数据到EEPROM