MCS-51单片机存储器结构
MCS-51的存储器可分为四类:
MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。关于内部无ROM的8031单片机,它的程序存储器有必要外接,空间地址为64kB,此刻单片机的 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读到这条搬运指令,便转向其他地方去持续碑文中止服务程序。
|
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) |
|
存放器B 在乘除法指令中,乘法指令中的两个操作数别离取自累加器A和存放器B,其成果存放于AB存放器对中。除法指令中,被除数取自累加器A,除数取自存放器B,成果商存放于累加器A,余数存放于存放器B中。 程序状况字(Program Status Word) |
表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,标明运算成果正确。 PSW.0(P)奇偶校验位。声明累加器A的奇偶性,每个指令周期都由硬件来置位或清零,若值为1的位数奇数,则P置位,不然清零。 |
|
数据指针(DPTR) 数据指针为16位存放器,编程时,既能够按16位存放器来运用,也能够按两个8位存放器来运用,即高位字节存放器DPH和低位字节DPL。 DPTR首要是用来保存16位地址,当对64kB外部数据存储器寻址时,可作为间址存放器运用,此刻,运用如下两条指令: MOVXA,@DPTR 在拜访程序存储器时,DPTR可用来作基址存放器,选用基址+变址寻址办法拜访程序存储器,这条指令常用于读取程序存储器内的表格数据。 MOVCA,@A+@DPTR 仓库指针SP(Stack Pointer) |
数据的写入仓库咱们称为入栈(PUSH,有些文献也称作刺进运算或压入),从仓库中取出数据称为出栈(POP,也称为删去运算或弹出),仓库的最首要特征是“后进先出”规矩,也即最早入栈的数据放在仓库的最底部,而最终入栈的数据放在栈的顶部,因而,最终入栈的数据出栈时则是最早的。这和咱们往一个箱里存放书本相同,需将最早放入箱底部的书取出,有必要先取走最上层的书本。这个道理十分类似。
那么仓库有何用处呢?仓库的建立是为了中止操作和子程序的调用而用于保存数据的,即常说的断点维护和现场维护。微处理器无论是在转入子程序和中止服务程序的碑文,碑文完后,仍是要回到主程序中来,在转入子程序和中止服务程序前,有必要先将现场的数据进行保存起来,不然回来时,CPU并不知道本来的程序碑文到哪一步,本来的中心成果怎么?所以在转入碑文其它子程序前,先将需求保存的数据压入仓库中保存。以备回来时,再康复其时的数据。供主程序持续碑文。 |
转入中止服务程序或子程序时,需求保存的数据可能有若干个,都需求一一地保存。假如微处理器进行多重子程序或中止服务程序嵌套,那么需保存的数据就更多,这要求仓库还需求有适当的容量。不然会形成仓库溢出,丢掉应备份的数据。轻者使运算和碑文成果过错,重则使整个程序紊乱。
MCS-51的仓库是在RAM中拓荒的,即仓库要占有必定的RAM存储单元。一起MCS-51的仓库能够由用户设置,SP的初始值不同,仓库的方位则不必定,不同的规划人员,运用的仓库区则不同,不同的运用要求,仓库要求的容量也有所不同。仓库的操作只需两种,即进栈和出栈,但不管是向仓库写入数据仍是从仓库中读出数据,都是对栈顶单元进行的,SP便是即时指示出栈顶的方位(即地址)。在子程序调用和中止服务程序呼应的开端和完毕期间,CPU都是依据SP指示的地址与相应的RAM存储单元交流数据。 仓库的操作有两种办法:其一是主动办法,即在中止服务程序呼应或子程序调用时,回来地址主动进栈。当需求回来碑文主程序时,回来的地址主动交给PC,以确保程序从断点处持续碑文,这种办法是不需求编程人员干涉的。第二种办法是人工指令办法,运用专有的仓库操作指令进行进出栈操作,也只需两条指令:进栈为PUSH指令,在中止服务程序或子程序调用时作为现场维护。出栈操作POP指令,用于子程序完结时,为主程序康复现场。 I/O口专用存放器(P0、P1、P2、P3) 守时/计数器(TL0、TH0、TL1和TH1) 守时/计数器办法挑选存放器(TMOD) |
表4守时/计数器作业办法操控存放器TMOD | ||||||||
位序 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
位标志 | GATE | M1 | M0 | GATE | M1 | M0 | ||
守时/计数器1 | 守时/计数器0 |
串行数据缓冲器(SBUF) 串行数据缓冲器SBUF用来存放需发送和接纳的数据,它由两个独立的存放器组成,一个是发送缓冲器,另一个是接纳缓冲器,要发送和接纳的操作其实都是对串行数据缓冲器进行。 其他操控存放器(TMOD) |