第二章 单片机结构分析与指令系统
本章首先以80C51为例介绍MCS-51单片机的引脚及存储器结构,然后附上按单片机指令功能排列的全部指令及功能的简要说明的表格,供读者查询使用。
2.1 80C51单片机引脚简介
80C51单片机共有40个引脚,其中有2个是电源引脚,2个外接晶体振荡器引脚,4个控制引脚,还有四个端口(P0~P3),共32个输入输出引脚,如图所示。
1.电源引脚(2个)·Vcc (40脚):电源端,接+5V 电源。
·Vss (20脚):接地端。
2.外接晶振引脚(2个)
·XTAL1(19脚)和XTAL2(18脚):接石英晶体振荡器
3.控制引脚(4个)
·RST (9脚):复位信号引脚。当石英晶体振荡器运行时,在此引脚上出现两个机器周期的高电平,使单片机复位。
·ALE/PROG (30脚):地址锁存允许信号端。当访问外部存储器时,ALE (允许地址锁存)的输出用于锁存地址的低8 位。当不访问外部存储器时,ALE 端仍以不变的频率周期性地输出脉冲信号,此频率为石英晶振振荡频率的1 / 6 。因此,它可用作对外输出的时钟或用于定时。在向单片机写入程序时,此引脚用于输入编程脉冲(PROG )。
·PSEN (29脚):外部程序存储器的读选通信号端。在读外部ROM 时,PSEN 有效(低电平),以实现对外部程序存储器的读操作。
·EA/VPP (31脚):访问程序存储器选择控制信号。当EA 信号接低电平时,对ROM 的读操作(执行程序)限定在外部程序存储器;当EA 接高电平时,对ROM 的读操作(执行程序)从内部开始。
4.输入/输出引脚(32个)
80C51 共有4 个8 位输入/输出(I/O)端口,分别为PO 、P1 、P2 、P3 。每个端口有8 个引脚,共计32个引脚,每个引脚都可单独作输入或输出使用。 PO~P3 的内部结构差别不大,但使用功能有所不同。
·P0 端口:P0.0-P0.7(32-39 脚)在外部扩充存储器时,可用作数据总线或地址总线;不扩充时,可用作一般I/O使用,但内部无上拉电阻,当作为输入或输出时应在外部接上拉电阻。
·P1端口:P1.0-P1.7 ( 1-8 脚)只做I/O 使用,其内部有上拉电阻。
·P2 端口:P2.0-P2.7 ( 21-28 脚)用作一般I/O使用,其内部有上拉电阻。在扩充外部存储器时,也可当作地址总线使用。
·P3 端口:P3.0-P3.7 ( 10-17 脚)除了用作I/O使用外(内部有上拉电阻),还有一些特殊功能,也称第二功能,如表2.1 所示。
表2.1 P3口的第二功能定义
P3口引脚
|
第二功能
|
P3口引脚
|
第二功能
|
P3.0
|
RXD (串行输入口)
|
P3.4
|
T0 (定时器0外部计数输入)
|
P3.1
|
TXD (串行输出口)
|
P3.5
|
T1 (定时器1外部计数输入)
|
P3.2
|
INT0 (外部中断0)
|
P3.6
|
WR (外部数据存储器写选通)
|
P3.3
|
INT1 (外部中断1)
|
P3.7
|
RD (外部数据存储器读选通)
|
单片机的存储器
单片机的体积虽小,但“五脏俱全”,结构非常复杂,它是普通计算机的缩小版。不过初学者可以把它看成是一个“黑匣子”,只需知道它的内部有两个存储器,即程序存储器和数据存储器,如图2.2所示。
图2.2 单片机内有两个存储器示意图
存储器的作用可以类比为我们生活中的大书柜或我们出门时在寄存处临时寄存东西时看到的竖柜等。单片机内两个存储器一个是存放单片机程序的地方,称为程序存储器;另一个是程序运行中暂时存放数据的地方,称为数据存储器。
2.2.1 单元与位
存储器分若干“层”,“层”在存储器中称为单元。每层还有“隔”(8个或16个),“隔”在存储器中称为位(bit),如图所示。位是计算机所能表示的最基本、最小的数据单元。因为计算机采用二进制数,所以位就是1 个二进制位,它有两种状态:O 和1 。
2.2.2 字、字节和数制
1.计算机中的数制
人们最常用的是十进制数,而在计算中数是采用二进制表示的。但是,二进制数书写起来太长,且不便阅读和记忆,所以在计算机中一般采用十六进制数来表示十进制数、二进制数和十六进制数之间可以相互转换,它们之间的关系如表2.2 所示。
表2 . 2 十进制、二进制数及十六进制数对照表
十进制
|
二进制
|
十六进制
|
十进制
|
二进制
|
十六进制
|
0
|
0000
|
0
|
8
|
1000
|
8
|
1
|
0001
|
1
|
9
|
1001
|
9
|
2
|
0010
|
2
|
10
|
1010
|
A
|
3
|
0011
|
3
|
11
|
1011
|
B
|
4
|
0100
|
4
|
12
|
1100
|
C
|
5
|
0101
|
5
|
13
|
1101
|
D
|
6
|
0110
|
6
|
14
|
1110
|
E
|
7
|
0111
|
7
|
15
|
1111
|
F
|
为了区别上述3种数制,可在数的后面加一个字母,B表示二进制数制,D或不带字周表示十进制数制,H表示十六进制数制。例如15=11llB=OFH。注意,十六进制数第一位是字母时,书写时要在字母前加0,如OFH ,其中H表示十六进制数制,F表示15 ,书写时F前要加0 。
在C 语言编程中,十六进制数还有一种常用的表示方法:即在数的前边标有“0x”表示是十六进制数,例如,15=Oxf 。
2. 字(word)和字长
字是计算机内部进行数据处理的基本单位。通常它与计算机内部的寄存器、算数逻辑元、数据总线宽度相一致。计算机的每一个字所包含的二进制位数称为字长。