1.内存架构
标准的基于80C51微控制器将内存分成两个不同的部分,编程内存和数据内存。编程内存用来存储指令代码。而数据内存用来存储编程执行过程中的数据或变量。
数据内存占用的地址空间独立于编程内存。在MS51中,有256字节内部RAM。对于需要更多内部RAM的许多应用,MS51提供另外片上1K字节RAM,叫做XRAM,通过MOVX指令访问。整个嵌入的FLASH,作为编程内存的功能,被分成三块。应用ROM(APROM)通常存储用户代码,加载ROM(LDROM)通常存储启动代码,CONFIG字节作用于硬件初始化。事实上, APROM 和 LDROM功能相似,但是大小不一样,每一块由一页一页组成,每页大小是128字节。FLASH控制单元支持擦除、编程和读模式。使用外部烧写器是通过指定的I/O口烧写,在应用编程(IAP)或在系统编程(ISP)都可以执行这些模式。
2.程序内存 (APROM / LDROM)
程序内存存储用于执行的编程代码,如图 6.1-1 MS51程序内存分配图所示。在任何复位之后CPU从地址0000H开始执行。
关于服务中断,中断服务向量位置(叫做中断向量)位于编程内存。每一个中断被分配一个固定的编程内存地址。中断引起CPU跳到中断服务子程序(ISR)开始执行的地方。例如外部中断0被分配到地址0003H。如果外部中断0被使用,它的服务子程序应该从地址0003H开始。如果中断不使用,该地址可以作为通用的编程内存。
中断服务向量位置间隔为八个字节:0003H用于外部中断0,000BH用于定时器0,0013H用于外部中断1,001BH用于定时器1 等。如果一个中断服务子程序足够短,可以完整地放在这8个字节间隔中。而长的中断服务程序需要用JMP指令跳过后面的中断地址,如果此中断地址有被其它中断使用。
MS51提供两个内部编程内存块APROM和LDROM。虽然它们都和标准8051编程内存一样,但是根据它们ROM的大小不一样,扮演着不同的角色。MS51的APROM可以最大到18K字节。用户代码通常放在这里面。CPU从APROM获取指令来执行。MOVC指令也可以从这个区域读取。
另外单独的编程块叫做LDROM,它的功能通常是存储启动代码用于ISP。它可以更新APROM空间和CONFIG字节。APROM中的代码也可以重新编程LDROM。APROM和LDROM关于IAP的细节和配置位设置,请看章节6.3.1在应用编程 (IAP). 注意APROM 和 LDROM 是硬件独立模块,因此如果CPU从LDROM启动,CPU会自动重映射PC指针0000H到LDROM开始的地址。因此CPU认为LDROM是单独的编程内存且所有中断向量独立于APROM。
|