第1章 51单片机的基础知识

更新时间:2024-05-15 10:43:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 51单片机的基础知识

单片机全称单片微型计算机(Single Chip Microcomputer),即SCM。是一种将中央处理器(CPU)、存储器(RAM、ROM)、I/O接口电路、定时/计数器、串行通信接口及中断系统等部件集成到一块硅芯片上构成的相对完整的微型计算机系统。

单片机最初主要应用于控制领域,因而准确反映单片机本质的称谓应该是微控制器MCU(Micro Controller Unit),目前国际上大多采用MCU来代替SCM,而MCU也成了单片机领域公认的、最终统一的名词。但在国内,因“单片机”一词已约定俗成,故仍然用单片机来表示MCU,即本书所谓的“单片机”,实际上指的是MCU。

1.1 MCS-51系列单片机的基本结构

MCS-51系列单片机基于简单的嵌入式控制系统结构,被广泛应用于从军事到自动控制再到 PC 机键盘上的各种应用系统上,是我国目前应用最广泛的单片机系列。很多制造商都提供基于8051内核的MCS-51系列单片机,如Intel、Philips、Siemens 、Atmel、Winbond

2

等,这些制造商给MCS-51系列单片机加入了大量的性能和外部功能,如IC总线接口、A/D转换、看门狗、PWM 输出等,不少芯片的工作频率可达40MHz,工作电压下降到1.5V。基于一个内核的这些功能使得MCS-51系列单片机很适合作为厂家产品的基本架构,它能够运行各种程序,而开发者只需要学习这一个平台。本章以Intel的8051单片机为例介绍MCS-51系列单片机的基本知识。

1.1.1 MCS-51单片机的硬件组成及内部结构

1. MCS-51单片机的硬件组成

MCS-51单片机片内包含以下几个基本部件: ① 1个8位的CPU,用于进行运算和控制 ② 1个片内的振荡器及时钟电路 ③ 32个I/O口(4组8位端口),可单独寻址 ④ 2个16位定时计数器 ⑤ 1个全双工串行通信口

⑥ 5个中断源,两级中断优先级嵌套

⑦ 128字节内置 RAM,可用作寄存器和数据缓冲器

⑧ 4K字节的内置程序存储器ROM(不同型号单片机的内置ROM大小可能不同)

⑨ 可独立寻址64K外部数据存储器和64K外部程序存储器的控制电路(通过不同的指令分别寻址外部数据存储器和程序存储器)

MCS-51系列单片机的处理周期包括12个振荡周期,每12个振荡周期用来完成一项操作,如取指令或执行指令。计算指令执行时间可把时钟频率除以12,取倒数然后乘以指令执行所须的周期数。如果系统的时钟为11.059MHz,除以12后就得到了每秒执行的指令个数为921583条指令,取倒数将得到执行每条指令所须的时间为1.085ms。 2.MCS-51系列单片机的内部结构

MCS-51系列单片机的内部结构框图如图1-1所示。

- 1 -

图1-1 8051单片机的内部结构

1.1.2 MCS-51单片机的引脚功能

MCS-51系列单片机一般采用40个引脚,双列直插式封装,用HMOS工艺制造,其外部引脚排列如图1-2所示。其中,各引脚的功能为:

(a) DIP引脚图 (b) 逻辑符号

图1-2 8051单片机的引脚

⑴ 主电源引脚 Vcc(40脚):接+5V电源 Vss(20脚):接电源地

一般Vcc和Vss间应接高频去耦电容和低频滤波电容。 ⑵ 外接晶体或外部振荡器引脚

- 2 -

XTAL1(19脚):接外部晶振的一个引脚。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器OSC。当采用外部振荡器时,此引脚应接地。

XTAL2(18脚):接外部晶振的另一个引脚。在片内接至反相放大器的输出端和内部时钟电路的输入端。当采用外部振荡器时,此脚接外部振荡器的输出端。

⑶ 控制信号线 RST/VPD(9脚):复位信号输入端,复位/掉电时内部RAM的备用电源输入端。

ALE/PROG(30脚):地址锁存允许/编程脉冲输入。用ALE锁存从P0口输出的低8位地址;在对片内EPROM编程时,编程脉冲由此输入。

PSENEA(29脚):外部程序存储器读选通信号,低电平有效。

/VPP(31脚):访问外部存储器允许/编程电压输入。EA为高电平时,访问内部存储

器;低电平时,访问外部存储器。对片内EPROM编程时,此脚接21V编程电压。 ⑷ 多功能I/O口引脚

MCS-51系列单片机设有4个双向I/O口(P0、P1、P2、P3),每一组I/O口线都可以独立地用作输入或输出口,其中:

① P0口(32~39脚)——双向口(三态),可作为输入/输出口,可驱动8个LSTTL门电路。实际应用中常作为分时使用的地址/数据总线口,对外部程序或数据存储器寻址时低8位地址与数据总线分时使用P0口:先送低8位地址信号到P0口,由地址锁存信号ALE的下降沿将地址信号锁存到地址锁存器后,再作为数据总线的口线对数据进行输入或输出。

② P1口(1~8脚)——准双向口(三态),可驱动4个LSTTL门电路。用作输入线时,P1口锁存器必须由单片机先写入“1”,每一位都可编程为输入或输出线。

③ P2口(21~28)——准双向口(三态),可驱动4个LSTTL门电路。可作为输入/输出口,实际应用中一般作为地址总线的高8位,与P0口一起组成16位地址总线,用于对外部存储器的接口电路进行寻址。

④ P3口(10~17脚)——准双向口(三态),可驱动4个LSTTL门电路。双功能口,作为第一功能使用时,与P1口一样;作为第二功能使用时,每一位都有特定用途,其特殊用途如表1-1所示:

表1-1 P3口的第二功能

端口引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 第二功能 RXD TXD /INT0 /INT1 T0 T1 /WR /RD 注 释 串行口数据接收端 串行口数据发送端 外中断请求0 外中断请求1 定时/计数器0外部计数信号输入 定时/计数器1外部计数信号输入 外部RAM写选通信号输出 外部RAM读选通信号输出 1.1.3 MCS-51系列单片机的CPU

MCS-51系列单片机的核心部件是一个8位高性能中央处理器CPU,其作用是读入和分析每条指令,根据每条指令的功能要求,控制单片机的各个部件执行具体指令的操作。MCS-51系列单片机的CPU由8位运算器(算术/逻辑运算部件)ALU、布尔处理器、定时/控制部件和若干寄存器等主要部件组成。 1. 算术/逻辑运算部件ALU

- 3 -

MCS-51系列单片机的ALU由一个加法器、两个8位暂存器(TMP1和TMP2,对用户不开放)和一个性能强大的布尔处理器组成。既可以进行加、减、乘、除等四则运算,又可以完成与、或、非、异或等逻辑运算,还可以执行数据传送、移位、判断及程序转移等操作。

布尔处理机是单片机CPU中一个独立的位处理机,用于完成位运算。在软件上,它有相应的指令系统,可提供17条位操作指令;在硬件上,它有自己的“累加器”(进位位C)和自己的位寻址RAM和I/O空间。 2.定时控制部件

定时控制部件由定时控制逻辑、指令寄存器IR和一个由反向放大器构成的振荡器OSC等电路组成。OSC是控制器的心脏,能为控制器提供时钟脉冲,其反相器的输入/输出端分别接单片机的XTAL1和XTAL2管脚;指令寄存器用于存放从程序存储器中取出的指令码;定时控制逻辑用于对IR中的指令进行译码,并在OSC的配合下产生指令的时序脉冲,以完成相应指令的执行。 3.专用寄存器组

专用寄存器组主要用来指示当前要执行指令的内在地址、存放操作数和指示指令执行后的状态等,是任何一台计算机的CPU都不可缺少的组成部件,其寄存器的多少、位数因机器的型号而不同。MCS-51系列单片机的专用寄存器组主要包括累加器A、程序指针计数器PC、程序状态字寄存器PSW、堆栈指针寄存器SP、数据指针寄存器DPTR和通用寄存器B等。

⑴ 累加器A

累加器A(又记作ACC)是最常用的一个8位专用寄存器,专门用来存放操作数或运算结果。进入ALU作算术运算或逻辑运算的操作数很多来自ACC,操作的结果也常送回ACC。

⑵ 通用寄存器B

通用寄存器B是专门为乘法和除法指令设置的寄存器,也是一个8位寄存器,该寄存器在执行乘法或除法指令前用来存放乘数或除数,在乘法或除法运算完成后用于存放乘积和高8位或除法的余数。

⑶ 程序指针计数器PC

程序计数器PC是一个16位的程序地址寄存器,用来存放下一条将要执行指令的16位首地址,可对64K程序存储器(片内和片外统一编址)进行寻址。对外部程序存储器寻址时,PC内容的低8位由P0口输出,高8位由P2口输出。

⑷ 程序状态字PSW

程序状态字PSW是一个8位标志寄存器,用来存储指令执行后的有关状态,其各标志位的定义如下所示,其中,PSW7为最高位,PSW0为最低位。

PSW7 PSW6 PSW5 PSW4 PSW3 PSW2 PSW1 PSW0

CY AC FO RS1 RS0 OV P ① 进位标志CY:加法(减法)运算时,如果最高位D7有进(借)位,则CY=1,否则CY=0;位处理时,它起着“位累加器”的作用。

② 辅助进位标志AC:加(减)法运算时,如果低半字节的最高位D3有进(借)位,则AC=1,否则AC=0;CPU根据AC标志对BCD码的算术运算结果进行调整。

③ 用户标志FO:是用户定义的一个状态标志。可通过软件对它置位、清零;在编程时,也常测试其状态进行程序分支。

④ 工作寄存器区选择位RS1、RS0:可借软件置位或清零,以选定4个工作寄存器区中的一个区投入工作。

⑤ 溢出标志OV:作有符号数加法、减法时由硬件置位或清除,以指示运算结果是否溢出。

- 4 -

⑥ 奇偶标志P:每执行一条指令,单片机都能根据A中1的个数的奇偶自动令P置位或清零:奇为1,偶为0。此标志对串行通信的数据传输非常有用,通过奇偶校验可检验数据传输的正确与否。

⑸ 数据指针寄存器DPTR

数据指针寄存器DPTR是一个16位的专用寄存器,主要用于访问单片机外部数据存储器或扩展的I/O口,也可以用来访问片内或片外程序存储器中的表格数据。DPTR由DPH、DPL两个8位专用寄存器拼装而成,其中DPH为DPTR的高8位,DPL为DPTR的低8位。

⑹ 堆栈指针寄存器SP

MCS-51系列单片机的堆栈建在内RAM区中,8位地址指针SP总是指向栈顶的位置。复位时,(SP)=07H。汇编语言中,可以通过MOV指令对SP赋值;而在C51程序设计语言中,堆栈指针寄存器SP可以做为一个变量,通过赋值语句对其进行赋值。

1.2 8051单片机的存储器组织

1.2.1 存储器组织

8051单片机的存储系统与典型微型计算机的冯.诺依曼体系结构不同,而是采用哈佛体系结构,其存储器由逻辑上和物理上都完全分开、各自独立的程序存储器和数据存储器组成,通过不同的地址指针、寻址方式和控制信号进行寻址。

从物理结构上看存在4个相互独立的存储器空间:芯片内、外部的程序存储器和芯片内、外部的数据存储器。从逻辑上看,存在三个不同的存储空间:片内片外的程序存储器在同一逻辑空间中,地址从0x0000~0xFFFF,共有64K字节;片内、片外的数据存储器各占一个逻辑空间,其中片内数据存储器的地址空间为0x00~0xFF,而片外数据存储器的地址空间则为0x0000~0xFFFF。8051的存储器结构如图1-3所示。

图1-3 8051的存储器结构

1.程序存储器

程序存储器用来存放可执行程序,也称为代码段。其地址指针PC是一个16位的寄存器,可寻址的地址空间为64K字节,但单片机内部的程序存储器容量一般没有这么大。对于MCS-51系列的单片机8051/8751,其片内只有4K字节ROM/EPROM,而8031内部则无程序存储器。

- 5 -

如果要让单片机执行片内ROM/EPROM中的程序(地址在0x0000~0x0FFF之间),必须将单片机的EA引脚接高电平,否则即使当PC<0x1000时,单片机也只会执行片外程序存储器中的指令。

单片机到片外程序存储器中取指时,以PC的内容作为地址,以PSEN作为控制信号,读取相应单元的指令码,然后经数据总线传送到指令寄存器。 2.数据存储器

8051单片机的数据存储器无论从物理上,还是逻辑上都可分为两个独立的地址空间,一个为内部数据存储器,汇编语言中用MOV指令访问,访问速度快;另一个为外部数据存储器,汇编语言中访用MOVX指令访问,访问速度慢。

在单片机C51程序设计语言中,根据存储器的访问速度和使用情况,将数据存储器划分为DATA区、BDATA区、IDATA区、XDATA区等不同的存储区域。

⑴ DATA区

DATA区是指8051单片机内128字节的内部RAM或8052内前128字节的内部RAM。这部分存储区主要用来存放频繁使用的变量或局部变量等临时数据,所以称为DATA区。DATA区的访问速度很快,所以程序中通常把使用比较频繁的变量或局部变量存储在DATA区中,不过由于DATA区只有128字节,使用时应注意节省DATA区的空间。

DATA区中还包含中两个子区,第一个子区为四组寄存器组,每组包含八个寄存器,共有32个寄存器,可在任何时候通过修改PSW寄存器的RS1和RS0这两位的值来选择四组寄存器的任意一组作为工作寄存器组,8051单片机也可默认任意一组作为工作寄存器组。工作寄存器组的快速切换不仅使参数传递更为方便,而且可在8051单片机中进行快速的任务转换。

另外一个子区叫做位寻址区(BDATA区),有16个字节(共128位),每一位都可单独寻址,单独作为位变量使用。8051单片机有17条位操作指令,这使得程序控制非常方便,并且可帮助软件代替外部组合逻辑,这样就减少了系统中的模块数。位寻址区的这16个字节也可像DATA区中其它字节一样进行字节寻址。

⑵ IDATA区

MCS-51系列的一些单片机如8052中有附加的128字节的内部RAM,位于从0x80开始的地址空间中,被称为IDATA。因为IDATA区的地址和特殊功能寄存器的地址是重叠的,所以只能通过间接寻址来访问。访问IDATA区的速度比访问DATA区慢,但比XDATA快。

⑶ XDATA区

8051单片机的最后一个存储空间为64KB,用16位地址寻址,称作外部数据区,简称XDATA区。这个区通常包括一些RAM(如SRAM)或一些需要通过总线接口的外围器件。如果不需要和外部器件进行I/O操作或者希望在和外部器件进行I/O操作时开关RAM,则XDATA可全部使用64K RAM。

在访问XDATA区时,必须先对DPTR初始化,这样访问XDATA区的速度比访问DATA区或IDATA区的速度相对要慢一些,其中DATA区的访问速度最快,因此使用频繁的数据应尽量保存在DATA区中,而规模较大的,或不经常使用的数据应放到XDATA区中。在使用XDATA区中的数据之前,必须用指令将它们移动到内部数据区(DATA区或IDATA区)中,当数据处理完之后,再将结果返回到XDATA区。 1.2.2 特殊功能寄存器

MCS-51系列单片机有21个SFR(8052有26个),用来管理单片机内部各个功能部件。它们离散地分布在0x80~0xFF地址范围内,有些反映相关逻辑部件的工作状态,有些则是相关功能单元的控制命令字,这些SFR均可由单片机按字节地址访问,而其中一部分(凡是

- 6 -

字节地址能被8整除)则可按位寻址。各特殊功能寄存器的定义及功能见表1-2。

表1-2 特殊功能寄存器的功能及定义

标 识 符 .ACC .B .PSW SP DPTR .P0 .P1 .P2 .P3 .IP .IE TMOD .TCON +.T2CON TH0 TL0 TH1 TL1 + TH2 + TL2 + RLDH + RLDL .SCON SBUF PCON 寄 存 器 名 累加器(指令中用A作助记符) B寄存器(乘除指令中与ACC一起使用,B放高位或商) 程序状态字 堆栈指针寄存器 数据指针寄存器(由DPH和DPL组成) P0口寄存器 P1口寄存器 P2口寄存器 P3口寄存器 中断优先级控制寄存器 中断允许寄存器 定时/计数器方式控制寄存器 定时/计数器控制寄存器 定时/计数器2控制寄存器 定时/计数器0高8位字节 定时/计数器0低位字节 定时/计数器1高位字节 定时/计数器1低位字节 定时/计数器2高位字节 定时/计数器2低位字节 定时/计数器2自动再装载高位字节 定时/计数器2自动再装载低位字节 串行通信控制寄存器 串行通信数据缓冲器 电源控制寄存器 地 址 0xE0 0xF0 0xD0 0x81 0x83和0x82 0x80 0x90 0xA0 0xB0 0xB8 0xA8 0x89 0x88 0xC8 0x8C 0x8A 0x8D 0x8B 0xCD 0xCC 0xCB 0CAH 0x98 0x99 0x97 注:表中带“.”号的寄存器可按字节和位寻址;带“+”号的寄存器是与定时/计数器2有关的寄存器,仅在8032和8052中存在。

1.3 单片机最小系统

所谓单片机的最小系统是指使单片机能运行程序、正常工作的最简单电路系统,是保证单片正常启动、开始工作的必须电路,缺一不可。单片机最小系统一般由单片机、程序存储器、时钟电路和复位电路组成。对于8051单片机,由于片内有4K的程序存储器,所以其最小系统除了单片机本身外,只需外接时钟电路与复位电路即可。 1.3.1 复位及复位电路

1. 8051单片机的复位

复位是使CPU和系统中其他功能部件都处于一个确定的初始状态,并从这个状态开始工作。8051单片机在RST输入端(9脚)出现高电平时实现系统的复位和初始化。在振荡器运行的情况下,要实现复位操作,必须使RST端的高电平至少保持两个机器周期(24个振荡

- 7 -

周期)。CPU在第二个机器周期内执行复位操作,以后每一个机器周期重复一次,直到RST降为低电平。复位期间不产生ALE及/PSEN信号。复位的内部操作使SP为0x07,各端口(P0~P3)都为0xFF,特殊功能寄存器都为0,但不影响RAM的状态。当复位结束(RST变为低电平)后,CPU从0x0000开始执行程序。

值得注意的是:8051单片机通电后并不运行ROM里的程序,只有正常复位后,才能开始正常工作,运行程序。 2. 复位电路

单片机的复位分为上电自动复位、按键手动复位和看门狗强制复位等三种方式。上电复位通常利用电容的充放电来实现,按键复位则可分为按键脉冲复位和按键电平复位两种,看门狗复位则通过外接看门狗电路或软件看门狗程序实现。常见的上电复位和按键复位电路如图1-4所示。

(a) 上电复位 (b) 按键脉冲复位 (c) 按键电平复位

图1-4 常见的系统复位电路

图中,(a)为最简单的单片机复位电路。当系统上电时,由于电容C两端的电压不会瞬间改变,所以8051的第9脚复位端会得到短暂的高电平,随后,电容通过电阻R进行充电,经过一段时间后,RST端变为低电平。当电容的充放电时间常数RC足够大,能保证在RST端得到超过两个机器周期的高电平时,单片机完成复位操作,开始正常运行ROM里的程序。

(b)为按键脉冲复位电路。当系统上电时,单片机并不复位,不能运行ROM里的程序,只有当系统上电后,按一下复位按键(图中未画出),反相器输出超过两个机器周期的高电平,才能完成系统复位。

(c)为包括上电复位功能的按键电平复位电路,是最常见的单片机复位电路之一。当系统上电时,单片机的RST端得到两个以上机器周期的高电平,随后电容C经电阻R充电,变为低电平,完成单片机的上电复位。在单片机的运行过程中,如果由于外界干扰等因素的影响,使单片机的程序跑飞,则可以通过按下按键K,使单片机完成复位操作。当按下K键时,电容两端短路,RST接到电源VCC变为高电平,同时电容迅速放电,使电容的两个极板电位一致。释放按键K后,电容C通过电阻R充电,经过两个以上机器周期的时间后,RST端变为低电平,完成单片机的复位。 1.3.2 时钟电路

时钟电路用于产生单片机的基本时钟信号。8051的时钟信号可由内部振荡器产生,也可由外部电路直接提供。内部振荡器的输入和输出脚分别为XTAL1和XATL2,由XTAL2给单片机内部电路提供时钟信号。当时钟信号由外部电路提供时,外部时钟引入XTAL2脚,而XTAL1脚接地。两种时钟信号的连接电路如图1-5所示。

- 8 -

(a) 片内振荡器产生时钟信号 (b) 片外电路提供时钟信号

图1-5 8051单片机的两种时钟电路

1.3.3 8051单片机的最小系统

8051芯片内部有4K的程序存储器,所以其最小系统除了单片机本身外,只需外接时钟电路与复位电路即可。典型的8051最小系统电路如图1-6所示。

图1-6 典型的8051电小系统

图中,单片机的时钟电路由1个振晶和2个校准电容组成,由片机振荡器产生单片机的时钟信号;复位电路由按键电平复位电路构成,完成单片机的上电复位和异常情况下的按键复位操作;由于8051单片机内部有4K的ROM,单片机需运行片内程序存储器的程序,所以其EA脚(31脚)应接高电平。

- 9 -

本文来源:https://www.bwwdw.com/article/a707.html

Top