找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

走进单片机世界(三)

[复制链接]
187196467 发表于 2011-11-21 22:24:33 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
MCS-51系列单片机的总体介绍
MCS-51系列单片机是intel公司才采用HMOS技术制造的8位高档微机系列产品。

MCS-51系列单片机特性见表

型号
性能

8051


80C51

8751

8031

80C31

8052

8032
程序存储器
4KB
ROM
4KB
ROM
4KB
EPROM
――
――
8KB
ROM
――
数据存储器
128B
128B
128B
128B
128B
256B
256B
程序存储器扩展
64KB
64KB
64KB
64KB
64KB
64KB
64KB
数据存储器扩展
64KB
64KB
64KB
64KB
64KB
64KB
64KB
最高时钟频率
12MHZ
12MHZ
12MHZ
12MHZ
12MHZ
12MHZ
12MHZ
16位定时/计数器
2
2
2
2
2
3
3
并行I/O线
32
32
32
32
32
32
32
串行I/O线
同步方式或异步方式
中断线
5
5
5
5
5
6
6

单片机内部结构分析

80C51的内部结构示意图
8ea22a0d.jpg


从图中可以看到,在一个80C51单片机内部有以下一些功能部件:
● 一个8位CPU,用来运算、控制。
● 片内数据存储器RAM,对于51系列单片机而言,容量是128字节。
● 片内程序存储器ROM,对于89C51单片机而言,容量是4K(4096个单元)。
● 4个8位的并行I/O口,分别是P0、P1、P2、P3。
● 2个16位定时/计数器。
● 中断结构。
● 一个可编程全双工通用异步接收发送器UART。
● 一个片内振荡器用于时钟的产生。
● 可寻址64KB外部程序存储器和外部数据存储器的总线扩展结构。

80C51CPU的内部结构与功能。

1.运算器
80C51CPU中的运算器主要包括一个可以进行算术运算和逻辑运算的ALU(算术和逻辑运算单元)、8位暂存器TMP1和TMP2、8位累加器ACC、寄存器B、以及程序状态字PSW等。其中累加器ACC是一个8位的存储单元,是用来放数据的。但是,这个存储单元有其特殊的地位,是单片机中一个非常关键的单元,很多运算都要通过ACC来进行。以后在学习指令时,常用A来表示累加器。但有一些地方例外,比如在PUSH指令中,就必须用ACC这样的名字。一般的说法,A代表了累加器中的内容、而ACC代表的是累加器的地址。

2.B-8位寄存器
一般情况下,可以做为通用的寄存器来用,但是,在执行乘法和除法运算结时。B就参与其中,存放运算的一个操作数和运算后的一个结果。

3.PSW程序状态字
这是一个八位寄存器,用来存放当前有关指令执行结果的状态标志,因此我们可以了解CPU的当前状态,并作出相应的处理。
程序状态字PSW的各脚功能:



D7

D6

D5

D4

D3

D2

D1

D0

含义

CY

AC

F0


RS1

RS0

OV

―――


各位的功能如下:
(1) CY:进位标志。80C51中的运算器是一种8位的运算器。8位运算器只能表示0~255。如果做加法,两数相加可能会超过255。这样最高位就会丢失,造成运算错误。为解决这个问题,设置一个进位标志。如果运算时超过了255,把最高位就进到这里来,这样就可以得到正确的结果了。
例:78H+97H(01111000+10010111)结果是10F,即100001111一共9位,但是存数的单元只能放下8位,也就是00001111。这样,结果就变成了78H+97H=0FH,显然不对,因此设置了CY位,在运算后,将最高位送到CY。只要在程序中检查CY是1还是0,就能知道结果究竟是0FH还是10FH,避免出错。
(2) AC:半进位标志。
例:57H+3AH(01010111+00111010)结果是91H,即10010001。就整个数而言,并没有产生溢出,所以CY=0。但是这个运算的低4位相加(7+A)却产生了进位,因此,运算之后AC=1。
(3) F0:用户标志位:由编程人员决定什么时候用,什么时候不用。
(4) RS1、RS0:工作寄存器组选择位。
(5) 0V:溢出标志位。
(6) P:奇偶校验位。它用来表示ALU运算结果中二进制数位1的个数的奇偶性。若为奇数,则P=1,否则为0。
例:运算结果是78H(01111000),显然1的个数为偶数,所以P=0。

4.DPTR(DPH、DPL)
由两个8位寄存器DPH和DPL组成16位的寄存器DPTR称之为数据指针,可以用它来访问外部数据存储器中的任一单元。如果用不到这一功能,也可以作为通用寄存器使用。

5.SP――堆盏指针
首先介绍一下堆盏的概念。日常生活中有这样的现象,家里洗的碗,一只一只摞起来,最后洗的碗放在最上面,而最早洗的碗则放在最下面。取时正好相反,先从最上面取,这种现象用一句话来概括:先进后出,后进先出。这种现象在很多场合都有,比如在建筑工地上堆放的材料,仓库里放的货物等,都遵循先进后出,后进先出的规律。
在单片机中,也可以在RAM中构造这样一个区域,用来存放数据,这个区域存放数据的规律就是先进后出,后进先出,称之为堆盏。为什么要这样来存放数据呢?存储器本身不是可以按地址来存放数据吗?知道了地址的确就可以知道里面的内容。但如果需要存放一批数据,每一个数据都需要记住其所在的地址单元,比较麻烦。如果规定数据一定是一个接一个地存放,那么只要知道第一个数据所在单元的地址就可以了。
80C51单片机是在内存(RAM)中划一块空间用于堆盏。但是用内存那一块不好确定,因为80C51是一种通用的单片机,做不同的项目时实际需求各不相同,有的需要多一些堆盏,而有的工作则不需要那么多,所以怎样分配都不合适。如何来解决这个问题?分不好就不分了,把分配的权利交给用户(单片机开发者),根据项目的需要去确定所以80C51单片机堆盏的位置是可以变化的,而这种变话体现在SP中值的变化。如果让SP的值等于27H,相当于是一个指针指向27H单元,同样,只要把SP单元中的数据改成其它值,那么这个区域在RAM中的位置马上就改变了。比如把SP中的值改为5FH,那么堆盏就到了RAM区后面的部分,程序中只要改变SP的值即可,很方便。实际的80C51单片机中,堆盏指针所指的位置并非就是数据存放的位置,而是数据存放的前一个位置。例如开始时指针是指向27H单元,那么在进行堆盏操作时,第一个存入数据的位置是28H单元,而不是27H单元,出现这种情况的原因与堆盏指令执行的过程有关,以后将在学习堆盏命令时会学到。
从上图还可以看到,图中有一些如TCON、TH1、TL1等,在单片机中有一些独立的存储单元用来控制这些部件,这些存储单元被称为特殊功能寄存器(SFR)。何谓特殊功能,就是指这些寄存器里面的内容是有特定含义的,不可以随便放数据。例如,有段程序中能这样写 MOV R7,#255,其它程序段里也许会出现MOV R7,#100之类的指令,即R7中可以送入任意数而不必但心出现问题。这类寄存器本身没有特定的用途,它相当于一个货物的中转站,在其中可以放任意内容。而指令MOV P1,#0FEH中的数0FE是有特定含义的,它取决于硬件及所要完成的任务。如要让P1.0所接的LED亮而其P1口其它引脚所接的LED不亮,就一定要送这个数到P1去,也就是说P1这一类的寄存器不能作为中转站来使用,送入其中的数是有特定的含义,称之为特殊功能寄存器.
特殊功能寄存器表
符号
地址
功能介绍
符号
地址
功能介绍
B
F0H
B寄存器
TL1
8BH
定时/计数器0(高8位)
ACC
E0H
累加器
TL0
8AH
定时/计数器0(低8位)
PSW
D0H
程序状态字

TMOD

89H
定时/计数器方式控制寄存器
IP
B8H
中断优先级控制寄存器
P3
B0H
P3口锁存器
TCON
88H
定时/计数器控制寄存器
IE
A8H
中断允许控制寄存器
DPH
83H
数据地址指针(高8位)
P2
A0H
P2口锁存器
DPL
82H
数据地址指针(低8位)
SBUF
99H
串行口锁存器
SP
81H
堆盏指针
P1
90H
P1口锁存器
P0
80H
P0口锁存器
 楼主| 187196467 发表于 2011-11-21 22:24:50 | 显示全部楼层
符号
地址
功能介绍
符号
地址
功能介绍
TH1
8DH
定时/计数器1(高8位)
PCON
87H
电源控制寄存器
TH0
8CH
定时/计数器1(低8位)





6.控制器
80C51CPU中的控制器包括程序计数器PC、指令寄存器、制令译码器、振荡器和定时电路等。其中PC共有16位,因此,80C51单片机一共可以对16为地址线进行管理,即80C51单片机可以对64KB的程序存储器(ROM)进行直接寻址。
控制器的大部分功能对单片机的使用者来说是不可的,所以这里不作详细介绍了。

7.并行I/O口
80C51的32根I/O线分为4个双向并行口P0~P3。每一根I/O线都能独立地用作输入或输出;每一根I/O线均包含锁存器、输出驱动器和输入缓冲器(三态门)
P0口受内部控制信号的控制,可分别切换地址/数据总线、I/O口2种工作状态。
P1口只有I/O口一种工作状态。
P2口受内部控制信号的控制,可以有地址总线、I/O口2种工作状态。
P3口除了用作一般I/O口外,每一根线都可执行与口功能无关的第2种输入/输出功能。

8.串行I/O口
80C51有串行口,通过异步通信方式(UART)与串行传送信息的外部设备相连接,或用于通过标准的异步通信协议进行全双工通信。

9.定时/计数器
80C51内的可编程定时/计数器由控制位C/T来选择其功能。作为定时器,每个机器周期加1(计数频率为时钟频率的1/12);作为计数器时,对应外部事件脉冲的负沿加1(最高计数频率为时钟频率的1/24)。

10.时钟
80C51内部有晶振感抗振荡器。其外接石英晶体形成谐振回路,产生时钟信号。若用外部时钟源,则XTAL1接地,XTAL2接外部时钟。片内时钟发生器将振荡器信号2分频,为芯片提供2相时钟信号。一个机器周期由6个时钟状态组成,每个时钟状态又由2个振荡脉冲组成,因此一个机器周期包括12个振荡脉冲。


80C51基本特性及引脚定义
80C51是8位(数据线是8位)单片机,片内有256BRAM及4KBROM。中央处理器单元实现运算和控制功能。内部数据存储器共256个单元,访问它们的地址是00H~FFH,其中用户使用前128个单元(00H~7FH),后128个单元被特殊功能寄存器占用。内部的2个16位定时/计数器用作定时或计数。并可用定时或计数的结果实现控制功能。80C51有4个8位并行口(P0、P1、P2、P3),用以实现地址输出及数据输入/输出。片内还有一个时钟振荡器,外部只需接入石英晶体即可振荡。
80C51采用40引脚双列直插式封装(DIP)方式。


80C51的引脚排列及逻辑符号
80eeddda.jpg

80C51的引脚定义及功能
1.主电源引脚VCC和VSS

VCC:电源端。工作电源和编程校验(+5V)。
VSS:接地端。

2.时钟振荡电路引脚XTAL1和XTAL2
XTAL1和XTAL2分别用作晶体振荡器电路的反相器输入和输出端。在使用内部振荡电路时,这两个端子用来外接石英晶体,振荡频率为晶振频率,振荡信号送至内部时钟电路产生时钟脉冲信号。若采用外部振荡电路,则XTAL2用于输入外部振荡脉冲,该信号直接送至内部时钟电路,而XTAL1必须接地。

3.控制信号引脚RST/VPD、ALE/PROG、PSEN和EA/VPP
RST/VPD:为复位信号输入端。当RST端保持2个机器周期(24个时钟周期)以上的高电平时,使单片机完成了复位操作。第二功能VPD为内部RAM的备用电源输入端。主电源一旦发生断电,降到一定低电压值时,可通过VPD为单片机内部RAM提供电源,以保护片内RAM中的信息不丢失,使上电后能继续正常运行。

ALE/PROG:ALE为地址锁存允许信号。在访问外部存储器时,ALE用来锁存P0扩展地址低8位的地址信号;在不访问外部存储器时,ALE也以时钟振荡频率的1/6的固定速率输出,因而它又可用作外部定时或其它需要。但是,在遇到访问外部数据存储器时,会丢失一个ALE脉冲。ALE能驱动8个LSTTL门输入。第2功能 PROG是内部ROM编程时的编程脉冲输入端。

PSEN:外部程序存储器ROM的读选通信号。当访问外部ROM时,PSEN产生负脉冲作为外部ROM的选通信号;而在访问外部数据RAM或片内ROM时,不会产生有效的PSEN信号。PSEN可驱动8个LSTTL门输入端。

EA/VPP:访问外部程序存储器控制信号。对80C51而言,它们的片内有4KB的程序存储器,当EA为高电平时,CPU访问片内程序存储器有两种情况:第1种是,访问地址空间在0~4KB范围内,CPU访问片内程序存储器;第2种是,访问的地址超出4KB时,CPU将自动执行外部程序存储器的程序,即访问外部ROM。当EA接地时,只能访问外部ROM。第2种功能VPP为编程电源输入。

4.4个8位I/O端口P0、P1、P2和P3
P0口(P0。0~P0。7)是一个8位漏极开路型的双向I/O口。第2功能是在访问外部存储器时,分别提供低8位地址线和8位双向数据总线。在对片内ROM进行编程和校验时,P0口用于数据的输入和输出。
P1口(P1。0~P1。7):是一个内部带提升电阻的准双向I/O口。在对片内ROM编程校验时,P1口用于接收低8位地址信号。
P2口(P2。0~P2。7):是一个内部带提升电阻的8位准双向I/O口。第2功能是在访问外部存储器时,输出高8位地址信号。在对片内ROM进行编程和校验时,P2口用作接收高8位地址和控制信号。
P3口(P3。0~P3。7):是一个内部带提升电阻的8位准双向I/O口。在系统中,这8个引脚都有各自的第2功能。见下表
P3口的各引脚
第2功能
P3。0
RXD(串行口输入)
P3。1
TXD(串行口输出)
P3。2
INT0(外部中断0输入)
P3。3
INT1(外部中断1输入)
P3。4
T0(定时/计数器的外部输入)
P3。5
T1(定时/计数器的外部输入)
P3。6
WR(片外数据存储器写选通控制输出)
P3。7
RD(片外数据存储器读选通控制输出)


80C51的存储器和寄存器MCS-51系列单片机内集成有一定数量的程序存储器和数据存储器。对80C51来说,片内有256B的数据存储器及4KB的程序存储器。

1.程序存储器
程序存储器用于存放编写好的程序或常数。EA引脚接高电平,即可从内部程序存储器中(4KB)读取指令,超过4KB后,CPU自动转向外部ROM执行程序;EA引脚接低电平,则所有的读取指令操作均在外部ROM中。读取程序存储器中的常数表格用MOVC指令。
程序存储器的寻址空间为64KB,其中有7个单元具有特殊功能(中断入口地址),见下表


中断入口地址
地址
事件名称
0000H
系统复位
0003H
外部中断0
000BH
定时器0溢出中断
0013H
外部中断1
001BH
定时器1溢出中断
0023H
串行口中断
80C51被复位后,程序计数器PC的内容为0000H,因此系统必须从0000H单元开始取指令执行程序。一般在该单元中存入一条跳转指令,而用户设计的程序从跳转后的地址开始存放。AT89C51的内部程序存储器(4KB ROM)足可存放2000条双字节指令,AT89C52就更不用说了,因此很少用外部扩展ROM,也就用不到MOVX这条指令。

2. 内部数据存储器
数据存储器分为外部数据存储器和内部数据存储器。访问内部数据存储器用MOV指令,访问外部数据存储器用MOVX指令。
80C51的内部数据存储器分成2块:00H~7FH和80H~FFH。后128B用作特殊功能寄存器(SFR)空间,21个特殊功能寄存器离散分布在80H~FFH的地址空间内。具体请看(AT89C52内部寄存器一览表)
cainiaowjs 发表于 2012-4-24 20:48:04 | 显示全部楼层
详细,很好!
{:soso_e113:}
ahljj 发表于 2012-10-4 08:30:35 | 显示全部楼层
{:e179:}{:e179:}
小逄子 发表于 2013-10-27 13:19:51 | 显示全部楼层
hen很不错  啊  啊      A
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-23 13:49 , Processed in 0.060832 second(s), 13 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表