51单片机的主要组成结构分析详解

发布者:SerendipityJoy最新更新时间:2022-10-12 来源: eefocus关键字:51单片机  组成结构 手机看文章 扫描二维码
随时随地手机看文章

随着微电子技术的快速发展,以ARM为主的32位MCU(微控制器)已普及开来,8位MCU已被很多人认为将被淘汰,更何况其中的老古董MCS-51系列单片机。但从目前的形势来看,8位MCU还牢牢占据着工业控制领域的主导地位,一个原因是8位MCU的开发成本比较低,也有大量的成熟设计方案,还有一个原因是历史的延续,新的产品还处在不断变化中,老产品则是经数十年的淘汰而留存下来的精品。


MCS-51系列单片机正是如此,自1980年由Intel推出后,获得很大成功,并不断改进而形成系列,成为最普遍使用的单片机内核和指令系统。后来,ATMEL、NXP等多家著名半导体公司推出兼容和增强的51系列单片机,应用普遍,因此成为单片机教学的主要示例,熟悉其结构和指令的工程师数量庞大。这几年,随着AVR、PIC等更高性能单片机的推广使用,特别是ARM Cortex-M系列32位MCU价格的持续走低,原来主要以生产51兼容的通用单片机的半导体公司才逐渐淡出市场,但仍有大量以51为内核的计量、无线通信等专用芯片存在。在成本敏感度高的中国市场,以51为内核的STC仍然很受欢迎,看来还要持续一段时间。所以,在今后的一段时间内,51系列单片机还有市场,还有一些人仍要从51开始学习单片机,所以单片机的介绍也要从MSC-51开始。MSC-51系列最典型的型号是ATMEL公司的AT89C51。

 

一、AT89C51基本描述:
1.AT89C51内核的主要组成结构:


AT89C51是以ALU位中心的8位微控制器(MCU),完成运算和控制功能;内部有128B的数据存储器(内部RAM),地址范围00H~7FH;有21个特殊功能寄存器,在内部RAM的SFR块中(又称专用寄存器),离散分布于地址80H~FFH中。计数器PC,是一个独立的16位专用寄存器,其内容为将要执行的指令地址(程序存储器地址)。
51系列单片机在存储器配置上采用“哈佛”结构,即物理上具有独立的程序寄存器和数据寄存器,但逻辑上采用相同的地址空间,利用不同的指令和寻址方式进行访问。AT89C51内部有4kB FLASH,用来存储程序、原始数据、表格等,称为程序存储器(片内ROM);有4个8位可编程I/O口(P0、P1、P2、P3);一个UART串行通信口;2个16位定时/计数器;5个中断源,两个中断优先级的中断控制系统;一个片内振荡器和时钟电路。

 

2.AT89C51的主要引脚功能:


GND和Vcc:电源引脚,Vcc接直流电源,5.00V±20%。
RST:复位输入端,此引脚上至少要出现2个机器周期的高电平(12个振荡周期)。
ALE/PROG-:地址锁存允许/编程脉冲,对内部FLASH编程时用于输入编程脉冲。
PSEN-:外部ROM读取选通信号,每个机器周期出现2次有效信号,作为外ROM的OE。
EA-/Vpp:内/外ROM选择及内ROM编程电源,低电平时只访问片外ROM。

 

3.AT89C51的时钟周期:


当外接12MHz晶振时,振荡周期1/12us、状态时钟周期1/6us、机器周期1us。

 

4.AT89C51对外部储存器的访问:


当访问外部存储器时,用来锁存P0口输出的低8位地址。即使不访问外部存储器,仍以不变的周期输出信号,频率为振荡频率的1/6。但每当访问外部数据寄存器时,将跳过一个ALE脉冲。

 

5.AT89C51的复位信号及影响的寄存器:


要实现复位操作,必须使RST引脚至少保持两个机器周期的高电平,再从高电平变为低电平。完成复位后,MCU从ROM中的0000H单元开始执行程序。复位电路常用10uF电容与10k电阻组合。

寄存器

复位后内容

寄存器

复位后内容

寄存器

复位后内容

寄存器

复位后内容

ACC

00H

B

00H

PSW

00H

SP

00H

TL0

00H

TH0

00H

TL1

00H

TH1

00H

DPTR

0000H

P0~P3

FFH

SCON

00H

TMOD

00H

IP

xxx00000B

IE

0xx00000B

PCON

0xxx0000B

TCON

00H

SBUF 不定

 

二、存储器组成:


AT89C51由程序存储器ROM和数据存储器RAM组成。ROM分为片内和片外,片内ROM为4KB,地址范围0000H~0FFFH;片外ROM可扩展到64KB。RAM可分为片内和片外,片内RAM由128B(00H~7FH)的片内数据寄存器和21个特殊功能寄存器(在80H~FFH中)组成;片外RAM可扩展到64KB。

 

1.程序寄存器ROM:


AT89C51有4KB片内ROM,用于存储编好的程序、表格、常数,简称程序内存。当程序内存不够用时,可扩展片外程序存储器。片内与片外的地址空间是统一编址的,地址范围为0000H~FFFFH,总共64KB。
MCU工作时,只能读取ROM,所以称为只读存储器。MCU复位后,程序计数器PC的内容为0000H,所以系统必须从0000H单元开始取指令并执行程序,用户程序的第1条指令应放置在这里。
片外ROM的低4KB地址与片内ROM重叠,选择由EA-引脚来控制。EA-=0,复位后系统从片外ROM的0000H地址单元开始执行,且只能执行片外ROM中的程序;EA-=1,复位后系统从片内ROM的0000H地址单元开始执行程序,当PC值大于0FFFH时自动转到片外ROM执行程序。
ROM内有5个特殊地址,是MCU的5个中断服务子程序的入口地址,相邻中断入口地址间隔为8个单元。

外中断0

0003H

外中断1

0013H

串口中断

0023H

定时/计数器中断0

000BH

定时/计数器中断1

001BH




当程序中使用中断时,一般在这些入口地址放置一条跳转指令,而相应的中断服务程序放于转移地址中。如果中断服务程序不超过8个单元,则可放入相应的入口地址开始的8个单元中。如果没有用到中断功能,这些单元也可作为一般用途的程序存储器。

 

2.数据存储器RAM:


AT89C51片内数据存储器RAM的容量为128B,地址范围为00H~7FH。使用时可分为4个区,即工作寄存器区、可位寻址区、数据缓冲区和堆栈区。堆栈区的栈底地址复位后默认为07H,可由程序中的指令改变。

字节地址

位地址

7F~~~30

数据缓冲区

2F

 

 

 

 

7F

7E

7D

7C

7B

7A

79

78

2E

77

76

75

74

73

72

71

70

2D

6F

6E

6D

6C

6B

6A

69

68

2C

67

66

65

64

63

62

61

60

2B

5F

5E

5D

5C

5B

5A

59

58

2A

57

56

55

54

53

52

51

50

29

4F

4E

4D

4C

4B

4A

49

48

28

47

46

45

44

43

42

41

40

27

3F

3E

3D

3C

3B

3A

39

38

26

37

36

35

34

33

32

31

30

25

2F

2E

2D

2C

2B

2A

29

28

24

27

26

25

24

23

22

21

20

23

1F

1E

1D

1C

1B

1A

19

18

22

17

16

15

14

13

12

11

10

21

0F

0E

0D

0C

0B

0A

09

08

20

07

06

05

04

03

02

01

00

18~1F

3组(R0~R7)工作寄存器组

10~17

2组(R0~R7)工作寄存器组

08~0F

1组(R0~R7)工作寄存器组

00~07

0组(R0~R7),默认工作寄存器组

工作寄存器:片内RAM中最低的32个单元(00H~1Fh)是工作寄存器区,按地址由小到大分为4个组,每个组有8个8位寄存器,地址由低到高依次命名为R0~R7。当前工作寄存器只能有一个组,选用哪个组由PSW中的RS0和RS1位确定,可由指令设置。复位初始化后RS0=0、RS1=0,使用0组,为默认工作寄存器组。
位寻址区:片内RAM中,20H~2FH地址单元构成固定的可位寻址存储区。每个单元有8位,16个单元共128位,每个位都有一个位地址。它们可以位寻址、位操作,即可对该位进行置1、清0、求反操作等。指令系统中有位操作指令。程序中没有位操作时,该区的地址单元可做他用。
数据缓冲区:片内RAM中,30H~7FH地址单元一般可做数据缓冲区,用于存放各种数据和中间结果。没有使用的工作寄存器单元和没有使用的可位寻址单元都可用做数据缓冲区。
堆栈区:是在片内RAM中开辟的一片特殊数据存储器,对堆栈存取数据按“先进后出”原则。用堆栈指针SP指向栈顶地址,堆栈的最低地址叫栈底,对堆栈存取数据时栈顶地址相应变化,即SP的内容相应变化。复位后,栈底地址单元为07H,因为此时堆栈内还未存放数据,堆栈指针SP的内容与栈底值相同,也为07H。可以根据需要设置SP的初值。

 

3.特殊功能寄存器SFR:


特殊功能寄存器,也称专用寄存器,是MCU各功能部件所对应的寄存器,用来存放相应功能部件的控制命令、状态或数据。AT89C51内的端口锁存器、程序状态字、定时器、累加器、堆栈指针、数据指针,以及其他控制寄存器都是特殊功能寄存器。SFR离散地分布在片内RAM的高128B(80H~FFH)中,共21字节。

SFR符号及名称

字节

地址

位地址、位标志

D7

D6

D5

D4

D3

D2

D1

D0

B:B寄存器

F0

F7

F6

F5

F4

F3

F2

F1

F0

B.7

B.6

B.5

B.4

B.3

B.2

B.1

B.0

ACC:累加器

E0

E7

E6

E5

E4

E3

E2

E1

E0

ACC.7

ACC.6

ACC.5

ACC.4

ACC.3

ACC.2

ACC.1

ACC.0

PSW程序状态字

D0

D7

D6

D5

D4

D3

D2

D1

D0

CY

AC

F0

RS1

RS0

OV

-

P

IP:中断优先级寄存器

B8

-

-

-

BC

BB

BA

B9

B8

-

-

-

PS

PT1

PX1

PT0

PX0

P3:P3口

B0

B7

B6

B5

B4

B3

B2

B1

B0

P3.7

P3.6

P3.5

P3.4

P3.3

P3.2

P3.1

P3.0

IE:中断允许寄存器

A8

AF

AE

AD

AC

AB

AA

A9

A8

EA-

-

-

ES

EY1

EX1

ET0

EX0

P2:P2口

A0

A7

A6

A5

A4

A3

A2

A1

A0

P2.7

P2.6

P2.5

P2.4

P2.3

P2.2

P2.1

P2.0

SBUF:串口数据缓冲寄存器

99

不可位寻址

SCON:串口控制寄存器

98

9F

9E

9D

9C

9B

9A

99

98

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

P1:P1口

90

97

96

95

94

93

92

91

90

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

TH1:T1寄存器高8位

8D

不可位寻址

TH0:T0寄存器高8位

8C

不可位寻址

TL1:T1寄存器低8位

8B

不可位寻址

TL0:T0寄存器低8位

8A

不可位寻址

TMOD:定时/计数器方式寄存器

89


GATE

C/T-

M1

M0

GATE

C/T-

M1

M0

TCON:定时/计数器控制寄存器

88

8F

8E

8D

8C

8B

8A

89

88

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

PCON:电源控制寄存器

87


SMOD

-

-

-

GF1

GF0

PD

IDL

DPH:数据指针高8位

83

不可位寻址

DPL数据指针低8位

82

不可位寻址

SP:栈指针寄存器

81

不可位寻址

P0:P0口

80

87

86

85

84

83

82

81

80

P0.7

P0.6

P0.5

P0.4

P0.3

P0.2

P0.1

P0.1

其中地址能被8整除(字节末位为0H或8H)的寄存器既可字节寻址又可位寻址,其他只可字节寻址。可位寻址的特殊寄存器的每一位都有位地址,有的还有位名称、位编号。
ACC:累加器,助记符为A,是一个最为常用的特殊功能寄存器。
B:乘除法指令中要用通用的寄存器,也可做一般寄存器用。
PSW:程序状态字,是一个8位寄存器,用来存放指令执行后的有关状态。各位定义为:

PSW.7

PSW.6

PSW.5

PSW.4

PSW.3

PSW.2

PSW.1

PSW.0

C

AC

F0

RS1

RS0

OV

-

P

C:进位标志,用于表示加减运算过程中累加器最高位有无进位或借位。移位操作也影响。
AC:辅助进位,加减运算时低4位向高4位进位或借位。
F0:用户标志位,是一个供用户定义的标志位。
RS1和RS0:工作寄存器选择位,用于设定当前使用的工作寄存器的组号。
OV:溢出标志,指示运算过程是否发生了溢出。
P:奇偶标志位,表明累加器A中“1”的个数的奇偶性,奇数置1,偶数置0。
SP:堆栈指针。系统复位后初始化为07H,数据从08H开始存放,这里属于工作寄存器组1~3,如果程序设计中要用到,就要把SP设置为1FH或更大。MCU调用子程序或响应中断时,自动发生数据的入栈、出栈操作,还有对堆栈操作的指令。
SBUF:串行数据缓冲器,实际上有发送缓冲器和接收缓冲器两个独立的寄存器。
TH0/TL0和TH1/TL1:分别是定时/计数器的16位计数寄存器,也可单独作4个8位寄存器。

 

4.片外RAM:


片内RAM不够用时,可扩展片外RAM,最大范围0000H~FFFFH,共64KB。片外RAM与片内RAM有部分地址重叠,但操作片内RAM和片外RAM用不同的指令,片内用MOV,片外用MOVX。


关键字:51单片机  组成结构 引用地址:51单片机的主要组成结构分析详解

上一篇:51单片机入门 - 串口工作原理知识点汇总
下一篇:51单片机入门 - 自己动手搭建实验板

推荐阅读最新更新时间:2024-11-10 11:14

51单片机-电位器控制舵机
1.题目要求 为了使ADC的知识能配合其他模块实现不同功能,这里我们打算通过扭动电位器(滑动变阻器)来控制舵机桨的位置,如果我们顺时针扭一圈电位器,那么舵机桨也会跟着从一端旋转到另一端。 2.main.c测试代码 #include reg52.h #include function.h //详见第六章第8讲 #include timer.h //详见第八章第11讲 #include lcd.h //详见第十一章第3讲 #include adc.h //详见第十四章 sbit PWMOUT=P1^7; //舵机信号线接口 u8 flag20ms = 0; u8 PWM_VAL = 0; void m
[单片机]
<font color='red'>51单片机</font>-电位器控制舵机
基于51单片机红外编码解码的C语言程序
当学习键按下后,红外接收头便可将接受到的信号存储到单片机中。在接受到通用遥控器发出的信号后,如果按下发射键,单片机将调出刚刚储存的信息,通过红外发射头发射出和遥控器一样的信号来达到控制的作用。 #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit studylamp=P2^7; sbit lamp=P2^6; sbit studykey=P3^2; sbit remotein=P1^1;
[单片机]
51单片机还适合作为初学者入门的单片机吗?
对于很多初学者来说考虑要不要从51单片机入门是个挺头疼的问题。毕竟现在许多公司已经不用51单片机做产品了。但是51单片机流行了这么久,它肯定是一款很经典的产品。我以前也是从51开始学的。 我个人的建议是从51单片机作为入门是一个非常不错的选择。大多数的从业者都是以51单片机作为起点的。下面就具体说说我推荐51作为入门的具体原因。 容易入门 我们作为初学者脑海里可能没有单片机的概念,如果我们入门以STM32或者STM8S这类单片机来入门的话,作为初学者我们会感到迷茫无从下手。STM32这类的单片机内容会比较多,一开始就要了解单片机的方向寄存器还要了解单片机的数据寄存器,甚至还有库函数,太多的知识涌入进来,一时间让初学
[单片机]
51单片机驱动1602液晶显示器的小例子
首先附上1602的相关资料: 引脚功能: 1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VCC接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生 鬼影 ,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第7~14脚:D0~D7为8位双向数据端。 第15~16脚:空脚或背灯电源。15脚背光正极,
[单片机]
<font color='red'>51单片机</font>驱动1602液晶显示器的小例子
51单片机 LED点阵的呼吸灯效果
STC 89C52RC #include reg52.h typedef unsigned char uchar; typedef unsigned int uint; typedef unsigned long ulong; sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; ulong periodCnt = 0; //PWM周期计数值 uchar highRH = 0; //高电平重载值的高字节 uchar highRL
[单片机]
基于51单片机的两路温度控制器的设计方案
1.引言 目前,温度控制器存在的问题是如何缩减成本,减少功耗,温度测量的准确性和多路温度的同时显示。本方案设计的实现基于C51单片机的两路温度控制器,做到成本最低化,精确度高,两路温度的显示和控制,能在温度超出设定的最高温度时启动电风扇进行降温,在温度低于设定的最低温度时启动蜂鸣器报警,能够用户设定最高最低温。 2.系统结构 温度控制器系统包括以下几个主要部分:温度传感器,报警电路,LED显示电路,键盘控制,89C51控制部分。如图所示:     本系统设计实现:启动温度控制器后,绿灯亮起,四位LED数码显示器上前两位为温度传感器1所测的环境温度,后两位为温度传感器2所测的环境温度。 3.硬件结构 3.1 温度传感器 本设计采用
[电源管理]
基于<font color='red'>51单片机</font>的两路温度控制器的设计方案
51单片机十进制整数与二进制整数转换汇编语言子程序
==================================== 【4位十进制整数转换为二进制整数子程序】 入口:十进制整数千位数RAM址存于R0,百位数、十位数、个位数RAM址依次加1; 返回值:转换所得二进制整数存于R3(高字节)R4(低字节)。 DtoB: MOV R2, #4 ;;R2←递减的循环次数初值 MOV A, @R0 MOV R4, A ;;R4←千位数 LP1 : MOV A, R4 ;;R3R4←(R3)(R4)*10 MOV B, #10 MUL AB MOV R4, A MOV B, #10 XCH A
[单片机]
51单片机之串口通信 ---- 自学笔记
一、串口通信 1.1、计算机通信的基础 计算机通信:是将计算机技术与通信技术相结合,完成计算机与外部设备或计算机与计算机之间的信息交换,可分为两大类:并行通信与串行通信。 多微机系统的广泛应用与计算机网络技术的普及。 计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。 通信有两种方式:并行通信、串行通信。 在多微机系统以及现代测控系统中信息的交换多采用串行通信。 1.2、并行通信 将数据字节的各位用多条数据线同时进行传送。同时传送8个字节(下图 ) 串行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收困难。 1.3、串行通信 将数据字节分成一位一位的形式存,在一条传输
[单片机]
<font color='red'>51单片机</font>之串口通信 ---- 自学笔记

推荐帖子

【ESK32-360测评】合泰与血压算法移植(2)
之前算法移植还没有说完,一直在忙于其它的事情,先进行血压的基本性的需求:1.泵阀、压力传感器介绍以及基本的电路泵阀控制电路然后将泵阀的IO口线接到我们的合泰线路板上。2.压力芯片的选择通过SPI接口接到合泰的开发板上,从后面焊接出来。3.泵阀袖带以及气路的接法以上都接完之后,就将算法开始进行移植,以下是算法的关键部分代码。4.关键部分代码其中bpm_main()为BMP的状态机;uart_main()为将血压数据传到电脑上;
单片大白菜 国产芯片交流
什么是TCP协议
什么是TCP协议英文原义:TransmissionControlProtocol中文释义:(RFC-793)传输控制协议该协议主要用于在主机间建立一个虚拟连接,以实现高可靠性的数据包交换。IP协议可以进行IP数据包的分割和组装,但是通过IP协议并不能清楚地了解到数据包是否顺利地发送给目标计算机。而使用TCP协议就不同了,在该协议传输模式中在将数据包成功发送给目标计算机后,TCP会要求发送一个确认;如果在某个时限内没有收到确认,那么TCP将重新发送数据包。另外,在传输的过程中,如果
dontium RF/无线
【LSM6DSOX的FSM有限状态机理解】--状态机指令介绍,附【中文版指令集】
在LSM6DSOX开箱与体验Portnotopen¬supported问题解决中分享了初次尝试使用LSM6DSOX传感器的过程和其中遇到的问题解决方案。在【LSM6DSOX的FSM有限状态机理解】--状态机简介中对LSM6DSOX传感器中的FSM有限状态机本质进行了简要的介绍。在【LSM6DSOX的FSM有限状态机理解】--编程模块简介中对FSM编程模块的结构、变量结合Unico中FSM界面进
justd0 ST MEMS传感器创意设计大赛专区
samr21 运行contiki examples
contiki系统的网络能力很强大,里面有最新的6LoWPAN协议和Rime协议还有思科提供的ipv6,可以很轻松的实现基于IP的物联网。想要把contiki移植到samr21平台上最重要的就是要实现下面这些函数:(contiki把整个框架已经写好了,我们只要去针对不同的平台是实现这些函数即可)/***ThestructureofadevicedriverforaradioinContiki.*/structradio_driver{int(*
songjw Microchip MCU
串口通讯
单片机接收小程序,当用串口调试工具发送字符时,接收没问题而发送字符串时,通讯异常,会丢失或者乱码,而单片机发送字符串,是OK的是不是很奇怪啊串口通讯你的波特率是多少,会不会与你单片机的接收程序有关.在串口中断服务程序中,不能占用太长时间.否则会影响字符串的接收.“当用串口调试工具发送字符时,接收没问题而发送字符串时,通讯异常,会丢失或者乱码,而单片机发送字符串,是OK的”没看明白到底有什么问题。“而发送字符串时,通讯异常,会丢失或者乱码,”是指什么发送字符串?什
stycx 嵌入式系统
关于CE5的补丁,做个调查,顺便散分!!!
大家做的产品,无论是量产的还是正在开发中的,都打上了CE5的补丁了吗?这些补丁全部打上之后对系统的性能会有改善或者倒退的影响吗?我现在正在做的产品没有打任何补丁,但是总感觉电源管理有些问题,有时候睡眠唤醒收不到PBT_TRANSITION以及PBT_RESUME消息,除此之外目前还没有遇到非常严重的系统级别的bug。不知道大家有没有遇到这个PM的问题,欢迎大家踊跃发言。另,最近降薪了,30%的降幅,很是郁闷,特此散分!!!!关于CE5的补丁,做个调查,顺便散分!!!没打过补丁!关注一
1230 嵌入式系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved