存储器、堆栈、 SFR

41
1 存存存 存存存 、、 SFR

description

存储器、堆栈、 SFR. 单片机的存储器 —— 几个有关的概念:. 数据存储器 —— RAM ( Random Access Memory ) 程序存储器 —— ROM ( Read Only Memory ) 闪速存储器 —— Flash Memory EPROM —— ( UV ) Erazible Programmable ROM EEPROM/E 2 PROM —— Electrical Erasable Programmable ROM 静态存储器 SRAM —— Static RAM - PowerPoint PPT Presentation

Transcript of 存储器、堆栈、 SFR

Page 1: 存储器、堆栈、 SFR

11

存储器、堆栈、 SFR

Page 2: 存储器、堆栈、 SFR

22

数据存储器——RAM( Random Access Memory )程序存储器——ROM( Read Only Memory )闪速存储器——Flash MemoryEPROM——(UV) Erazible Programmable ROMEEPROM/E2PROM——Electrical Erasable Programmable ROM静态存储器 SRAM——Static RAM (动态存储器 DRAM——Dynamic RAM )按字节寻址:每个字节 (8个位 )占一个地址按位寻址:有的存储器每一个位就有一个地址

单片机的存储器——几个有关的概念:

Page 3: 存储器、堆栈、 SFR

33

80518051的存储器组织的存储器组织8051 存储器可以分成两大类:

﹡ RAM:CPU 在运行时能随时进行数据的写入和读出,但在关闭电源时,其所存储的信息将丢失。它用来存放暂时性的输入输出数据、运算的中间结果或用作堆栈。

﹡ROM: 一种写入信息后不易改写的存储器。断电后, ROM 中的信息保留不变。用来存放固定的程序或数据,如系统监控程序、常数表格等。

Page 4: 存储器、堆栈、 SFR

44

2.1.1 普林斯顿结构

  一般微机通常只有一个逻辑空间,可以随意安排 ROM 或 RAM 。访问存储器时,同一地址对应唯一的存储单元,可以是 ROM 也可以是 RAM ,并用同类访问指令。这种结构称为普林斯顿结构。

Page 5: 存储器、堆栈、 SFR

55

2.1.2 哈佛结构◆ 8051 单片机与一般微机的存储器配置方

式很不相同。

◆ 51 单片机的存储器在物理结构上分为程序存储空间和数据存储空间,共四个:片内和片外程序存储空间以及片内和片外数据存储空间,这种在物理结构上把程序存储器和数据存储器分开的结构形式称为哈佛结构。

Page 6: 存储器、堆栈、 SFR

66

Page 7: 存储器、堆栈、 SFR

77

89C51 单片机存储器配置 片内 RAM 128 字节( 00H—7FH ); 片内 RAM 前 32个单元是工作寄存器区 (00H—1FH) 片内 RAM 有 128 个可按位寻址的位,占 16个单元。 位地址编号为: 00H—7FH ,分布在 20H—2FH 单元 片内 21个特殊功能寄存器 (SFR)128 字节( 80H--FFH ):地址号能被 8整除的, SFR 中的各位也可 按位寻址( P.33-34 )

可寻址片外 RAM 64K 字节 ( 0000H—FFFFH ) 可寻址片外 ROM 64K 字节 ( 0000H—FFFFH ) 片内 Flash ROM 4K 字节 ( 0000H—0FFFH )

Page 8: 存储器、堆栈、 SFR

88

★ 8051 在逻辑上,即从用户角度上 8051 有三个存储空间: 片内外统一编址的程序存储器 片内外不统一编址的数据存储器 特殊功能寄存器(片内)

★ 访问这几个不同的逻辑空间时,采用的指令: 片内外程序存储器空间 ----MOVC 片内数据存储器空间和 SFR----MOV 片外数据存储器地址空间 ----MOVX

Page 9: 存储器、堆栈、 SFR

99

¶52 对应的 RAM 有 384Byte ,其中多出的 128Byte 只能进行间接寻址用 @

¶ 而 C51 是通过对自定义的数据类型来区分访问的存储空间的:

片内外程序存储器空间 ----code

片内数据存储器空间和 SFR----data

片外数据存储器地址空间 ----xdata

片内间接寻址区间 ----idata

Page 10: 存储器、堆栈、 SFR

1010

存储器配置(片内 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 字

Page 11: 存储器、堆栈、 SFR

1111

00H

20H

2FH

7FH

1FH

30H

80H

FFH

52 子系列才有

的 RAM 区

普通 RAM 区

位寻址区工作寄存器区

R2

R0

R2R1

R3R4R5R6R707H

02H01H00H

06H

04H05H

03H

08H

1FH 工作寄存器区 3

工作寄存器区 2

工作寄存器区 1

工作寄存器区0

0FH10H17H18H

片内RAM前 32个单元是工作寄存器区 (00H—1FH)

存储器配置(片内 RAM )

Page 12: 存储器、堆栈、 SFR

1212

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 )

Page 13: 存储器、堆栈、 SFR

1313

这些可位寻址的空间,可通过执行指令直接对某一位进行操作,如置 1 、清 0 或判 1 、判 0 等,可用作软件标志位或用于位(布尔)处理。这是一般微机所不具备的,这种位寻址能力是 8051所独有的。

20H~2FH :既可以字节操作,又可以位操作,但是要用不同的指令来区分;

mov 20h,a setb 00h setb 20.0

Page 14: 存储器、堆栈、 SFR

1414

存储器配置(片内 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)

既可间接寻址 , 又可直接寻址

Page 15: 存储器、堆栈、 SFR

1515

程序存储器

外部ROM

内部ROM(EA=1)

外部ROM

(EA=0)0000H 0000H

0FFFH 0FFFH

1000H

FFFFH

Page 16: 存储器、堆栈、 SFR

1616

在程序存储器中,有 6 个单元具有特殊功能

0003H :外部中断 0 入口。000BH :定时器 0 溢出中断入口。0013H :外部中断 1 入口。001BH :定时器 1 溢出中断入口。0023H :串行口中断入口。52 还有 002BH 对应 T2 中断。 使用时,通常在这些入口地址处存放一条绝对跳转指令,使程序跳转到用户安排的中断程序起始地址,或者从 0000H 起始地址跳转到用户设计的初始程序上。

0000H: 8051 复位后, PC = 0000H ,即程序从 0000H 开始执行指令。

Page 17: 存储器、堆栈、 SFR

1717

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

Page 18: 存储器、堆栈、 SFR

1818

可寻址片外 RAM 64K 字节 ( 0000H—FFFFH ); 可寻址片外 ROM 64K 字节 ( 0000H—FFFFH ); 片内 Flash ROM 4K 字节 ( 0000H— FFFH );

FFFFH

0000H

可寻址片外 R

AM

64K字节

FFFFH

0000H

可寻址片外 R

OM

64K字节

FFFH

000H

可寻址片内 Flash ROM

4K 字节

89C51

7FH

00H

片内 RAM

128 字节

FFH

80H

存储器配置(片内 RAM )

Page 19: 存储器、堆栈、 SFR

1919

堆栈: 在片内RAM中,常常要指定一个专门的区域来存放某些特别的数据,它遵循先进后出和后进先出(LIFO/FILO )的原则 ,这个 RAM区叫堆栈。

功用:1 )子程序调用和中断服务时 CPU 自动将当前 PC 值压栈保存,返回时自动将 PC值弹栈。2)保护现场 /恢复现场3)数据传输

Page 20: 存储器、堆栈、 SFR

2020

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区的靠后的位置。

Page 21: 存储器、堆栈、 SFR

2121

从堆栈取出数据时:取出的数据是最近放进去的一个数据,也就是当前栈顶的数据。然后 SP再自动减1,仍指着栈顶……

00H

20H

2FH

7FH

1FH

30H

80H

FFH

52 子系列才有

的 RAM 区

普通 RAM 区

位寻址区工作寄存器区

SP栈顶 当前要出栈的数据

数据出栈

SP-1 指向下一个将要出栈的数据

初始 SP

堆栈区由特殊功能寄存器堆栈指针 SP 管理 堆栈区可以安排在 RAM 区任意位置,一般不安排在工作寄存器区和可按位寻址的 RAM 区,通常放在 RAM区的靠后的位置。

Page 22: 存储器、堆栈、 SFR

2222

从堆栈取出数据时:取出的数据是最近放进去的一个数据,也就是当前栈顶的数据。然后 SP再自动减1,仍指着栈顶……

00H

20H

2FH

7FH

1FH

30H

80H

FFH

52 子系列才有

的 RAM 区

普通 RAM 区

位寻址区工作寄存器区

SP-1 指向新的栈顶 , 也就是下一个将要出栈的数据

数据出栈

初始 SP

堆栈区由特殊功能寄存器堆栈指针 SP 管理 堆栈区可以安排在 RAM 区任意位置,一般不安排在工作寄存器区和可按位寻址的 RAM 区,通常放在 RAM区的靠后的位置。

Page 23: 存储器、堆栈、 SFR

2323

在实际应用中,常需在 RAM 区设置堆栈。80C51 的堆栈一般设在 30H~7FH 的范围内。栈顶的位置由 SP 寄存器指示。复位时 SP 的初值为 07H ,在系统初始化时可以重新设置。

Page 24: 存储器、堆栈、 SFR

2424

push apush a push bpush b push PSWpush PSW ……… ……….. pop apop a pop bpop b pop PSWpop PSW 这样的指令顺序对不对?这样的指令顺序对不对?

Page 25: 存储器、堆栈、 SFR

2525

89C51 特殊功能寄存器 (SFR)▼特殊功能寄存器 SFR (专用寄存器)

专用于控制、选择、管理、存放单片机内部各部分的工作方式、条件、状态、结果的寄存器。

▼不同的 SFR 管理不同的硬件模块,负责不同的功能——各司其职

换言之:要让单片机实现预定的功能,必须有相应的硬件和软件,而软件中最重要的一项工作就是对SFR 写命令(要求)。

Page 26: 存储器、堆栈、 SFR

2626

标识符号 地址 寄存器名称ACC 0E0H 累加器B 0F0H B 寄存器PSW 0D0H 程序状态字SP 81H 堆栈指针DPTR 82H 、 83

H数据指针 (16 位 ) 含 DPL和 DPH

IE 0A8H 中断允许控制寄存器IP 0B8H 中断优先控制寄存器P0 80H I/O 口 0 寄存器P1 90H I/O 口 1 寄存器P2 0A0H I/O 口 2 寄存器

Page 27: 存储器、堆栈、 SFR

2727

标识符号 地址 寄存器名称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 位

Page 28: 存储器、堆栈、 SFR

2828

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 的记数初值寄存器。

Page 29: 存储器、堆栈、 SFR

2929

IP (Interrupt Priority Register) IE (Interrupt Enable Register)

与中断相关的( 2 个)

Page 30: 存储器、堆栈、 SFR

3030

程序计数器 PC( Program Counter )

PC 不是一个特殊功能寄存器 SFR ,但其作 用又十分重要和特殊 !!!

特点:

▼它是 16位的按机器周期自动增 1计数器

▼一切分支 /跳转 / 调用 /中断 /复位 等操作的本质就是 :改变 PC 值

▼总指向下一条指令所在首地址 (当前 PC 值 )

特殊功能寄存器 (PC)

Page 31: 存储器、堆栈、 SFR

3131

DPTR (Data Pointer)(分成 DPH 、 DPL两个): 数据指针可以用它来访问外部数据存储器中的任一单元,也可以作为通用寄存器来用,由我们自已决定如何使用。

Page 32: 存储器、堆栈、 SFR

3232

数据指针寄存器 DPTR 数据指针 DPTR 是一个 16 位的专用寄存

器 , 其高位字节寄存器用 DPH 表示 ,低位字节寄存器用 DPL表示。既可作为一个 16 位寄存器 DPTR 来处理 , 也可作为两个独立的 8 位寄存器 DPH 和 DPL来处理。

DPTR 主要用来存放 16 位地址 , 当对 64 KB 外部数据存储器空间寻址时 , 作为间址寄存器用。在访问程序存储器时 , 用作基址寄存器。

mov a,@a+dptr

Page 33: 存储器、堆栈、 SFR

3333

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)

Page 34: 存储器、堆栈、 SFR

3434

程序状态字寄存器 PSW:

CY AC F0 RS0 OV PRS1

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)

Page 35: 存储器、堆栈、 SFR

3535

程序状态字寄存器 PSW:

CY AC F0 RS0 OV PRS1

PSW.7 PSW.0PSW.6 PSW.5

特殊功能寄存器 (PSW)

例: 78H+97H

0111 1000

+1001 0111

1 0000 1111

有进位CY=1

没有半进位AC=0

Page 36: 存储器、堆栈、 SFR

3636

程序状态字寄存器 PSW(续):

CY AC F0 RS0 OV PRS1

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 单元。

Page 37: 存储器、堆栈、 SFR

3737

片内 RAM 前 32 个单元 (00H—1FH) 是工作寄存器区 (由 PSW中的 RS1,RS0决定 )

00H

20H

2FH

7FH

1FH

30H

80H

FFH

52 子系列才有

的 RAM 区

普通 RAM 区

位寻址区工作寄存器区 R0

R2R1

R3R4R5R6R707H

02H01H00H

06H

04H05H

03H

08H

1FH 工作寄存器区 3

工作寄存器区 2

工作寄存器区 1

工作寄存器区0

Page 38: 存储器、堆栈、 SFR

3838

程序状态字寄存器 PSW(续):

CY AC F0 RS0 OV PRS1

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 。

它常用在校验串行通信中的数据是否出错。

Page 39: 存储器、堆栈、 SFR

3939

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 )

小结

Page 40: 存储器、堆栈、 SFR

4040

存储器配置(片内 RAM ) 片内片内 RAMRAM 128128 字节字节(( 00H—7FH00H—7FH ))

00H

20H

2FH

7FH

1FH

30H

80H

FFH

52 子系列才有

的 RAM 区

普通 RAM 区

位寻址区工作寄存器区

SFR 分布在80H-FFH

其中 92 个位可位寻址

80H

FFH

所有的 RAM 区 (包括位寻址区、工作寄存器区)都可以用于存放数据,故也称为数据缓存寄存器

128 字节

小结

Page 41: 存储器、堆栈、 SFR

4141

单片机存储器配置(片外 RAM/ROM ) 可寻址片外 RAM 64K 字节 ( 0000H—FFFFH );

可寻址片外 ROM 64K 字节 ( 0000H—FFFFH ); 片内 Flash ROM 4K 字节 ( 000H—FFFH );

FFFFH

0000H

可寻址片外 R

AM

64K字节

FFFFH

0000H

可寻址片外 R

OM

64K字节

FFFH

000H

可寻址片内 Flash ROM

4K字节

89C51

7FH

00H

片内 RAM

128 字节

FFH

80H

小结