1、1,存储器、堆栈、SFR,2,数据存储器RAM(Random Access Memory) 程序存储器ROM(Read Only Memory) 闪速存储器Flash Memory EPROM(UV)Erazible Programmable ROM EEPROM/E2PROMElectrical Erasable Programmable ROM 静态存储器 SRAMStatic RAM(动态存储器 DRAMDynamic RAM) 按字节寻址:每个字节(8个位)占一个地址 按位寻址:有的存储器每一个位就有一个地址,单片机的存储器几个有关的概念:,8051的存储器组织,8051存储器可以分成
2、两大类:, RAM,CPU在运行时能随时进行数据的写入和读出,但在关闭电源时,其所存储的信息将丢失。它用来存放暂时性的输入输出数据、运算的中间结果或用作堆栈。, ROM是一种写入信息后不易改写的存储器。断电后,ROM中的信息保留不变。用来存放固定的程序或数据,如系统监控程序、常数表格等。,2.1.1普林斯顿结构,一般微机通常只有一个逻辑空间,可以随意安排ROM或RAM。访问存储器时,同一地址对应唯一的存储单元,可以是ROM也可以是 RAM,并用同类访问指令。这种结构称为普林斯顿结构。,2.1.2 哈佛结构, 8051单片机与一般微机的存储器配置方式很不相同。 51单片机的存储器在物理结构上分为
3、程序存储空间和数据存储空间,共有四个:片内和片外程序存储空间以及片内和片外数据存储空间,这种在物理结构上把程序存储器和数据存储器分开的结构形式称为哈佛结构。,7,89C51单片机存储器配置,片内RAM 128字节(00H7FH);片内RAM前32个单元是工作寄存器区(00H1FH)片内RAM有128个可按位寻址的位,占16个单元。 位地址编号为:00H7FH,分布在20H2FH单元 片内21个特殊功能寄存器(SFR)中:地址号能被 8整除的 SFR中的各位也可按位寻址(P.33-34) 可寻址片外RAM 64K字节 (0000HFFFFH) 可寻址片外ROM 64K字节 (0000HFFFFH
4、) 片内 Flash ROM 4K字节 (000HFFFH), 8051在逻辑上,即从用户角度上8051有三个存储空间:片内外统一编址的程序存储器片内外不统一编址的数据存储器特殊功能寄存器(片内),访问这几个不同的逻辑空间时,采用的指令:片内外程序存储器空间-MOVC片内数据存储器空间和SFR-MOV片外数据存储器地址空间-MOVX,52对应的RAM有384Byte,其中多出的128Byte只能进行间接寻址用 而C51是通过对自定义的数据类型来区分访问的存储空间的:片内外程序存储器空间-code 片内数据存储器空间和SFR-data 片外数据存储器地址空间-xdata 片内间接寻址区间-ida
5、ta,10,存储器配置(片内RAM),片内RAM 128字节(00H7FH),00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,SFR分布在80H-FFH 其中92个位可位寻址,80H,FFH,所有的RAM区(包括位寻址区、工作寄存器区)都可以用于存放数据,故也称为数据缓存寄存器,89C51 128字节,11,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,片内RAM前32个单元是工作寄存器区 (00H1FH),存储器配置(片内RAM
6、),12,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,片内RAM中有128个可按位寻址的位。 位地址:00H7FH 分布在:20H2FH单元,存储器配置(片内RAM),这些可位寻址的空间,可通过执行指令直接对某一位进行操作,如置1、清0或判1、判0等,可用作软件标志位或用于位(布尔)处理。这是一般微机所不具备的,这种位寻址能力是8051所独有的。 20H2FH:既可以字节操作,又可以位操作,但是要用不同的指令来区分;mov 20h,asetb 00hsetb 20.0,14,存储器配置(片内RAM),89C5
7、1片内RAM 128字节(00H7FH) 89C52片内RAM 256字节(00H0FFH),00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,SFR分布在80H-FFH 其中92个位可位寻址,80H,FFH,89C51 128字节,89C52 256字节,只能直接寻址,只能寄存器间接寻址(P14),既可间接寻址,又可直接寻址,程序存储器,外部 ROM,内部 ROM (EA=1),外部 ROM (EA=0),0000H,0000H,0FFFH,0FFFH,1000H,FFFFH,在程序存储器中,有6个单元具有特殊功
8、能,0003H:外部中断0入口。 000BH:定时器0溢出中断入口。 0013H:外部中断1入口。 001BH:定时器1溢出中断入口。 0023H:串行口中断入口。 52还有002BH对应T2中断。使用时,通常在这些入口地址处存放一条绝对跳转指令,使程序跳转到用户安排的中断程序起始地址,或者从0000H起始地址跳转到用户设计的初始程序上。,0000H: 8051复位后,PC0000H,即程序从0000H开始执行指令。,org 0000hjmp main(跳过中断入口地址区)org 0100h main: mov p1,#55hmov r0,#3fh Loop: djnz r0,loopcpl
9、amov p1,ajmp mainend,18,可寻址片外RAM 64K字节 (0000HFFFFH); 可寻址片外ROM 64K字节 (0000HFFFFH); 片内 Flash ROM 4K字节 (0000H FFFH);,FFFFH,0000H,可寻址片外RAM,64K字节,FFFFH,0000H,可寻址片外ROM,64K字节,FFFH,000H,可寻址片内 Flash ROM,4K 字节,89C51,7FH,00H,片内 RAM,128字节,FFH,80H,存储器配置(片内RAM),19,堆栈:在片内RAM中,常常要指定一个专门的区域来存放某些特别的数据,它遵循先进后出和后进先出(LI
10、FO/FILO)的原则,这个RAM区叫堆栈。,功用: 1)子程序调用和中断服务时CPU自动将当前PC值压栈保存,返回时自动将PC值弹栈。 2)保护现场/恢复现场 3)数据传输,20,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,SP栈顶,下一个进栈的数据将存在此,数据进栈,已经进栈的数据存放在此,初始 SP,复位后 SP=07H,数据进栈时:首先SP+1指向08H单元,第一个放进堆栈的数据将放进08H单元,然后SP再自动增 1,仍指着栈顶,堆栈区由特殊功能寄存器堆栈指针SP管理 堆栈区可以安排在 RAM区任意位
11、置,一般不安排在工作寄存器区和可按位寻址的RAM区,通常放在RAM区的靠后的位置。,21,从堆栈取出数据时:取出的数据是最近放进去的一个数据,也就是当前栈顶的数据。然后SP再自动减1,仍指着栈顶,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,SP栈顶,当前要出栈的数据,数据出栈,SP-1指向下一个将要出栈的数据,初始 SP,堆栈区由特殊功能寄存器堆栈指针SP管理 堆栈区可以安排在 RAM区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,通常放在RAM区的靠后的位置。,22,从堆栈取出数据时:取出的数据
12、是最近放进去的一个数据,也就是当前栈顶的数据。然后SP再自动减1,仍指着栈顶,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,SP-1 指向新的栈顶,也就是下一个将要出栈的数据,数据出栈,初始 SP,堆栈区由特殊功能寄存器堆栈指针SP管理 堆栈区可以安排在 RAM区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,通常放在RAM区的靠后的位置。,在实际应用中,常需在RAM区设置堆栈。80C51的堆栈一般设在30H7FH的范围内。栈顶的位置由SP寄存器指示。复位时SP的初值为07H,在系统初始化时可以重新设
13、置。,push apush bpush PSW.pop apop bpop PSW 这样的指令顺序对不对?,25,89C51特殊功能寄存器(SFR),特殊功能寄存器SFR(专用寄存器) 专用于控制、选择、管理、存放单片机内部各部分的工作方式、条件、状态、结果的寄存器。,不同的SFR管理不同的硬件模块,负责不同的功能各司其职 换言之:要让单片机实现预定的功能,必须有相应的硬件和软件,而软件中最重要的一项工作就是对SFR写命令(要求)。,P0、P1、P2、P3:四个并行输入/输出口的寄存器。它里面的内容对应着管脚的输出。 SCON (Serial Control Register) SBUF (S
14、erial Date Buffer) PCON (Power Control Register),与端口相关的(7个),与定时/计数器相关的(6个),TMOD (Timer/Counter Mode Register)定时器工作模式寄存器。 TCON (Timer/Counter Control Register)定时器控制寄存器。 TH0、TL0 、TH1、TL1:分别是T0、T1的记数初值寄存器。,IP (Interrupt Priority Register) IE (Interrupt Enable Register),与中断相关的(2个),30,程序计数器PC(Program Cou
15、nter) PC 不是一个特殊功能寄存器SFR,但其作 用又十分重要和特殊!,特点: 它是16位的按机器周期自动增1计数器,一切分支/跳转/调用/中断/复位 等操作的本质就是:改变 PC 值,总指向下一条指令所在首地址(当前PC值),特殊功能寄存器(PC),DPTR (Data Pointer)(分成DPH、DPL两个):数据指针可以用它来访问外部数据存储器中的任一单元,也可以作为通用寄存器来用,由我们自已决定如何使用。,数据指针寄存器DPTR数据指针DPTR是一个 16 位的专用寄存器, 其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示。既可作为一个 16 位寄存器DPTR来处理,
16、也可作为两个独立的 8 位寄存器DPH和DPL来处理。 DPTR 主要用来存放 16 位地址, 当对 64 KB外部数据存储器空间寻址时, 作为间址寄存器用。在访问程序存储器时, 用作基址寄存器。 mov a,a+dptr,33,89C51有21个SFR(89C52有26个) P.3334已知的P0、P1、P2、P3等四个8位I/O口分别由名为P0、P1、P2、P3四个SFR代表。,堆栈指针寄存器 SP(Stack Pointer): 总是指向栈顶,压栈时先 (SP)+1 然后数据进栈;弹栈时数据先出栈 然后(SP)-1。,累加器 ACC:一个被众多指令用得最频繁的特殊功能寄存器(如:运算、数
17、据传输)。,副累加器 B:一个经常与 ACC 配合在一起使用的特殊功能寄存器(如:乘法、除法),此外,它也经常当作普通寄存器使用。,特殊功能寄存器(P0P3,SP,A,B),34,程序状态字寄存器 PSW:,CY,AC,F0,RS0,OV,P,RS1,PSW.7,PSW.0,CY(PSW.7)进位/借位标志位。若ACC在运算过程中发生了进位或借位,则CY=1;否则=0。它也是布尔处理器的位累加器,可用于布尔操作。,AC(PSW.6)半进位/借位标志位。若ACC在运算过程中,D3位向D4位发生了进位或借位,则CY=1,否则=0。机器在执行“DA A”指令时自动要判断这一位,我们可以暂时不关心它。
18、,F0 (PSW.5)可由用户定义的标志位。,PSW.6,PSW.5,特殊功能寄存器(PSW),35,程序状态字寄存器 PSW:,CY,AC,F0,RS0,OV,P,RS1,PSW.7,PSW.0,PSW.6,PSW.5,特殊功能寄存器(PSW),例:78H+97H0111 1000+1001 01111 0000 1111,有进位 CY=1,没有半进位AC=0,36,程序状态字寄存器 PSW(续):,CY,AC,F0,RS0,OV,P,RS1,PSW.7,PSW.0,RS1(PSW.4)、RS0(PSW.3)工作寄存器组选择位。,RS1,RS0 = 0 1 则选择了工作寄存器组 1 区R0R
19、7分别代表08H 0FH单元。,RS1,RS0 = 1 0 则选择了工作寄存器组 2 区 R0R7分别代表10H 17H单元。,RS1,RS0 = 1 1 则选择了工作寄存器组 3 区R0R7分别代表18H 1FH单元。,PSW.4 PSW.3,RS1,RS0 = 0 0 则选择了工作寄存器组 0 区R0R7分别代表08H 0FH单元。,37,片内RAM前32个单元(00H1FH)是工作寄存器区 (由PSW中的RS1,RS0决定),00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,R0,R2,R1,R3,R4,R5
20、,R6,R7,07H,02H,01H,00H,06H,04H,05H,03H,08H,1FH,工作寄存器区3,工作寄存器区2,工作寄存器区1,工作寄存器区0,38,程序状态字寄存器 PSW(续):,CY,AC,F0,RS0,OV,P,RS1,PSW.7,PSW.0,OV (PSW.2)溢出标志位。OV=1时特指累加器在进行带符号数(-128+127)运算时出错(超出范围);OV=0时未出错。,PSW.1 未定义。,P (PSW.0)奇偶标志位。P=1表示累加器中“1”的个数为奇数P=0表示累加器中“1”的个数为偶数CPU随时监视着ACC中的“1”的个数,并反映在PSW中,PSW.2,PSW.1
21、,例:某运算结果是78H(01111000),P=0。它常用在校验串行通信中的数据是否出错。,39,89C51单片机存储器配置,片内RAM 128字节(00H7FH);片内RAM前32个单元是工作寄存器区(00H1FH)片内RAM有128个可按位寻址的位,占16个单元。 位地址编号为:00H7FH分布在:20H2FH单元 片内21个特殊功能寄存器(SFR)中:地址号能被 8整除的 SFR中的各位也可按位寻址 可寻址片外RAM 64K字节 (0000HFFFFH) 可寻址片外ROM 64K字节 (0000HFFFFH) 片内 Flash ROM 4K字节 (000HFFFH),小结,40,存储器
22、配置(片内RAM),片内RAM 128字节(00H7FH),00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,SFR分布在80H-FFH 其中92个位可位寻址,80H,FFH,所有的RAM区(包括位寻址区、工作寄存器区)都可以用于存放数据,故也称为数据缓存寄存器,128字节,小结,41,单片机存储器配置(片外RAM/ROM),可寻址片外RAM 64K字节 (0000HFFFFH); 可寻址片外ROM 64K字节 (0000HFFFFH); 片内 Flash ROM 4K字节 (000HFFFH);,FFFFH,0000H,可寻址片外RAM,64K字节,FFFFH,0000H,可寻址片外ROM,64K字节,FFFH,000H,可寻址片内 Flash ROM,4K字节,89C51,7FH,00H,片内 RAM,128字节,FFH,80H,小结,