理论教育 单片机存储器结构应用教程

单片机存储器结构应用教程

时间:2023-11-07 理论教育 版权反馈
【摘要】:单片机的存储器包括程序存储器和数据存储器两大类。MCS-51单片机存储器采用的是哈佛结构,即程序存储器空间和数据存储器空间截然分开,程序存储器和数据存储器各有自己的寻址方式、寻址空间和控制系统。本节以51子系列为代表来说明MCS-51系列单片机的存储器结构,如图1-4所示。图1-4 MCS-51单片机的存储器结构图1)可将整个程序存储器空间分为片内程序存储器和片外程序存储器两部分。3)片内外程序存储器是统一编址的。

单片机存储器结构应用教程

单片机存储器包括程序存储器和数据存储器两大类。MCS-51单片机存储器采用的是哈佛结构,即程序存储器空间和数据存储器空间截然分开,程序存储器和数据存储器各有自己的寻址方式、寻址空间和控制系统。这种结构对于单片机“面向控制”的实际应用极为方便、有利。

MCS-51单片机的存储器主要有4个物理空间,即片内程序存储器、片外程序存储器、片内数据存储器和片外数据存储器。本节以51子系列为代表来说明MCS-51系列单片机的存储器结构,如图1-4所示。

1.程序存储器(ROM)

单片机系统之所以能够按照一定的次序进行工作,主要是在程序存储器中存放了经调试正确的应用程序代码和表格之类的固定常数。下面对程序存储器进行说明。

978-7-111-43071-1-Chapter01-15.jpg

图1-4 MCS-51单片机的存储器结构图

1)可将整个程序存储器空间分为片内程序存储器和片外程序存储器两部分。

2)不同芯片的片内程序存储器的存储器类型是不一样的,8031片内无程序存储器,805l片内为4KB的ROM,8751片内为4KB的EPROM,8951片内为4KB的E2PROM。

3)片内外程序存储器是统一编址的。片内4KB程序存储器的地址范围为0000H~0FFFH,片外最多可外扩至64KB的程序存储器,其地址范围为0000H~FFFFH。在外扩ROM时,低8位地址(A7~A0)和8位数据(D7~D0)由P0端口分时传送,而高8位地址(A15~A8)由P2端口传送。

4)CPU是通过978-7-111-43071-1-Chapter01-16.jpgA来控制片内程序存储器和片外程序存储器寻址的。当978-7-111-43071-1-Chapter01-17.jpg端为高电平时,单片机从内部程序存储器开始访问,但当PC(程序计数器)值超过0FFFH时,将自动转向访问外部程序存储器(注意,此时从外部程序存储器的1000H单元开始访问);当978-7-111-43071-1-Chapter01-18.jpg端为低电平时,则单片机跳过内部程序存储器,直接从外部程序存储器开始访问。

5)在程序存储器中有两组具有特殊功能的单元,使用时要特别注意。这两组单元分别如下。

①系统的启动单元。该组单元是0000H~0002H,共3个单元。系统复位后,单片机从0000H单元开始取指令执行程序。通常情况下编写主程序所占用的ROM空间会远远大于3个单元,在这种情况下,需要将主程序存放到中断区之后的空间中,此时应在这3个单元中存放一条无条件转移指令,以便直接转去主程序存放的ROM单元执行指定的程序。

②中断区。该组单元是0003H~002AH,共40个单元。这40个单元被均匀地分为5段(每段有8个字节),作为5个中断源的中断区。

0003H~000AH:外部中断0(978-7-111-43071-1-Chapter01-19.jpg)中断区。

000BH~0012H:定时器/计数器0(T0)溢出中断区。

0013H~001AH:外部中断1(978-7-111-43071-1-Chapter01-20.jpg)中断区。

001BH~0022H:定时器/计数器1(T1)溢出中断区。

0023H~002AH:串行中断区。

以上这几个中断区是专门用于存放相应的中断服务程序的,不能用于存放主程序。但是通常情况下,每8个单元是不足以存储一个完整的中断服务程序的,此时是将中断服务程序也放在中断区之后(注意,中断服务程序所占用的ROM空间不能与主程序所占用的ROM空间重叠),而从中断区首地址处存放一条无条件转移指令,以便中断响应后,在相应的中断区执行转移指令,直接转去中断服务程序存放的ROM单元执行指定的程序,进行中断处理。

2.数据存储器(RAM)

数据存储器一般用来存放运算的中间结果及数据缓冲等。可将MCS-51系列单片机的数据存储器分为片内数据存储器和片外数据存储器。

(1)片内数据存储器

51子系列单片机片内RAM共有256个单元,按其功能又可得这256个单元分为低128个单元和高128个单元两部分。

1)片内数据存储器低128单元(单元地址范围为00H~7FH)。低128单元的片内RAM是单片机的真正RAM,通常用于存放运算过程的中间值,且用做堆栈区。可按其功能将其划分为工作寄存器区(地址范围为00H~1FH)、位寻址区(20H~2FH)、用户RAM区(30H~7FH)。51子系列片内数据存储器的结构示意图如图1-5所示。

①工作寄存器区。下面对工作寄存器区作一说明。

●工作寄存器区所占用的片内RAM空间为00H~1FH,共分为4组,每组有8个单元。这4组寄存器分别称为第0组工作寄存器区(00H~07H)、第1组工作寄存器区(08H~0FH)、第2组工作寄存器区(10H~17H)、第3组工作寄存器区(18H~1FH)。

●对每组寄存器区的每个单元,除了可用相应的地址来表示外,还可用Ri(i=0~7)表示。例如,对第0组寄存器的8个单元除了可分别用地址00H~07H表示外,还可相应地用R0~R7表示;对第1组寄存器的8个单元除了可分别用地址08H~0FH表示外,还可相应地用R0~R7表示。

978-7-111-43071-1-Chapter01-21.jpg

图1-5 51子系列片内数据存储器的结构示意图

●在任一时刻CPU只能使用其中的一组寄存器,且把正在使用的那组寄存器称为当前工作寄存器组。而到底是哪一组,则由程序状态字寄存器PSW中RS1、RS0位的状态组合来决定。

●每组的各个工作寄存器常用于存放操作数及中间结果等,由于不对它们的功能及使用进行预先规定,所以又将其称为通用寄存器。

②位寻址区。

●位寻址区所占用的片内RAM空间为20H~2FH,共16个单元,每个单元有8位,共有16×8=128位。

●对于每个单元,既可作为一般的RAM单元使用,按字节操作,又可对单元中的每一位进行位操作。这128位的位地址为00H~7FH。位寻址区的位地址表如表1-2所示。

表1-2 位寻址区的位地址表

978-7-111-43071-1-Chapter01-22.jpg

●对每一位除了可用位地址表示外,还可用所在的单元地址加位序号来表示。如20H单元的位0的表示除可用地址00H表示外,还可用20H.0表示。

在这里需要说明的是,由于位地址与单元地址从表面上看是一样的,所以在运行程序中CPU要靠指令将两者区分开。例如,在指令“MOV A,20H”中20H是单元的地址,而在指令“MOV C,20H中20H”中它是位地址。

③用户RAM区。用户RAM区又称为数据缓冲区,地址范围为30H~7FH,共80个单元。对用户RAM区没有任何的规定和限制,通常将堆栈开辟在该区中。

2)片内数据存储器高128单元(单元地址范围为80H~FFH)。片内RAM的高128单元是供给专用寄存器使用的。所谓专用寄存器是指这些寄存器的功能已作专门的规定,用于存放相应功能部件的控制命令、状态或数据等。专用寄存器也可称为特殊功能寄存器(SFR)。

51子系列单片机共有22个特殊功能寄存器,其中有21个是可寻址的,而在这21个中又有11个可以实现位寻址。51子系列单片机专用寄存器表如表1-3所示。

表1-3 51子系列单片机专用寄存器表

978-7-111-43071-1-Chapter01-23.jpg

(续)(www.daowen.com)

978-7-111-43071-1-Chapter01-24.jpg

注:在表中用“*”标识的为可位寻址的SFR,而不带标识的为不可位寻址的SFR。

下面对特殊功能寄存器作一说明。

①凡是可进行位寻址的SFR,其16进制地址的末位,只能是0H或8H。

②128个字节的SFR块中仅有21个字节是有定义的。对于尚未定义的字节地址单元,用户不能作寄存器使用。若访问没有定义的单元,则将得到一个不确定的随机数

③对于可位寻址SFR中位地址的表示方法有多种:可用各自的位地址表示;可采用位名称表示;可用SFR的字节地址加位序号表示;可用SFR的符号加位序号表示。例如,PSW的位7的地址表示可表示为D7H、CY、D0H.7、PSW.7。

下面对部分特殊功能寄存器作一介绍,其他没有介绍的特殊功能寄存器将在后续有关章节中叙述。

①程序计数器(PC)。PC是一个16位的计数器,其中的内容是将要执行的指令的地址,其作用是控制程序的执行顺序,寻址范围可达64KB;PC具有自动加1功能,以实现程序的顺序执行;PC在物理上是独立的,不占单片机的RAM单元,没有地址,故不可寻址,用户无法对其进行读、写操作;可以通过调用、转移和返回等指令改变PC中的内容,从而实现程序的跳转执行。

累加器A(ACC)。累加器A是CPU中使用最频繁的8位专用寄存器,地位重要。它可用于存放操作数和运算结果。MCS-51系列单片机的大部分单操作数指令的操作数就取自累加器A,很多双操作数指令中的其中一个操作数也取自累加器A。

③B寄存器。B寄存器也是8位寄存器,它主要用于乘除法运算中。在其他操作中,可将B可当做一般寄存器使用。

④程序状态字(PSW)。程序状态字PSW是一个8位寄存器,用于存储程序运行中的状态位信息。其中的CY、AC、OV和P这4位的状态是根据程序执行的结果由硬件自动设置的;而F0、RS1、RS0这3位的状态是由用户通过软件预先设定的。PSW各标志位的定义表如表1-4所示。

表1-4 PSW各标志位的定义表

978-7-111-43071-1-Chapter01-25.jpg

●CY—进位标志位。其功能有两个:一是存放算术运算的进位标志,在进行加法或减法运算中,当运算结果出现最高位有进位或是借位时,由硬件自动将CY置1,否则清0;二是在位操作中,作为累加位使用,在位送、位与、位或等位操作中,操作位之一必须是进位标志。

●AC—辅助进位标志。在进行加减运算中,当有低4位向高4位进位或是借位时,AC由硬件自动置1,否则清0。

●F0—用户标志位。该位是供用户定义的标志位,用户可通过软件置位或清零,用以控制程序的转向。

●RS1、RS0—工作寄存器组选择位。CPU通过这两位的组合来选择将4组工作寄存器组中的哪一组作为当前工作寄存器组。这两个选择位的状态是由软件设置的。RS1、RS0组合与工作寄存器组之间的对应关系表如表1-5所示。

表1-5 RS1、RS0组合与工作寄存器 组之间的对应关系表

978-7-111-43071-1-Chapter01-26.jpg

●OV—溢出标志位。OV的状态是在程序运行中由硬件自动置位或清零的。在有符号数进行加减的运算中,OV的状态表示运算结果是否超出了累加器A所能表示的有符号数的范围(-128~+127),OV=1表示有溢出,OV=0表示无溢出。在除法运算中,OV=1表示除数为0,除法没有意义,无法进行;OV=0表示除数不为0,可正常进行除法运算。在乘法运算中,OV=1表示运算结果超过了255,结果被存放在B寄存器和累加器A中;OV=0,表示结果没有超过255,结果只需在累加器A中存放。

●P—奇偶标志位。该位表示累加器A内容中“1”的个数是奇数还是偶数。若“1”的个数为奇数,则硬件自动将该位置位;若“1”的个数为偶数,则将该位清零。在程序运行过程中,只要改变累加器A中内容的指令,就会影响P位的状态。在串行通信中,通常利用该位作为奇偶校验位来校验数据传输的可靠性

⑤堆栈指针(SP)。

●堆栈是在片内RAM中开辟出来的一个区域。其主要是为子程序调用和中断操作而设立的。其具体功能有两个:保护断点和保护现场。

在CPU进行子程序调用操作或是执行中断操作后,最终都要返回主程序,因此在CPU去执行子程序或中断服务程序之前,必须考虑其返回问题,为此,应预先把主程序的断点保护起来,为程序的正确返回作准备,这就是保护断点。

在单片机去执行子程序或中断服务程序之后,很可能要用到主程序中用着的一些寄存器单元,这样就会破坏这些寄存器单元中的原有内容。为了既能在子程序或中断服务程序中使用这些寄存器单元,又能保证在子程序或中断返回后恢复这些寄存器单元中的原有内容,通常在转去执行子程序或中断服务程序之前就把这些寄存器单元的内容保存起来,这就是所谓的保护现场。

●堆栈也可用于数据的临时存放,在程序的设计中时常用到。

●堆栈指针SP是一个8位的特殊功能寄存器,SP的内容指示出堆栈顶部在内部RAM块中的位置。它可指向内部RAM 00H~7FH的任何单元。在单片机复位后,SP中的内容为07H,即指向07H的RAM单元,使得堆栈事实上由08H单元开始,考虑到08H~1FH单元分别属于1~3组的工作寄存器区,若在程序设计中要用到这些区,则会导致堆栈区与所需用工作寄存器区的重叠,从而造成数据的混乱,故在使用堆栈时最好把SP值改为1FH或更大的值,通常将SP的值设为30H以后。

●堆栈的操作有两种,一种是将数据压入(PUSH)堆栈,另—种是将数据弹出(POP)堆栈。堆栈的栈顶由SP自动管理。每次进行压入或弹出操作以后,堆栈指针SP便自动调整以保持指示栈顶的位置。在一个字节数据被压入堆栈后,SP自动加1;在—个字节数据被弹出堆栈后,SP自动减1。

●堆栈的操作原则是“先进后出”或“后进先出”。

⑥数据指针(DPTR)。数据指针DPTR是一个16位的SFR,其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示。DPTR既可以作为一个16位寄存器DPTR来用,也可以作为两个独立的8位寄存器DPH和DPL来用。

⑦端口锁存寄存器(P0~P3)。特殊功能寄存器P0~P3分别为I/O端口P0~P3的锁存器,即每一个8位I/O口都为RAM的一个单元(8位)。

在MCS-51单片机中,对I/O口和RAM统—编址,使用起来较为方便,所有访问RAM单元的指令,都可用来访问I/O口。

⑧串行数据缓冲器(SBUF)。串行数据缓冲器SBUF用于存放欲发送或已接收的数据。在MCS-51单片机内部有两个使用同一个地址但是物理上独立的缓冲器,即发送缓冲器和接收缓冲器。当要利用SBUF发送数据时,要发送的数据进的是发送缓冲器;当要利用SBUF接收外部来的数据时,接收到的数据存入的是接收缓冲器。

⑨定时器/计数器的寄存器(TH1、TL1、TH0、TL0)。MC5-51单片机有两个16位定时器/计数器Tl和T0,它们各由两个独立的8位寄存器组成。T1由TH1、TL1组成,T0由TH0、TL0组成。用户可以分别对这4个寄存器按字节进行寻址,但不能把Tl或T0当做一个16位寄存器来寻址访问。

(2)片外数据存储器。

MCS-51系列单片机最多可外扩64KB的存储器,地址范围为0000H~FFFFH。在外扩RAM时,低8位地址(A7~A0)和8位数据(D7~D0)由P0端口分时传送,而高8位地址(A15~A8)由P2端口传送。

3.使用各类存储器注意事项

在使用各类存储器时一定要注意以下几点:

1)地址的重叠性。数据存储器与程序存储器全部64KB地址重叠;程序存储器中片内、外低4KB地址重叠;数据存储器中片内、外最低的128个字节地址重叠。虽然有这些重叠,但不会产生操作混乱。这是因为采用了不同的操作指令及EA的控制选择。

2)程序存储器(ROM)与数据存储器(RAM),在使用上是被严格区分的,不同的操作指令不得混用。程序存储器只能放置程序指令及常数表格。除了程序的运行控制外,其操作指令不分片内、外。而数据存储器则存放数据,片内、外的操作指令不同。

3)位地址空间共有两个区域,即片内低128B RAM中的20H~2FH的128位和片内高128B RAM中的11个可位寻址SFR中的相应位。

978-7-111-43071-1-Chapter01-27.jpg

图1-6 MCS-51系列单片机最小系统示意图

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈