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