MCS-51的存储器可分为四类:程序存储器一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并
MCS-51的存储器可分为四类:
程序存储器 一个微处理器能够聪明地履行某种使命,除了它们强壮的硬件外,还需求它们运转的软件,其实微处理器并不聪明,它们仅仅彻底依照人们预先编写的程序而履行之。那么规划人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序适当于给微处理器处理问题的一系列指令。其实程序和数据相同,都是由机器码组成的代码串。仅仅程序代码则存放于程序存储器中。
MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。关于内部无ROM的8031单片机,它的程序存储器有必要外接,空间地址为64kB,此刻单片机的端有必要接地。强制CPU从外部程序存储器读取程序。关于内部有ROM的8051等单片机,正常运转时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超越内部ROM的容量时,才会转向外部的程序存储器读取程序。
8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机发动复位后,程序计数器的内容为0000H,所以体系将从0000H单元开端履行程序。但在程序存储中有些特别的单元,这在运用中应加以留意:
其间一组特别是0000H—0002H单元,体系复位后,PC为0000H,单片机从0000H单元开端履行程序,假如程序不是从0000H单元开端,则应在这三个单元中存放一条无条件搬运指令,让CPU直接去履行用户指定的程序。
另一组特别单元是0003H—002AH,这40个单元各有用处,它们被均匀地分为五段,它们的界说如下:
0003H—000AH外部中止0中止地址区。
000BH—0012H守时/计数器0中止地址区。
0013H—001AH外部中止1中止地址区。
001BH—0022H守时/计数器1中止地址区。
0023H—002AH串行中止地址区。
可见以上的40个单元是专门用于存放中止处理程序的地址单元,中止呼应后,按中止的类型,主动转到各自的中止区去履行程序。因而以上地址单元不能用于存放程序的其他内容,只能存放中止服务程序。可是通常情况下,每段只需8个地址单元是不能存下完好的中止服务程序的,因而一般也在中止呼应的地址区安放一条无条件搬运指令,指向程序存储器的其它真实存放中止服务程序的空间去履行,这样中止呼应后,CPU读到这条搬运指令,便转向其他地方去持续履行中止服务程序。
数据存储器 数据存储器也称为随机存取数据存储器。MCS-51单片机的数据存储器在物理上和逻辑上都分为两个地址空间,一个是内部数据存储区和一个外部数据存储区。MCS-51内部RAM有128或256个字节的用户数据存储(不同的类型有别离),它们是用于存放履行的中心成果和进程数据的。MCS-51的数据存储器均可读写,部分单元还能够位寻址。 |
8051内部RAM共有256个单元,这256个单元共分为两部分。其一是地址从00H—7FH单元(共128个字节)为用户数据RAM。从80H—FFH地址单元(也是128个字节)为特别存放器(SFR)单元。从图1中可清楚地看出它们的结构散布。
在00H—1FH共32个单元中被均匀地分为四块,每块包括八个8位存放器,均以R0—R7来命名,咱们常称这些存放器为通用存放器。这四块中的存放器都称为R0—R7,那么在程序中怎样区别和运用它们呢?聪明的INTEL工程师们又组织了一个存放器——程序状况字存放器(PSW)来办理它们,CPU只需界说这个存放的PSW的第3和第4位(RS0和RS1),即可选中这四组通用存放器。对应的编码联系如图2所示。 |
|
|
内部RAM的20H—2FH单元为位寻址区,既可作为一般单元用字节寻址,也可对它们的位进行寻址。位寻址区共有16个字节,128个位,位地址为00H—7FH。位地址分配如表1所示,CPU能直接寻址这些位,履行例如置“1”、清“0”、求“反”、搬运,传送和逻辑等操作。咱们常称MCS-51具有布尔处理功用,布尔处理的存储空间指的便是这些为寻址区。 |
表1RAM位寻址区地址表 |
单元地址 |
MSB位地址LSB |
2FH |
7FH |
7EH |
7DH |
7CH |
7BH |
7AH |
79H |
78H |
2EH |
77H |
76H |
75H |
74H |
73H |
72H |
71H |
70H |
2DH |
6FH |
6EH |
6DH |
6CH |
6BH |
6AH |
69H |
68H |
2CH |
67H |
66H |
65H |
64H |
63H |
62H |
61H |
60H |
2BH |
5FH |
5EH |
5DH |
5CH |
5BH |
5AH |
59H |
58H |
2AH |
57H |
56H |
55H |
54H |
53H |
52H |
51H |
50H |
29H |
4FH |
4EH |
4DH |
4CH |
4BH |
4AH |
49H |
48H |
28H |
47H |
46H |
45H |
44H |
43H |
42H |
41H |
40H |
27H |
3FH |
3EH |
3DH |
3CH |
3BH |
3AH |
39H |
38H |
26H |
37H |
36H |
35H |
34H |
33H |
32H |
31H |
30H |
25H |
2FH |
2EH |
2DH |
2CH |
2BH |
2AH |
29H |
28H |
24H |
27H |
26H |
25H |
24H |
23H |
22H |
21H |
20H |
23H |
1FH |
1EH |
1DH |
1CH |
1BH |
1AH |
19H |
18H |
22H |
17H |
16H |
15H |
14H |
13H |
12H |
11H |
10H |
21H |
0FH |
0EH |
0DH |
0CH |
0BH |
0AH |
09H |
08H |
20H |
07H |
06H |
05H |
04H |
03H |
02H |
01H |
00H |
|
特别功用存放器 特别功用存放器(SFR)也称为专用存放器,特别功用存放器反映了MCS-51单片机的运转状况。许多功用也经过特别功用存放器来界说和操控程序的履行。
MCS-51有21个特别功用存放器,它们被离散地散布在内部RAM的80H—FFH地址中,这些存放的功用已作了专门的规矩,用户不能修正其结构。表2是特别功用存放器散布一览表,咱们对其首要的存放器作一些简略的介绍。 |
程序计数器PC(program Counter) 程序计数器在物理上是独立的,它不归于特别内部数据存储器块中。PC是一个16位的计数器,用于存放一条要履行的指令地址,寻址规模为64kB,PC有主动加1功用,即完结了一条指令的履行后,其内容主动加1。PC自身并没有地址,因而不行寻址,用户无法对它进行读写,可是能够经过搬运、调用、回来等指令改动其内容,以操控程序按咱们的要求去履行。
累加器ACC(Accumulator) 累加器A是一个最常用的专用存放器,大部分单操作指令的一个操作数取自累加器,许多双操作数指令中的一个操作数也取自累加器。加、减、乘、除法运算的指令,运算成果都存放于累加器A或AB累加器对中。大部分的数据操作都会经过累加器A进行,它形象于一个交通要道,在程序比较复杂的运算中,累加器成了限制软件功率的“瓶颈”,它的功用较多,方位也十分重要。以至于后来开展的单片机,有的集成了多累加器结构,或许运用存放器阵列来替代累加器,即赋予更多存放器以累加器的功用,意图是处理累加器的“交通堵塞”问题。进步单片机的软件功率。 |
表2特别功用存放器 |
标识符号 |
地址 |
存放器称号 |
ACC |
0E0H |
累加器 |
B |
0F0H |
B存放器 |
PSW |
0D0H |
程序状况字 |
SP |
81H |
仓库指针 |
DPTR |
82H、83H |
数据指针(16位)含DPL和DPH |
IE |
0A8H |
中止答应操控存放器 |
IP |
0B8H |
中止优先操控存放器 |
P0 |
80H |
I/O口0存放器 |
P1 |
90H |
I/O口1存放器 |
P2 |
0A0H |
I/O口2存放器 |
P3 |
0B0H |
I/O口3存放器 |
PCON |
87H |
电源操控及波特率挑选存放器 |
SCON |
98H |
串行口操控存放器 |
SBUF |
99H |
串行数据缓冲存放器 |
TCON |
88H |
守时操控存放器 |
TMOD |
89H |
守时器办法挑选存放器 |
TL0 |
8AH |
守时器0低8位 |
TH0 |
8CH |
守时器0高8位 |
TL1 |
8BH |
守时器1低8位 |
TH1 |
8DH |
守时器1高8位 |
|
存放器B 在乘除法指令中,乘法指令中的两个操作数别离取自累加器A和存放器B,其成果存放于AB存放器对中。除法指令中,被除数取自累加器A,除数取自存放器B,成果商存放于累加器A,余数存放于存放器B中。
程序状况字(Program Status Word) 程序状况字是一个8位存放器,用于存放程序运转的状况信息,这个存放器的一些位可由软件设置,有些位则由硬件运转时主动设置的。存放器的各位界说如下,其间PSW.1是保存位,未运用。下表是它的功用阐明,并对各个位的界说介绍如下: |
表3程序状况字 |
位序 |
PSW.7 |
PSW.6 |
PSW.5 |
PSW.4 |
PSW.3 |
PSW.2 |
PSW.1 |
PSW.0 |
位标志 |
CY |
AC |
F0 |
RS1 |
RS0 |
OV |
– |
P |
|
PSW.7(CY)进位标志位,此位有两个功用:一是存放履行某写管用运算时,存放进位标志,可被硬件或软件置位或清零。二是在位操作中作累加位运用。
PSW.6(AC)辅佐进位标志位,当进行加、减运算时当有低4位向高4位进位或借位时,AC置位,不然被清零。AC辅佐进位位也常用于十进制调整。
PSW.5(F0)用户标志位,供用户设置的标志位。
PSW.4、PSW.3(RS1和 RS0)存放器组挑选位。可拜见本章的图2界说。
PSW.2(OV)溢出标志。带符号加减运算中,超出了累加器A所能标明的符号数有用规模(-128—+127)时,即发生溢出,OV=1。标明运算运算成果过错。假如OV=0,标明运算成果正确。 履行加法指令ADD时,当位6向位7进位,而位7不向C进位时,OV=1。或许位6不向位7进位,而位7向C进位时,相同OV=1。 除法指令,乘积超越255时,OV=1。外表乘积在AB存放器对中。若OV=0,则阐明乘积没有超越255,乘积只在累加器A中。 除法指令,OV=1,标明除数为0,运算不被履行。不然OV=0。
PSW.0(P)奇偶校验位。声明累加器A的奇偶性,每个指令周期都由硬件来置位或清零,若值为1的位数奇数,则P置位,不然清零。 |
|
数据指针(DPTR) 数据指针为16位存放器,编程时,既能够按16位存放器来运用,也能够按两个8位存放器来运用,即高位字节存放器DPH和低位字节DPL。 DPTR首要是用来保存16位地址,当对64kB外部数据存储器寻址时,可作为间址存放器运用,此刻,运用如下两条指令:
MOVXA,@DPTR MOVX@DPTR,A
在拜访程序存储器时,DPTR可用来作基址存放器,选用基址+变址寻址办法拜访程序存储器,这条指令常用于读取程序存储器内的表格数据。
MOVCA,@A+@DPTR
仓库指针SP(Stack Pointer) 仓库是一种数据结构,它是一个8位存放器,它指示仓库顶部在内部RAM中的方位。体系复位后,SP的初始值为07H,使得仓库实际上是从08H开端的。但咱们从RAM的结构散布中可知,08H—1FH从属1—3作业存放器区,若编程时需求用到这些数据单元,有必要对仓库指针SP进行初始化,原则上设在任何一个区域均可,但一般设在30H—1FH之间较为适合。 |
数据的写入仓库咱们称为入栈(PUSH,有些文献也称作刺进运算或压入),从仓库中取出数据称为出栈(POP,也称为删去运算或弹出),仓库的最首要特征是“后进先出”规矩,也即最早入栈的数据放在仓库的最底部,而最终入栈的数据放在栈的顶部,因而,最终入栈的数据出栈时则是最早的。这和咱们往一个箱里存放书本相同,需将最早放入箱底部的书取出,有必要先取走最上层的书本。这个道理十分类似。
那么仓库有何用处呢?仓库的建立是为了中止操作和子程序的调用而用于保存数据的,即常说的断点维护和现场维护。微处理器无论是在转入子程序和中止服务程序的履行,履行完后,仍是要回到主程序中来,在转入子程序和中止服务程序前,有必要先将现场的数据进行保存起来,不然回来时,CPU并不知道本来的程序履行到哪一步,本来的中心成果怎么?所以在转入履行其它子程序前,先将需求保存的数据压入仓库中保存。以备回来时,再康复其时的数据。供主程序持续履行。 |
|
转入中止服务程序或子程序时,需求保存的数据可能有若干个,都需求一一地保存。假如微处理器进行多重子程序或中止服务程序嵌套,那么需保存的数据就更多,这要求仓库还需求有适当的容量。不然会形成仓库溢出,丢掉应备份的数据。轻者使运算和履行成果过错,重则使整个程序紊乱。
MCS-51的仓库是在RAM中拓荒的,即仓库要占有必定的RAM存储单元。一起MCS-51的仓库能够由用户设置,SP的初始值不同,仓库的方位则不必定,不同的规划人员,运用的仓库区则不同,不同的运用要求,仓库要求的容量也有所不同。仓库的操作只需两种,即进栈和出栈,但不管是向仓库写入数据仍是从仓库中读出数据,都是对栈顶单元进行的,SP便是即时指示出栈顶的方位(即地址)。在子程序调用和中止服务程序呼应的开端和完毕期间,CPU都是依据SP指示的地址与相应的RAM存储单元交流数据。
仓库的操作有两种办法:其一是主动办法,即在中止服务程序呼应或子程序调用时,回来地址主动进栈。当需求回来履行主程序时,回来的地址主动交给PC,以确保程序从断点处持续履行,这种办法是不需求编程人员干涉的。第二种办法是人工指令办法,运用专有的仓库操作指令进行进出栈操作,也只需两条指令:进栈为PUSH指令,在中止服务程序或子程序调用时作为现场维护。出栈操作POP指令,用于子程序完结时,为主程序康复现场。
I/O口专用存放器(P0、P1、P2、P3) I/O口存放器P0、P1、P2和P3别离是MCS-51单片机的四组I/O口锁存器。MCS-51单片机并没有专门的I/O口操作指令,而是把I/O口也当作一般的存放器来运用,数据传送都统一运用MOV指令来进行,这样的优点在于,四组I/O口还能够当作存放器直接寻址办法参加其他操作。
守时/计数器(TL0、TH0、TL1和TH1) MCS-51单片机中有两个16位的守时/计数器T0和T1,它们由四个8位存放器组成的,两个16位守时/计数器却是彻底独立的。咱们能够独自对这四个存放器进行寻址,但不能把T0和T1当作16位存放来运用。
守时/计数器办法挑选存放器(TMOD) TMOD存放器是一个专用存放器,用于操控两个守时计数器的作业办法,TMOD能够用字节传送指令设置其内容,但不能位寻址,各位的界说如下,更具体的内容,咱们将在《MCS-51守时器和中止体系》章节中叙说。 |
表4守时/计数器作业办法操控存放器TMOD |
位序 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
位标志 |
GATE |
|
M1 |
M0 |
GATE |
|
M1 |
M0 |
|
守时/计数器1 |
守时/计数器0 |
串行数据缓冲器(SBUF) 串行数据缓冲器SBUF用来存放需发送和接纳的数据,它由两个独立的存放器组成,一个是发送缓冲器,另一个是接纳缓冲器,要发送和接纳的操作其实都是对串行数据缓冲器进行。
其他操控存放器(TMOD) 除了以上咱们简述的几个专用存放外,还有IP、IE、TCON、SCON和PCON等几个存放器,这几个操控存放器首要用于中止和守时的,咱们将在《MCS-51守时器和中止体系》中具体阐明。 |
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/260239.html