(单片机应用实例开发)实例二单片机的基本结构及指令系统.ppt

上传人:本田雅阁 文档编号:3564311 上传时间:2019-09-11 格式:PPT 页数:249 大小:5.93MB
返回 下载 相关 举报
(单片机应用实例开发)实例二单片机的基本结构及指令系统.ppt_第1页
第1页 / 共249页
(单片机应用实例开发)实例二单片机的基本结构及指令系统.ppt_第2页
第2页 / 共249页
(单片机应用实例开发)实例二单片机的基本结构及指令系统.ppt_第3页
第3页 / 共249页
(单片机应用实例开发)实例二单片机的基本结构及指令系统.ppt_第4页
第4页 / 共249页
(单片机应用实例开发)实例二单片机的基本结构及指令系统.ppt_第5页
第5页 / 共249页
点击查看更多>>
资源描述

《(单片机应用实例开发)实例二单片机的基本结构及指令系统.ppt》由会员分享,可在线阅读,更多相关《(单片机应用实例开发)实例二单片机的基本结构及指令系统.ppt(249页珍藏版)》请在三一文库上搜索。

1、2.1 单个发光二极管的点亮 2.2 单个发光二极管的闪烁 2.3 单片机端口输出方波 2.4 习题,实例二 单片机的基本结构及指令系统,学习目标 理解单个发光二极管控制电路的构成、工作原理和电路中各元器件的作用,并对电路进行分析和计算。 理解51单片机最小系统和I/O口的内部结构,并正确使用51单片机I/O口资源。 正确使用MedWin软件的新建文件、保存、编辑程序、编译、单步调试、生成代码等功能。 正确理解程序设计框架、三种基本结构,掌握ORG、END、BIT等伪指令的使用方法。, 正确使用MOV传送指令、JB/JNB等位操作指令和LJMP/SJMP/AJMP等跳转指令。 正确使用Prot

2、eus仿真软件调试单个发光二极管的控制电路。 设计和制作单个发光二极管控制系统,对电路中的故障现象进行分析判断并加以解决,通过调试得到正确结果。,工作任务 测试单个发光二极管控制电路并对结果进行描述。 设计、制作与调试单个发光二极管控制系统。 撰写设计文档与测试报告。 通过实例一的学习,我们了解了单片机是什么以及使用它的基本方法,但是单片机的资源非常多,用途很广,利用它可以完成的工作也非常多,为了能够更好地学会怎样使用单片机,我们先从它的外围开始学习。,2.1 单个发光二极管的点亮 学习目标 理解单个发光二极管控制电路的构成、工作原理和电路中各元器件的作用,并能对电路进行分析和计算。 理解51

3、单片机最小系统和I/O口的内部结构,并正确使用51单片机I/O口资源。 理解ORG、END、BIT等伪指令的含义并掌握其使用方法。 掌握位寻址方式,正确使用MOV传送指令。 工作任务 测试单个发光二极管控制电路并对结果进行描述。,2.1.1 数制与编码 单片机内部采用的数据系统和计算机的一样,都是二进制,因此,经由单片机计算与处理的数值、字母、符号等都必须采用二进制代码表示,而我们日常所熟悉的是十进制数,要想和单片机沟通,就必须用它能够理解的“话”,所以我们首先要弄清楚它们之间的联系,才能更好地应用。 注意:如果你已经掌握了计算机基础知识,那么你可以跳过这一节,直接学习下一节的内容。,1数制

4、数制即进位计数制,常用的数制有二进制、十进制和十六进制。在书写中为了以示区分,通常后缀用不同的字母来代表不同的进制,D(Decimal)代表十进制(可省略),B(Binary)代表二进制,H(Hexadecimal)代表十六进制。 1) 十进制 十进制数的两个基本特点如下: (1) 基数为10,每一位数是09这十个数码中的一个。 (2) 逢十进一,借一当十。,任意一个十进制数的按权展开式为 例如,十进制数326.75按权展开为,2) 二进制 二进制数的两个基本特点如下: (1) 基数为2,每一位数只能是0和1这两个数码中的一个。 (2) 逢二进一,借一当二。,任意一个二进制数的按权展开式为 例

5、如,二进制数1101.01B按权展开为,3) 十六进制 十六进制数的两个基本特点如下: (1) 基数为16,每一位数是09、AF这十六个数码中的一个。 (2) 逢十六进一,借一当十六。 十六进制数中,A代表10,B代表11,C代表12,D代表13,E代表14,F代表15。,任意一个十六进制数的按权展开式为 例如,十六进制数4B3.2EH按权展开为 注意:编写程序代码需使用十六进制数时,如果数的第一个字符是字母,则字母前必须加上“0”,例如0AFH。,2数制间的转换 1) 二进制数、十六进制数转换为十进制数 二进制数、十六进制数转换为十进制数的方法很简单,只需将待转换的数按权展开,求出各加权系数

6、的和,即可得到相对应的十进制数。 例2-1 将二进制数1100.01B转换成十进制数。 解: 例2-2 将十六进制数E2.4CH转换成十进制数。 解:,2) 十进制数转换为二进制数、十六进制数 十进制数转换为二进制数或十六进制数时,需要将整数部分和小数部分分开进行转换,再将结果组合在一起。其中,整数部分的转换方法是“除基数取余逆序排列”,小数部分的转换方法是“乘基数取整顺序排列”。下面通过具体数据举例进行说明。,例2-3 将十进制数14.375转换成二进制数。 解:(1) 将整数部分“14”用“除2取余逆序排列”,即将“14”逐次除以2,依次记下余数,直至商为0。其中,第一次除得的余数为二进制

7、数整数部分的最低位,最后一次除得的余数为二进制数整数部分的最高位。 得到,14 = 1110B。,(2) 将小数部分“0.375”用“乘2取整顺序排列”,即将“0.375”逐次乘以2(每次都是小数部分进行乘2),依次记下积的整数部分,直至积的小数部分为0。其中,第一次记下的数为二进制数小数部分的最高位,最后一次记下的数为二进制数小数部分的最低位。 得到,0.375 = 0.011B。 因此,14.375 = 1110.011B。,例2-4 将十进制数205.296 875转换成十六进制数。 解:(1) 整数部分转换: 得到,205 = CDH。,(2) 小数部分转换: 得到,0.296 875

8、 = 0.4CH。 因此,205.296 875 = CD.4CH。,3) 二进制数与十六进制数间的相互转换 将十六进制数中的每一位数码分别用4位二进制数码表示,即可将该十六进制数转换成二进制数,转换结果中最左侧和最右侧的0可以舍去;相反,将二进制数转换成十六进制数的方法是以小数点为界,分别向左、向右每4位二进制数码用一位十六进制数码表示,不足4位的以0补足,其中小数点左侧部分左补0,小数点右侧部分右补0。,例2-5 将十六进制数4A2.3CH转换成二进制数。 解: 因此,4A2.3CH9 9= 010010100010.001111B。,例2-6 将二进制数11001001011.01011

9、1B转换成十六进制数。 解: 因此,11001001011.010111B = 64B.5CH。 为了方便读者记忆,特将0F这十六个数码与二进制数、十进制数的对应关系制成表2-1。,3编码 我们将字和词语按照一定的规律组合起来就构成了能够随意表达心意的句子。二进制代码就是单片机的“字”和“词语”,将它们按一定规律编排,使每组代码具有特定含义,这就是单片机中的编码。下面介绍两种计算机中常用的编码。,1) 二十进制编码 二-十进制编码又称BCD(Binary Coded Decimal)编码,是指每一位十进制数码均用一组二进制数码来表示的编码。 每一位十进制数码(09)可用4位二进制数码表示,也可

10、用8位二进制数码表示(高4位全为0),前者称为压缩BCD码,后者称为非压缩BCD码。对于压缩BCD码,根据编码的选取方法不同,又可分为8421码、5421码、余3码等。其中,最常用的是8421BCD码。表2-2列出了十进制数码与8421BCD码之间的对应关系。,注意:8421BCD码必须在右下角进行标注,否则易与二进制数混淆。例如,1000 0011作为8421BCD码的值是83,而作为二进制数时,其值为131。在以后介绍的实例中,我们经常会利用BCD码格式的数据,所以现在一定要弄明白。 例2-7 将十进制数47.85转换成8421BCD码,将8421BCD码1001 0111.0010转换成

11、十进制数。 解:,2) 字符编码 计算机只能对二进制代码进行处理,因此,在计算机内各类字符(包括字母、数字和符号)也必须用二进制代码来表示。目前采用得最普遍的是美国国家信息交换标准字符码,即ASCII码(American Standard Code for Information Interchange),如表2-3所示。,ASCII码采用7位二进制代码对字符进行编码,共有128种不同的组合状态,可以对应表示128个字符,其中包括52个大、小写英文字母,10个阿拉伯数字,32个通用控制符号和34个专用符号。例如,阿拉伯数字8用ASCII码表示为0111000B(38H),大写英文字母Z用ASC

12、II码表示为1011010B(5AH)。 虽然标准ASCII码是7位编码,但由于计算机基本处理单位为字节(1字节=8位),因此一般仍以一个字节来存放一个ASCII码。每一个字节中多余出来的一位(最高位)在计算机内部通常保持为0(在数据传输时可用作奇偶校验位)。 注意:单片机中最小的数据单位是位,8位二进制的数据为一个字节,16位二进制的数据为一个字(两个字节)。,4带符号数的表示 计算机中的所有信息都是用二进制代码表示的,有符号数也不例外,通常把数(1个字节)的最高位作为符号位,如图2-1所示。 在计算机中,带符号数有三种表示方法:原码、反码和补码。,图2-1 符号位指示图,1) 原码 正数的

13、符号位用“0”表示,负数的符号位用“1”表示,这种表示法称为原码。例如: X1 = +18 = +0010010,则X1原 = 00010010 X2 =18 =0010010,在X2原 = 10010010 0的原码是不唯一的:+0原=00000000,0原 =10000000。 8位二进制原码所能表示的数值范围是:1111111101111111,即127+127。,2) 反码 如果是正数,则其反码与原码相同;如果是负数,则其反码除符号位为1外,其他各数位均将1转换为0,0转换为1。例如: +18原 = 00010010,则+18反 = 00010010 18原 = 10010010,则1

14、8反 = 11101101 +0原 = 00000000,则+0反 = 00000000 0原 = 10000000,则0反 = 11111111 8位二进制反码所能表示的数值范围是:1000000001111111,即-127+127。,3) 补码 如果是正数,则其补码与原码、反码相同;如果是负数,则其补码为反码加1。例如: 8位二进制补码所能表示的数值范围是:1000000001111111,即-128+127。,【练习】 项目:数的各进制形式的转换。 项目编号:EX2_1。 任务要求:将十进制数83分别转换为二进制、十六进制和8421BCD码。 转换结果: (83)D = (101001

15、1)B = (53)H = (10000011)BCD,2.1.2 单个发光二极管控制电路的设计 8051虽然仅是一块芯片,但它包括了构成计算机的基本部件,因此可以说它是一台简单的计算机。 图2-2所示为MCS-51单片机的内部结构框图。图中,单片机内部各个部分(CPU、RAM、ROM、I/O接口等)由总线(共分为地址总线AB、数据总线DB、控制总线CB三大类)紧密地联系在一起。这就像我们人体的各个部位都通过神经受大脑的控制,心脏通过周身的血管将新鲜的血液送到身体的各个部位一样。,图2-2 MCS-51单片机的内部结构框图,1中央处理器CPU CPU相当于是单片机的大脑和心脏,负责控制、指挥和

16、调度整个单元系统协调地工作,完成运算和控制输入/输出功能等操作。 1) MCS-51单片机CPU的功能部件 MCS-51单片机的CPU主要由运算器和控制器等部件组成,如图2-3所示。,图2-3 CPU的组成部件,(1) 运算器。单片机进行的一切算术/逻辑运算均在运算器内部完成。运算器主要包括ALU(算术逻辑部件)、累加器ACC、寄存器B、程序状态字寄存器PSW、暂存器TMP1和TMP2、处理位操作的布尔处理器等,如图2-3所示。以下对其中三个专用寄存器作简单介绍。 累加器ACC(Accumulator)。累加器ACC(助记符为A)是一个8位特殊功能寄存器,它在CPU中的工作最为频繁。MCS-5

17、1指令系统中多数指令的执行都需要用到它。, 寄存器B。寄存器B也是一个8位特殊功能寄存器,主要用于乘法和除法操作。在乘法指令中,两个操作数分别取自A和B,运算结果的低8位存放在A中,高8位存放在B中。在除法指令中,被除数取自A,除数取自B,运算结果商数存放在A中,余数存放在B中。 程序状态字寄存器PSW(Program Status Word)。程序状态字寄存器PSW共8位,主要用于存放程序运行过程中的有关状态信息。寄存器各位的定义如图2-4所示,其中PSW.1是保留位,未使用。,图2-4 程序状态字寄存器各位的定义,CY(PSW.7) 进位标志(助记符为C)。此位有两个功能:一是当累加器A的

18、最高位有进位或借位时,硬件自动将该位置位(即CY = 1),否则该位自动清零;二是在位操作中作“位累加器”使用。 AC(PSW.6) 辅助进位标志。进行加、减运算时,当累加器A的低4位数向高4位数有进位或借位时,AC自动置位,否则自动清零。 F0(PSW.5) 用户自定义标志。供用户自行定义,用作标记,可用软件使其置位或清零。,RS1、RS0(PSW.4、PSW.3)寄存器组选择控制位。 MCS-51单片机片内RAM的00H1FH共32个字节被均匀地分为四组,每组相当于八个8位寄存器,均以R0R7来命名。CPU只要根据用户定义的RS1和RS0即可选中其中一组寄存器。对应的编码关系如表2-4所示

19、。,OV(PS的W.2) 溢出标志。带符号数进行加减运算时,若结果超出了累加器A所能表示的符号数的有效范围 (128+127),则产生溢出,OV自动置1,表明运算结果错误;如果OV自动清零,则表明没有产生溢出,运算结果正确。 进行乘法运算时,若乘积超过255,则OV自动置1,表明乘积存放在A和B两个寄存器中;若OV为0,则说明乘积没有超过255,乘积只存放在累加器A中。,进行除法运算时,若除数为0,则OV自动置1,运算不被执行,否则OV清零。 P(PSW.0) 奇偶校验位。每个指令周期都由硬件来置位或清零,以表示累加器A中“1”的位数的奇偶性。若“1”的位数为奇数,则P自动置位,否则清零。该标

20、志位常用于检验数据传输的正确性。,(2) 控制器。控制器是CPU的神经中枢,它包括定时控制逻辑电路、指令寄存器、指令译码器、程序计数器PC(Program Counter)、数据指针DPTR、堆栈指针SP(Stack Pointer)等。 程序计数器PC。程序计数器在物理上是独立的,共16位,用于存放即将执行的指令地址,可对64 KB程序存储器直接寻址。PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1,并指向下一条指令。PC本身并没有地址,因而不可寻址,用户无法对它进行读/写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序按我们的要求去执行。 微型计算机的基本工作过程如下

21、所述。,计算机如何按照我们的要求去执行任务呢?叫人做事,只要对他发布命令就可以,要计算机做事情,也得向它发布命令。当然,计算机能听得懂的命令和我们平时理解的命令不同,我们把它们称为指令。一条条指令组合在一起就构成了程序。计算机工作的过程实质上是执行程序的过程。在计算机工作时,CPU根据指令顺序,一条一条地执行,直到遇到结束运行的指令为止,从而完成一项特定的任务。计算机执行指令的过程又分为取指令、分析指令和执行指令三步,如图2-5所示,即从存储器中取出要执行的指令并送到CPU中,分析指令要完成的动作,然后执行操作。,图2-5 程序执行过程,下面以“MOV A,#60H”为例,简要说明指令在CPU

22、中的执行过程,其指令执行示意图如图2-6所示。,图2-6 “MOV A,#60H”指令执行示意图,“MOV A,#60H”对应的机器代码为0111010001100000B,假设高8位(74H)和低8位(60H)分别存放于程序存储器的30H和31H两个单元中。 a. 取指令过程。 (a) 程序计数器PC中装入地址30H,并通过AB(地址总线)送到存储器的地址译码器,选中程序存储单元30H。然后PC自动加1,为取下一个字节做好准备。 (b) CPU通过CB(控制总线)向存储器发出读取数据的控制信号。 (c) 程序存储器中被选中的30H单元的内容(74H)送到DB(数据总线)上,CPU读入指令代码

23、。,b. 分析指令、执行指令过程。 (a) CPU读取指令代码后进行译码。 (b) CPU根据译码结果知道74H表示把它下面一个单元的操作数送至累加器A,因此产生相应的控制信号。 (c) 执行指令所规定的操作,实现将31H单元内的操作数60H通过DB送至累加器A中。 其他指令的执行过程与此类似。, 数据指针DPTR。数据指针DPTR是一个16位的专用寄存器,也可以按两个8位寄存器来使用,即高位字节寄存器DPH和低位字节寄存器DPL。DPTR主要是用来保存16位地址,在访问64 KB外部数据存储器时,可作为间接寻址的地址寄存器使用;在访问程序存储器时,可用作基址寄存器。, 堆栈指针SP。堆栈是内

24、部RAM的一个区域,用来存储数据。它的特殊之处在于存取数据必须遵循“先进后出,后进先出”的原则,即只能从栈顶一端存取数据。堆栈指针SP就是指向栈顶的指针。每当执行一次PUSH(入栈)指令时,SP就在原来值的基础上自动加1,每当执行一次POP(出栈)指令,SP就在原来值的基础上自动减1。数据入栈和出栈的过程如图2-7所示。,图2-7 数据入栈和出栈的过程,堆栈用于中断操作和子程序调用时保存数据,也称为断点保护和现场保护。子程序或中断服务程序执行完后,CPU还是要回到主程序中,因此,在转入子程序或中断服务程序前,必须先将现场的数据压入堆栈中保存起来,否则返回时,CPU并不知道原来的程序执行到哪一步

25、,原来的中间结果如何。返回时,再从堆栈中恢复当时的数据。,堆栈指针SP的初始值称为栈底,它确定了堆栈的起始位置。例如,单片机复位后SP的值为07H,如果不加更改,则入栈数据将从08H单元开始存储。但是08H1FH这个区域正是MCS-51单片机的工作寄存器区,经常要被使用,这会造成数据的混乱。所以,通常在程序的开始阶段就用指令把栈底设在片内RAM中地址值较高的地方,即把SP的初始值设得较高,如5FH等。,2) MCS-51单片机CPU的时序 前面我们提到,单片机执行指令的过程就是顺序地从程序存储器中取出指令,一条一条地执行,然后进行一系列的微操作控制来完成各种指定的动作。那么,如何来对这些复杂的

26、步骤进行统一协调的管理呢?在此我们引出时序的概念。单片机的时序就是CPU在执行指令时所需控制信号的时间顺序,为了保证各部件间的同步工作,单片机内部电路应在唯一的时钟信号下严格地按时序进行工作。 为了便于对CPU时序进行分析,一般按指令的执行过程规定了几种周期,即时钟周期、机器周期和指令周期。,(1) 时钟周期。时钟周期也称为振荡周期,就是单片机外接晶振的倒数(例如12 MHz的晶振,它的时钟周期就是1/12 s),是计算机中最基本、最小的时间单位。 (2) 机器周期。CPU完成一种基本操作所需要的时间称为机器周期。一个机器周期包含12个时钟周期,分为6个状态,分别用S1S6表示。每个状态又分为

27、两拍,分别用P1和P2表示。因此,一个机器周期中的12个时钟周期表示为S1P1、S1P2、S2P1、S6P2,如图2-8所示。如果系统时钟的晶振频率为12 MHz,则它的机器周期为1 s。,图2-8 机器周期时序,(3) 指令周期。指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。MCS-51单片机的指令可以分为单周期指令、双周期指令和四周期指令三种,它们的执行时间依次为1个、2个和4个机器周期。一般地,单字节指令和双字节指令都可能是单周期和双周期,而三字节指令都是双周期,只有乘除法指令是单字节四周期。,(4) CPU取指令/执行时序。指令的执行分

28、取指令和执行两个阶段,取指令的时间与地址锁存信号(ALE)有关。ALE信号在每一个机器周期出现两次,第一次在S1P2、S2P1期间,第二次在S4P2、S5P1期间,其频率为系统晶振频率的1/6。每当ALE信号出现时,CPU取指令一次。图2-9所示为几种指令的时序。,图2-9 MCS-51单片机的取指令时序,对于一字节单周期指令,第一次ALE信号时取指令,第二次ALE信号时仍然取指令,但此次所取数据无效,到一个机器周期结束时执行完毕。对于两字节单周期指令,在两次ALE信号时分别读入指令的两个字节,一个机器周期结束时执行完毕。对于一字节双周期指令,除第一次ALE信号时读入的数据有效外,其余三次读入

29、的数据均无效,到两个机器周期结束时执行完毕。依次类推,对于两字节双周期指令,前两次ALE信号时读入有效数据,后两次读入的数据均无效。 注意:ALE信号在大部分时间都是周期性的,只有在访问外部RAM时例外,其第二个机器周期的第一个ALE信号并不出现。,2存储器 存储器是单片机内用于存储数据的地方。为了便于大家理解,可以把一个存储器看做是一个大柜子,这个大柜子里有许多小抽屉,每一个小抽屉都可以用来存放一个数据。51系列单片机处理的数据都是以字节(byte)为单位的,每一字节包含8位二进制数字(0或1),所以,每一个小抽屉里又分成了8格。如果要在单片机内存储一个数据“6”,也就是“00000110”

30、,则只要在“抽屉”格子里对应地存入“1”或“0”就可以了(“1”或“0”依靠电平的高或低来实现)。,存储器结构有两种类型:一种是程序存储器和数据存储器统一编址,称为普林斯顿结构;另一种是程序存储器和数据存储器分开编址,称为哈佛结构。MCS-51单片机采用的是哈佛结构。 MCS-51单片机的存储器结构如图2-10所示,可分成三个部分,即程序存储器、内部数据存储器和外部数据存储器。,图2-10 MCS-51单片机的存储器结构,1) 程序存储器 单片机应用系统中的程序存储器一般用半导体只读存储器,即ROM(Read Only Memory)。这种存储器在计算机运行时只能对其执行读操作(即只能把里面的

31、数据读出来,而不能把外部的数据写进去),即使整机掉电后存于其中的信息也不会丢失,因此,程序存储器主要用于存放不需要经常改动的程序和常数表格。,参照图2-10可知,MCS-51单片机的程序存储器可以分为片内和片外两部分。片内有4 KB程序存储空间,相当于有4 K个不同的字节可用来存放数据。那么,如何对这4 K个字节进行区分呢?类似于宾馆里每一间房都有一个不同的房门号,我们对这4 K个字节也进行了地址分配,从0000H到0FFFH,刚好4 K个不同的地址代码,一一对应,可以通过地址总线来进行寻址。同理,片外有64 KB的程序存储空间,每一个字节也对应一个地址代码,从0000H开始编址,到FFFFH

32、为止。在地址0000H0FFFH内,片内、片外地址有重叠,由 引脚信号来控制内、外程序存储器的选择。,(1) 当 引脚接高电平时,CPU可访问内部和外部ROM,并且程序自片内程序存储器开始执行,PC值超出片内ROM容量时,会自动转向片外程序存储器中的程序。 (2) 当 引脚接低电平时,直接寻址外部ROM,且从0000H开始,系统全部执行片外程序存储器中的程序。,MCS-51系列单片机程序存储器分为系统使用区和用户使用区,其中0000H002AH为系统使用区,其余为用户使用区。系统使用区中有6个单元地址被固定地用于特定程序的入口地址,其中0000H称为复位单元,单片机复位后(PC)0000H,从

33、而CPU总是从0000H单元开始重新执行程序。其余5个单元用作5个中断源的中断服务程序入口地址,具体定义见表2-5。,在编程时,通常在这些入口地址开始的两三个地址单元中放入一条转移类指令,以使相应的程序在转移后的目标地址开始存放。例如,从000BH地址单元开始,放入一条转移到0100H地址单元的转移类指令,则定时器/计数器0的中断服务程序就从0100H地址单元开始存放。,2) 内部数据存储器 数据存储器也称为随机存取存储器(RAM),用户既可以从里面读数据,也可以往里面写数据,因此通常用于存放运算的中间结果、数据缓冲以及设置特征标志等。MCS-51单片机的数据存储器在物理上和逻辑上都分为两个地

34、址空间:一个是内部数据存储器,另一个是外部数据存储器。,内部数据存储器共有256 B存储空间,但只有低128 B(地址为00H7FH)是真正的数据存储空间,可供用户进行读或写操作,高128 B(地址为80HFFH)是单片机的特殊功能寄存器区。 (1) 内部数据存储区。内部RAM的128 B地址空间分成不同的区域:工作寄存器区(00H1FH)、位寻址区(20H2FH)、堆栈和数据缓冲区(30H7FH),如图2-11所示。,图2-11 内部数据存储区, 工作寄存器区(00H1FH)。此区共32字节,又可分为4组,每组8个字节,而每一个字节就是一个工作寄存器,可存放一个8位的数据。每组包含的8个工作

35、寄存器分别命名为R0R7。工作寄存器的使用相当频繁,且每一个工作寄存器组都可被选为CPU的当前工作寄存器组,用户可以通过改变程序状态字PSW中的RS1、RS0两位来指定,具体对应关系如表2-6所示。, 位寻址区(20H2FH)。此区共16字节,每一字节除了具有字节寻址功能外,其每一位都可以单独寻址。位地址为00H7FH,共128位,分别对应于字节地址20H的D0位至2FH的D7位,如表2-7所示。MCS-51单片机有丰富的位操作指令,可以进行置1、清0、取反等操作。, 堆栈和数据缓冲区(30H7FH)。此区共80字节,通常作为堆栈或数据缓冲区使用。用户可根据需要将堆栈设置在这个范围内(30H7

36、FH),比如将SP的初始值定义为2FH,则堆栈数据从30H地址单元开始存放。 思考:看到上面对字节地址和位地址的编号,大家可能会有这样的疑问,即它们的编号都是重复的,那怎么区分呢?这个问题我们将在2.1.3节中给出答案。,(2) 特殊功能寄存器区。MCS-51单片机共有21个特殊功能寄存器,简称为SFR(Special Function Registers)。它们离散地分布在80HFFH的地址空间内。这些特殊功能寄存器包括累加器A、寄存器B、程序状态字寄存器PSW、定时器/计数器、I/O接口锁存器以及各种控制寄存器等,其地址分配见表2-8。,从表2-8可知,有些特殊功能寄存器不仅可以按字节寻址

37、,还可按位寻址(它们的字节地址均可以被8整除),位地址范围是80HF7H。这些位可用多种形式表示。例如,程序状态字寄存器中的进位标志位可以用下列几种不同的形式表示: CY (位助记符) D7H (直接位地址) PSW.7 (寄存器.位) D0H.7 (单元地址.位) 一般采用位助记符和“寄存器.位”这两种形式表示。,3) 外部数据存储器 MCS-51单片机具有扩展64 KB外部数据存储器的能力。外部数据存储器编址为0000HFFFFH,有一部分地址与内部数据存储器重叠(0000H0FFFH),由不同的指令形式来区分。,4) 数据传送指令 从程序存储器中读取数据,或者对内部、外部数据存储器进行数

38、据读/写操作时,采用的指令形式各不相同。下面我们通过几个例题来说明。 (1) 读程序存储器。 例2-8 将程序存储器1002H地址单元的内容传送到累加器A。,指令: MOV DPTR, #1000H ;将数据1000H传送到DPTR MOV A, #02H ;将数据02H传送到A MOV C A, A+DPTR ;将ROM中1002H地址单元 的内容传送到A 说明:MOVC是程序存储器数据传送指令的助记符;累加器A是传送的唯一目的地址(不可将程序存储器中的内容直接传送到其他地址单元或寄存器);A+DPTR指出以DPTR中的内容(1000H)和累加器A中的内容(02H)相加的和(1002H)为地

39、址的存储器单元中的内容,是传送的源操作数;#表示后面跟的是数据而不是地址。 思考:可以将DPTR和A中的数据换成其他吗?,(2) 读/写内部数据存储器。 例2-9 将内部数据存储器30H单元的内容传送到31H单元。 指令: MOV 31H, 30H ;将内部RAM中30H单元的内容传 送到31H单元 或者: MOV A, 30H ;将内部RAM中30H地址单元的内 容传送到A(读) MOV 31H,A ;将A的内容传送到内部RAM中31H 地址单元(写),说明:MOV是内部数据存储器数据传送指令的助记符。内部数据存储器中两个地址单元的内容可直接进行传送(目的地址放前面,源地址放后面),也可通过

40、中间寄存器进行间接传送(比如累加器A、寄存器Rn等)。注意,30H前不加“#”表示30H是一个地址而不是数据,真正进行传送的是30H这个地址单元内的数据。 思考:利用寄存器R2来实现本例的要求。,(3) 读/写外部数据存储器。 例2-10 将外部数据存储器40H单元的内容传送到2000H单元。 指令: MOV R0, #40H ;将数据40H传送到R0 MOVX A, R0 ;将外部RAM中40H地址单 元的内容传送到A(读) MOV DPTR, #2000H ;将数据2000H传送到DPTR MOVX DPTR, A ;将A的内容传送到外部 RAM中2000H地址单元(写),说明:MOVX是

41、外部数据存储器数据传送指令的助记符,外部RAM中两个地址单元的内容不可直接进行传送,必须通过累加器A,而且,无论是将外部RAM中的数据读到累加器A,还是将累加器A中的数据写到外部RAM,都必须采取间接寻址的方式。其中,寄存器R0或R1专用于8位地址的外部RAM存储单元(00HFFH);DPTR专用于16位地址的外部RAM存储单元(0100HFFFFH)。 思考:读者可用MedWin软件进行试验,观察仿真结果。,3并行输入/输出接口 并行输入/输出接口电路是单片机中不可缺少的组成部分,它就像我们的手和脚一样,我们可以通过手和脚触摸到外界的信息,也可以通过手和脚来控制外界的一些东西。那么单片机的I

42、/O怎样实现它的功能呢?下面我们举例说明。假如要利用单片机来点亮一只发光二极管,显然,这只发光二极管必须与单片机的某个引脚相连,这就必须用到并行输入/输出接口。MCS-51系列单片机内部有4个并行双向I/O接口电路:P0、P1、P2、P3。每一个接口电路各有8位,分别用P.0、P.1、P.7表示,都有独立的引脚。如果我们将其中的一位接口P1.3(4号引脚)与发光二极管相连,如图2-12所示(R11是限流电阻),则当4脚是高电平时,发光二极管不亮,当4脚为低电平时,发光二极管点亮。,如何让P1.3变高或变低呢?我们可以通过指令来向单片机发布命令。让一个引脚输出高电平的指令是SETB,让另一个引脚

43、输出低电平的指令是CLR。因此,我们要P1.3输出高电平,只要写SETB P1.3,要P1.3输出低电平,只要写CLR P1.3就可以了。此外,指令CPL可以改变引脚原来的输出状态,假如P1.3原来输出高电平,则经过CPL P1.3之后,P1.3输出低电平,反之亦然。,图2-12 单个发光二极管点亮控制原理图,通过这些I/O接口,单片机可外接按键、发光二极管、显示器等外围设备,还可以进行系统扩展。下面详细介绍它们各自的内部结构及工作原理。,1) P0口 P0口除了作通用I/O口之外,还可在外部扩展存储器时分时复用为地址/数据总线。P0口的位结构图如图2-13所示。P0口的位电路结构由以下几个部

44、分组成:1个数据输出锁存器,用于进行输出数据的锁存;2个三态输入缓冲器,分别用于锁存器和引脚数据的输入缓冲;1个多路开关MUX,它的一个输入来自锁存器,另一个输入是地址/数据信号的反相输出,在控制信号的控制下能实现对锁存器输出端和地址/数据线之间的切换;由两只场效应管组成了输出驱动电路。,图2-13 P0口的位结构图,当控制信号线为低电平,P0口用作通用I/O口时,需外加上拉电阻。输出(写)时,内部总线上的数据在写信号的控制下,先写入锁存器,经 端和V2两次反相后立即以原来的逻辑状态反映到外部引脚;输入(读)时,为保证引脚上的信号能正常读入,应先向锁存器写1,令V1、V2截止,外部引脚信号经输

45、入缓冲器送到内部数据总线。 当控制信号线为高电平时,P0口用作外部扩展存储器的数据总线和低8位地址总线。在内部总线信号的作用下,V1、V2交替导通与截止,将数据/地址信息反映到外部引脚。外部数据输入时,经输入缓冲器送到内部数据总线。此时,P0口就不能再作I/O口使用了。,2) P1口 P1口往往只作为通用I/O口使用,其位结构图如图2-14所示。P1口的位电路结构由以下几个部分组成:一个数据输出锁存器,用于输出数据的锁存;两个三态输入缓冲器,一个用于读锁存器,另一个用于读引脚;数据输出驱动电路,由场效应管和内部上拉电阻组成。 P1口作为输出口时,无需外加上拉电阻;作为输入口时,也必须先向锁存器

46、写入1,原理与P0口相同。,图2-14 P1口的位结构图,3) P2口 P2口既可用作通用I/O口,又常用作高8位地址总线。P2口的位结构图如图2-15所示。P2口的位电路结构由以下几个部分组成:一个数据输出锁存器,用于输出数据的锁存;两个三态输入缓冲器,一个用于读锁存器,另一个用于读引脚;一个多路开关MUX,它的一个输入来自锁存器的Q端,另一个输入来自内部地址的高8位;数据输出驱动电路,由非门、场效应管和内部上拉电阻组成。 作为通用I/O口使用时,P2口的功能与P1口一样;用作高8位地址输出线应用时,P2口与P0口输出的低8位地址一起构成16位的地址总线,可以寻址64 KB地址空间。当P2口

47、作高8位地址输出口时,其输出锁存器原锁存的内容保持不变。,图2-15 P2口的位结构图,4) P3口 P3口是双功能8位输入/输出口,内部结构中增加了第二输入/输出功能,见表2-9。如图2-16所示,P3口的位电路结构由以下几个部分组成:一个数据输出锁存器,用于输出数据的锁存;3个三态输入缓冲器,一个用于读锁存器,另外两个用于读引脚和第二功能数据的缓冲输入;数据输出驱动电路,由与非门、场效应管和内部上拉电阻组成。,当第二输出功能信号为高电平时,P3口作为I/O口使用,输入/输出过程与其他口相同;用作第二输出功能时,应先向锁存器写入1,第二输出功能信号经与非门、场效应管输出到引脚;用作第二输入功

48、能时,也应先向锁存器写入1,而且第二输出功能信号自动为1,与非门输出0信号,场效应管截止,引脚信号由三态门输入。这样,不管是作为通用I/O口使用还是第二功能信号输入,电路中的锁存器输出和第二输出功能信号线均应置1。 P3口的某位不作为第二功能使用时,则自动处于通用输出/输入口功能。,图2-16 P3口的位结构图,其他功能部件在后续内容中介绍。 4单片机复位 复位是单片机的初始化操作,复位后,片内各寄存器的状态如表2-10所示。复位不影响内部RAM中储存的数据。复位后,PC = 0000H,即指向程序存储器0000H地址单元,使CPU从0000H地址单元开始重新执行程序,因此,当单片机系统运行出错或操作错误使系统处于死锁状态时,可按复位键重新启动。,根据前述的单片机复位条件(RST端必须至少保持两个机器周期的高电平),通常采用上电自动复位和按键手动复位两种方式。 1) 上电自动复位 上电自动复位电路利用RC充电来实现复位条件,如图2-17(a)所示。应根据石英晶体振荡频率来合理选取参数。 2) 按键手动复位 图2-17(b)所示电路为兼具了上电自动复位和按键手动复位的复合电路。程序运行时,通过复位按键可

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1