请输入您要查询的百科知识:

 

词条 单片机原理及应用教程
释义

图书信息1

书名:单片机原理及应用教程ISBN: 978-7-301-17540-8

作者: 周广兴,张子红

出 版 社: 北京大学出版社

版次: 1

开本: 16开

装订: 平

字数: 531 千字

页数:364

定价: ¥40.00

出版日期: 2010-08-18

丛书名: 21世纪全国本科院校电气信息类创新型应用人才培养规划教材

内容简介

本书以MCS-51单片机为讲述中心,介绍单片机的原理及应用。内容包括单片机概述、MCS-51单片机的结构、指令系统、汇编语言程序设计、内部功能模块、系统扩展技术、常用接口技术、C语言程序设计以及单片机应用系统的设计与实例。本书是在参考了各种系列单片机的最新资料,吸取了单片机开发应用的最新成果后编写而成的。

目录

第1章 单片机概述

第2章 MCS-51单片机结构

第3章 MCS-51单片机指令系统

第4章 MCS-51汇编语言程序设计

第5章 MCS-51单片机功能模块

第6章 MCS-51系统扩展技术

第7章 MCS-51单片机接口技术

第8章 MCS-51单片机C语言程序设计

第9章 单片机应用系统设计与实例

附录A MCS-51单片机指令表

附录B C51的库函数

附录C 多种单片机型号命名法

附录D ASCII码表

附录E 控制符号的定义

附录F 单片机常用网站

书 评

全书具有较强的系统性、先进性和实用性。内容选材精炼、论述简明,每章均配有习题。本书可作为高等院校计算机科学与技术、自动化、电子信息工程、机电一体化等本科专业的单片机课程教材,也可作为工程技术人员单片机应用技术的参考书。

图书信息2

书名:单片机原理及应用教程

书号:9787302245551

作者:张元良

定价:25元

出版日期:2011-2-23

出版社:清华大学出版社

内容简介

本书系统地介绍了MCS-51系列单片机的结构、指令系统、程序设计、中断系统、定时器/计数器、串行口、系统扩展及实用I/O接口技术等基本原理及初步应用;还介绍了几种常用单片机开发应用软件(Keil、Protel 99SE、Proteus),以利于读者边学习边实践;并且介绍了单片机开发流程及典型应用实例。书中配有丰富的实例详解及习题。

本书可作为大中专院校单片机原理及应用课程的教材,或作为单片机爱好者的自学用书,也可作为单片机应用开发技术人员、智能仪表开发技术人员及研究生的设计参考用书。

前言

由于单片机具有体积小、功能强、集成度高、可靠性高、性价比高等优点,广泛应用于工业测控、家用电器、智能仪表、机器人、办公设备以及各种现代通信设备和产品中。尽管16位和32位单片机功能更加强大,但8位单片机仍是主流产品,这主要是因为8位单片机技术成熟,性能得到很大的改良,具有更多的外围器件,并且成本极具竞争性。同时8位单片机可以作为学习16位单片机和32位单片机的基础,掌握了8位单片机的原理及应用技术,再学习16位和32位单片机会更容易。

单片机的典型代表是Intel公司生产的MCS-51系列单片机。本书以MCS-51系列单片机为基础,系统介绍单片机的基本结构、组成原理、指令系统、接口技术及应用。

全书共12章。第1章概述了单片机的基础知识以后,介绍了3种实用软件:Keil、Protel 99SE及Proteus;第2章介绍MCS-51系列单片机的内部结构、时序及单片机的最小系统;第3章介绍MCS-51系列单片机的指令系统,每一类型指令系统后都有实例解析,帮助学生加深对51系列单片机程序指令的理解;第4章通过实例介绍单片机汇编语言程序设计的流程和方法;第5~7章分别介绍单片机中断系统、定时器/计数器及串行口的结构与工作原理,每章都有非常简单、实用、完整的实例解析,详细解析电路原理图的设计、程序的编写以及仿真软件的应用,学生可以实际操作一遍,就相当于完成了一个完整的工程实际设计的仿真调试,从而了解单片机实际开发流程;第8章通过实例介绍单片机系统扩展及实用接口技术;第9章系统地介绍单片机开发流程;第10~12章介绍了3个完整的工程实例。

本书前几章的实例是非常简单的LED或数码管驱动电路和程序,后几章的实例是为学有余力的学生准备的。学生可以用仿真软件Keil检查自己的作业,也可以对书中介绍的实例进行仿真调试。Proteus软件可以对书中介绍的实例或学生自己的小设计进行软、硬件综合仿真。书中的实例多选用AT89C51或AT89S51,这两种单片机都是MCS-51系列兼容机,引脚和指令系统完全兼容,因内部有flash存储器而得到广泛应用。

本书具有如下特点: ①工程实例多。本书的实例基本都是从工程实例中简化出来的,使学生能够把学到的知识和单片机实际应用技术联系起来,增加感性认识。②实例的完整性。本书设置了很多简单而完整的实例,旨在使学生建立整体的概念,加深对单片机原理的理解。③渐进性。本书从最简单的发光管闪亮控制实例开始,逐渐增加难度,由浅入深地引导学生学习软、硬件开发技术。④新颖性。本书在实例中尽量避免采用过时的接口芯片,而采用在市场上容易买到的、没有被淘汰的芯片。

本书内容丰富,深入浅出,适合作为单片机原理及应用课程的教材,也可以帮助自学者解决在设计和应用单片机时所遇到的实际问题。

本书主要由张元良编写,参加编写工作的还有崔世界、冯旭、张野、高艳、徐海洋、夏召辉、董健、朱江、周笛、周志民、李松、闫广鹏、丁兴国等,王建军对本书进行了全面的校审,在此表示感谢!

限于作者的水平和经验,书中难免存在错误和不足之处,欢迎广大读者给予指正。

目录

目 录CONTENTS第1章 单片机与开发环境1

1.1 单片机概述1

1.1.1 微型计算机1

1.1.2 单片机1

1.1.3 单片机应用系统2

1.1.4 单片机的发展和应用3

1.2 Keil仿真软件4

1.3 Protel 99 SE软件8

1.3.1 Protel 99 SE软件安装9

1.3.2 Protel 99 SE软件使用11

1.4 Proteus仿真软件15

1.4.1 Proteus ISIS功能简介16

1.4.2 绘制原理图19

1.4.3 给CPU载入程序22

1.4.4 在Proteus中调试程序22

习题23

第2章 MCS-51系列单片机的硬件结构25

2.1 单片机的内部结构25

2.1.1 内部结构框图25

2.1.2 引脚与功能27

2.2 单片机的存储器结构28

2.2.1 程序存储器28

2.2.2 数据存储器29

2.2.3 特殊功能寄存器31

2.3 单片机的并行I/O口35

2.3.1 I/O口的特点35

2.3.2 I/O口的内部结构35

2.3.3 I/O口的功能36

2.3.4 I/O口的负载能力37

2.4 单片机的时钟与时序37

2.4.1 时钟电路38

2.4.2 CPU时序38

2.5 单片机的复位40

2.6 单片机最小系统41

习题42

单片机原理及应用教程目 录第3章 MCS-51系列单片机的指令系统43

3.1 指令系统简介43

3.1.1 指令格式43

3.1.2 指令分类44

3.2 单片机寻址方式及实例解析45

3.3 单片机指令系统及实例解析48

3.3.1 数据传送指令48

3.3.2 算术指令54

3.3.3 逻辑指令60

3.3.4 转移指令65

3.3.5 位操作指令74

3.3.6 伪指令77

习题82

第4章 汇编语言程序设计84

4.1 汇编语言源程序汇编84

4.2 汇编语言的程序举例85

4.2.1 基本程序设计85

4.2.2 子程序设计和调用93

4.2.3 应用控制流程设计95

习题97

第5章 MCS-51系列单片机的中断系统98

5.1 中断的概念98

5.2 中断源99

5.3 中断控制寄存器99

5.4 中断的优先级102

5.5 中断的响应103

5.6 由中断模块程序认知中断处理过程105

5.6.1 外部中断模块代码105

5.6.2 定时器中断模块代码105

5.7 通过实例掌握外部中断106

习题108

第6章 MCS-51系列单片机的定时器/计数器109

6.1 定时器/计数器的结构109

6.1.1 计数功能110

6.1.2 定时功能110

6.2 定时器/计数器的相关寄存器110

6.2.1 定时器/计数器的方式寄存器TMOD111

6.2.2 定时器/计数器的控制寄存器TCON112

6.2.3 中断允许寄存器IE113

6.2.4 中断优先级寄存器IP113

6.3 定时器/计数器的工作方式113

6.4 定时器/计数器的知识扩展117

6.4.1 定时器的溢出同步问题117

6.4.2 运行中读取定时器/计数器118

6.5 由定时器/计数器模块程序认知定时器/计数器处理过程119

6.6 通过实例掌握定时器121

6.7 通过实例掌握计数器124

习题125

第7章 MCS-51系列单片机的串行口126

7.1 串行通信的概念126

7.2 MCS-51系列单片机串行口的结构129

7.2.1 串行口的结构129

7.2.2 串行口控制寄存器130

7.2.3 串行口的工作方式131

7.2.4 串行通信的波特率135

7.3 串行口通信136

7.3.1 双机通信136

7.3.2 多机通信136

7.4 通过实例掌握串行口通信137

7.4.1 硬件设计137

7.4.2 软件设计140

7.4.3 PC机与单片机串行通信的实现142

习题143

第8章 MCS-51系列单片机系统扩展及实用I/O接口技术144

8.1 存储器的扩展144

8.1.1 程序存储器扩展144

8.1.2 数据存储器的扩展145

8.1.3 存储器综合扩展146

8.1.4 数据存储器扩展实例148

8.2 开关量输入接口设计151

8.2.1 键盘接口151

8.2.2 4×4矩阵键盘扫描实例152

8.2.3 继电器输入接口156

8.2.4 行程开关输入接口156

8.2.5 光电编码器输入接口157

8.3 开关量输出接口设计157

8.3.1 蜂鸣器输出接口157

8.3.2 继电器输出接口158

8.3.3 固态继电器输出接口158

8.3.4 LCD接口158

8.4 常用A/?D转换接口设计160

8.4.1 TLC2543与单片机接口实例160

8.4.2 ADC0832与单片机接口实例164

8.4.3 A/D转换器应用实例167

8.5 常用D/A转换接口设计172

8.5.1 TLC5618与单片机接口实例172

8.5.2 MAX518与单片机接口实例175

习题178

第9章 MCS-51系列单片机开发流程179

9.1 总体方案设计179

9.1.1 系统功能要求179

9.1.2 硬件总体方案179

9.1.3 软件总体方案181

9.2 硬件和软件细分设计181

9.2.1 硬件设计181

9.2.2 软件设计及调试182

9.3 系统的Proteus仿真和调试183

9.3.1 利用Proteus绘制电路图183

9.3.2 利用Proteus软件仿真184

9.4 系统调试186

9.4.1 单片机应用系统的一般调试方法186

9.4.2 数码管显示系统调试187

第10章 数字电子钟设计实例189

10.1 设计要求189

10.2 硬件设计189

10.2.1 按键电路设计190

10.2.2 时钟芯片DS1302的性能特点和工作原理190

10.2.3 时钟芯片DS1302与单片机的连接192

10.2.4 电路原理图193

10.3 软件设计194

10.3.1 显示子程序软件流程图194

10.3.2 显示子程序的代码194

10.3.3 主函数软件流程图195

10.3.4 总的汇编语言源程序代码195

第11章 LED阵列动态显示设计实例209

11.1 设计要求209

11.2 硬件设计209

11.2.1 74HC595简介209

11.2.2 点阵LED简介212

11.2.3 Protel电路原理图212

11.3 软件设计214

11.3.1 程序流程图214

11.3.2 源程序代码214

第12章 数字温度计设计实例218

12.1 设计要求218

12.2 硬件设计218

12.2.1 温度芯片DS18B20的介绍218

12.2.2 一线式总线的概念220

12.2.3 硬件总体设计电路图220

12.3 软件设计222

12.3.1 DS18B20子程序流程图222

12.3.2 DS18B20子程序代码222

12.3.3 数码管串行方式显示子程序流程图224

12.3.4 数码管串行方式显示子程序代码224

12.3.5 主函数软件流程图225

12.3.6 整体源程序代码225

附录A MCS-51系列单片机汇编指令表229

参考文献234

部分章节

第3章 MCS-51系列单片机的指令系统 任何一个单片机都必须有软件和硬件配合才能达到预期的目的。软件主要是采用汇编语言或C语言进行编程,汇编语言对于理解单片机的结构有着非常重要的作用,所以对于汇编语言的学习一直是单片机应用系统学习的重点。本章主要通过详细的实例介绍单片机的寻址方式和指令系统。通过本章的学习,应掌握各种指令的应用,并且能够清楚地知道各指令的寻址方式。3.1 指令系统简介指令是指挥计算机工作的命令,是计算机软件的基本单元。单片机所有指令的集合称为指令系统,它是表征计算机性能的重要标志。MCS-51系列单片机使用42种助记符,有51种基本操作。通过助记符以及指令中源操作数和目的操作数的不同组合构成了MCS-51系列单片机的111条指令。3.1.1 指令格式指令格式是指令的书面表达形式,汇编语言指令格式为: \\ 操作码助记符 \\ \\ \\每部分构成一个字段,各字段之间用空格或规定的标点符号隔开,方括号内字段可有可无,方括号外字段必须要有。例如: LOOP: MOV A, #4FH ;A←#4FH各字段的意义如下。 (1) 标号: 指令的符号地址。它代表一条指令的机器代码存储单元的首地址。当某条指令可能被调用或作为转移的目的地址时,通常要在该指令前冠以标号。被赋予标号的指令就可以被用作其他指令的操作数使用。 (2) 操作码: 表示指令进行何种操作,用助记符形式表示。一般为英语单词的缩写(例如上例中的MOV) . (3) 操作数: 指令操作的对象。操作数分为目的操作数(上例中累加器A)和源操作数(例如上例中的#4FH) ,两者顺序不可颠倒。操作数可以是数字,也可以是标号或寄存器名等,有些指令不需要指出操作数。 (4) 注释: 用来说明指令的功能,以便于对程序的阅读和理解。而它本身并不参与程序操作(如上例中的“; A←#4FH" ). 单片机原理及应用教程第3章 MCS?-51系列单片机的指令系统3.1.2 指令分类MCS-51系列单片机共有111条指令,有3种不同的分类方法。1. 按指令功能分类按照指令的功能分类如下: 2. 按字节数分类按照字节数分类如下。 (1) 单字节指令: 只有一个字节的操作码,实际上操作数隐含其中。如指令“INC A" 。在MCS-51指令系统中共有49条。 (2) 双字节指令: 一个字节操作码,一个字节操作数。如指令“ADD A,#32H" ,操作码为24H,操作数为32H,目的操作数隐含在操作码中。在MCS-51指令系统中共有46条。 (3) 三字节指令: 一个字节操作码,两个字节操作数。如指令“MOV 5FH,4EH" ,该指令执行把4EH地址单元的内容送到5FH地址单元中去。在MCS-51指令系统中共有16条。图3-1给出了以上3种形式在内存中的数据安排。图3-1 指令格式3. 按指令执行的周期分类按照指令执行的周期可分为: 64条单周期指令、45条双周期指令、2条四周期指令(乘法和除法)。以主频为12?MHz的单片机系统为例,单周期指令执行时间为1?μs,双周期指令执行时间为2?μs,四周期指令执行时间为4?μs. 3.2 单片机寻址方式及实例解析所谓寻址方式就是单片机指令中提供的操作数的形式,也就是寻找操作数或操作数所在地址的方式。在51系列单片机中,存放数据的存储器空间有4种: 内部RAM、特殊功能寄存器SFR、外部RAM和程序存储器ROM。其中,内部RAM和SFR统一编址,外部RAM和程序存储器是分开编址的。为了区别指令中操作数所处的地址空间,对于不同存储器的数据操作,采用不同的寻址方式。1. 直接寻址在指令中直接给出操作数所在存储单元的地址(一个8位二进制数),称为直接寻址。用符号direct表示。直接寻址方式中操作数的存储空间共有3种: (1) 内部数据存储器的128个字节单元(00H~7FH) 例如: MOV A,50H ; A←(50H)该指令的功能是把内部RAM中50H单元中的内容送入累加器A. (2) 位地址空间例如: MOV C,01H ;CY←(01H)该指令的功能是把直接位01H内容送给进位位CY. (3) 特殊功能寄存器特殊功能寄存器只能用直接寻址方式访问。例如: MOV IE,#76H ; IE←76H该指令的功能是把立即数76H送给中断允许寄存器IE. 2. 立即寻址指令中直接给出操作数的寻址方式称为立即寻址。在51系列单片机指令系统中,立即数用前面加“#”号的8位数(如#20H)或16位数(如#3054H)表示。例如: MOV A, #30H; A←30HMOV A, 30H; A←(30H)第一条指令的功能是把立即数30H送给累加器A。而第二条指令是直接寻址,其功能是把30H单元的内容送给累加器A. 3. 寄存器寻址以通用寄存器的内容为操作数的寻址方式称为寄存器寻址。通用寄存器包括: A、B、DPTR、R0~R7。其中B寄存器仅在乘法、除法指令中为寄存器寻址,在其他指令中为直接寻址。A寄存器可以寄存器寻址,又可以直接寻址(此时写作ACC) 。直接寻址和寄存器寻址的差别在于,直接寻址是操作数所在的字节地址(占一个字节),寄存器寻址是寄存器编码出现在指令码中。寄存器寻址速度比直接寻址要快。除上面所指的几个寄存器外,其他特殊功能寄存器一律为直接寻址。例如: MOV A, R0 ;A←(R0)该指令的功能是把通用寄存器R0中的内容送给累加器A. 4. 寄存器间接寻址以寄存器中的内容为地址,该地址的内容为操作数的寻址方式称为寄存器间接寻址。能够进行寄存器间接寻址的寄存器有: R0、R1、DPTR,用前面加@表示,如@R0、@R1、@DPTR. 寄存器间接寻址的存储空间包括内部数据存储器和外部数据存储器。由于内部数据存储器共有128字节,因此用一个字节的R0和R1可间接寻址整个空间。而外部数据存储器最大可达64?KB,仅R0或R1无法寻址整个空间,为此需要由P2端口提供外部RAM高8位地址,由R0或R1提供低8位地址,由此共同寻址64?KB范围。也可用16位的DPTR寄存器间接寻址64?KB存储空间。在指令中,对内部RAM寻址用MOV作为助记符,对外部RAM寻址用MOVX作为操作助记符。例如: MOV @R0, A ;((R0))←A MOVX A, @R1 ;A←((R1)) MOVX@DPTR, A ;((DPTR))←A第一条指令的功能是将累加器A中的内容送给以R0内容为地址的内部RAM单元中,第二条指令的功能是将以R1内容为地址的外部RAM单元中的内容送给累加器A,第三条指令的功能是将累加器A中的内容送给以DPTR内容为地址的外部RAM单元中。5. 变址寻址由寄存器DPTR或PC中的内容加上累加器A内容之和形成操作数地址的寻址方式称为变址寻址。变址寻址只能对程序存储器中的数据进行寻址操作。由于程序存储器是只读存储器,因此变址寻址只有读操作而无写操作。在指令符号上采用MOVC的形式。变址寻址方式有两类: (1) 以程序计数器当前值为基址。例如: MOVC A,@A+PC ;(PC)+1→(PC), ((PC)+(A))→A该指令的功能是先将PC指向下一条指令地址,然后再与累加器内容相加,形成变址寻址的单元地址,将此单元地址的内容送到累加器A中。 (2) 以数据指针DPTR为基址,以数据指针内容和累加器内容相加形成变址寻址的单元地址,将此单元地址的内容送到累加器A中。例如: MOVC A, @A+DPTR ;A←((A)+(DPTR))6. 相对寻址以程序计数器PC的当前值为基址,加上相对寻址指令的字节长度,再加上指令中给定的偏移量rel的值(rel是一个8位带符号数,用二进制补码表示),形成相对寻址的地址。例如: JNZ 60H假定指令存放的首地址是2010H(PC当前值),则指令操作码70H存放在2010H单元,偏移量60H存放在2011H单元。指令执行时,首先PC值修正为2012H(PC当前值加2)。又假定累加器A中的值不为零,满足转移条件,则程序将转移到 2012H+60H=2072H处执行。相对寻址只适用于对程序存储器的访问,转移指令多采用这种寻址方式。7. 位寻址MCS-51系列单片机设有独立的位处理器,又称布尔处理器。对位地址中的内容进行位操作的寻址方式称为位寻址。由于单片机中只有内部RAM和特殊功能寄存器的部分单元有位地址,因此位寻址只能对有位地址的这两个空间进行寻址操作。位寻址是一种直接寻址方式,由指令给出直接位地址。与直接寻址不同的是,位寻址只给出位地址,而不是字节地址。例如: MOV C, 20H该指令的功能是将位20H中的内容送给进位位CY. 3.3 单片机指令系统及实例解析在描述指令系统时,为了表达方便,经常会用到一些特殊符号,这些符号及其代表的含义如表3-1所示。表3-1 指令系统中常见符号及其含义符 号含 义Rn当前工作寄存器R0~R7, n=0~7@Ri用于间接寻址的当前寄存器,只能是R0或R1, i=0或1#data8位立即数,数据范围00H~FFH#data1616位立即数,数据范围0000H~FFFFHdirect8位直接地址,既可以表示内部RAM低128单元地址,也可以是SFR的单元地址或符号,在指令中表示直接寻址方式@DPTR表示以DPTR为数据指针的间接寻址,对外部64?KB RAM/ROM或I/O口寻址bit位地址addr11低11位目标地址addr1616位目标地址rel8位带符号地址偏移量(用补码表示)$指令的当前地址/加在位地址前面,表示对该位取反(×)某寄存器或某单元的内容((×))某间接寻址单元中的内容←表示数据传送的方向?表示数据交换3.3.1 数据传送指令数据传送类指令是指令系统中使用最频繁的指令,主要用于数据保存及数据交换等场合。按其操作方式又可分为数据传送、数据交换和栈操作。数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、PUSH、POP等。1. 内部数据传送指令MOV指令格式 (1) 以累加器A为目的操作数的数据传送指令 MOV A, #data ;A←data,立即数data传送至累加器AMOV A, direct ;A←(direct),直接地址中的内容传给AMOV A, Rn ;A←(Rn),n=0~7,工作寄存器的内容传给AMOV A, @Ri ;A←((Ri)),R0或R1所指地址中的内容传给A (2) 以直接地址direct为目的操作数的传送指令 MOV direct, A ;direct←(A),A的内容传给直接地址MOV direct, Rn ;direct←(Rn),工作寄存器内容传给直接地址MOV direct2, direct1;direct2←(direct1),直接地址内容传给直接地址MOV direct, #data ;direct←data,立即数传给直接地址MOV direct, @Ri;direct←((Ri)),R0或R1所指地址的内容传给直接地址 (3) 以寄存器Rn为目的操作数的传送指令 MOV Rn, #data ;Rn←data,立即数传给工作寄存器MOV Rn, direct ;Rn←(direct),直接地址的内容传给工作寄存器MOV Rn, A ;Rn←(A), 累加器A的内容传给工作寄存器 (4) 以@Ri为目的操作数的传送指令 MOV @Ri, #data ;(Ri)←data,立即数传给R0或R1内容所指的地址单元MOV @Ri, direct ;(Ri)←(direct),直接地址传给Ri内容所指地址单元MOV @Ri, A ;(Ri)←(A),累加器A内容传给Ri内容所指地址单元 (5) 16位数据传送指令 MOV DPTR, #data16 ;DPH←data?15~8,立即数高8位传给寄存器DPH;DPL←data?7~0,立即数低8位传给寄存器DPL指令功能把源操作数指定的字节变量复制到目的操作数指定的单元或寄存器中,源字节不变。指令说明该指令的源操作数和目的操作数都在单片机内部,可以是片内RAM地址,也可以是特殊功能寄存器SFR的地址(立即数除外). 实例解析例3-1 已知(R1) = 3BH, (R0) = 27H, (27H) = 9DH, (A) = 3BH。为以下顺序执行语句添加注释。 MOV A, #50H ;(A)=50H,立即数50H传给A MOV A, 27H ;(A)=9DH,直接地址27H的内容9DH传给A MOV A, R1 ;(A)=3BH,工作寄存器R1内容传给A MOV A, @R0 ;(A)=9DH,R0所指地址27H的内容9DH传给A MOV 20H, A ;(20H)=9DH, A的内容传给直接地址20H MOV 20H, R0 ;(20H)=27H, R0的内容传给直接地址20HMOV 20H, 27H ;(20H)=9DH,直接地址27H的内容传给地址20HMOV 20H, #0FFH ;(20H)=0FFH,立即数传给20HMOV 20H, @R0 ;(20H)=9DH,R0所指地址27H内容传给20HMOV R1, #27H ;(R1)=27H,立即数传给R1 MOV R1, 27H ;(R1)=9DH,27H内容传给R1MOV R1, A ;(R1)=9DH, A的内容传给R1 MOV @R0, #80H ;(27H)=80H,立即数传给R0所指地址27H MOV @R0, A ;(27H)=9DH,A的内容传给R0所指地址27HMOV DPTR, #1234H;(DPH)=12H, (DPL)=34H例3-2 设内部RAM 20H单元内容为30H, 30H单元内容为10H, P1口作为输入口,其输入的数据为78H。试判断下列程序的执行结果。 MOV R0, #20H ;(R0)=20H,立即数送R0MOV A, @R0 ;(R0)=20H,(20H)=30H,故(A)=30HMOV R1, A ;(A)=30H,故(R1)=30HMOV B, @R1 ;(R1)=30H,(30H)=10H,故(B)=10H MOV @R1, P1 ;(R1)=30H,(P1)=78H,故(30H)=78HMOV P2, P1 ;(P1)=(P2)=78H 执行结果: (R0)=20H,(A)=(R1)=30H,(B)=10H,(P1)=(P2)=(30H)=78H. 2. 外部数据存储器读写指令MOVX指令格式 MOVX A, @DPTR ;A ←((DPTR)),DPTR所指外部存储器地址单元内容传给AMOVX @DPTR, A ;(DPTR)←(A),A的内容传给DPTR所指外部地址单元MOVX A, @Ri ;A←((Ri)),Ri所指外部存储器地址单元内容传给AMOVX @Ri, A ;(Ri)←(A),A的内容传给Ri所指外部存储器地址单元指令功能访问片外RAM或扩展的I/O口。实例解析例3-3 将片外RAM中1000H单元的内容送入片外RAM的56H单元,将片外RAM中78H单元的内容送入片外RAM的1010H单元。 MOV R0, #56H ;(R0)=56H MOV DPTR, #1000H;(DPTR)=1000H,指针DPTR指向片外1000H单元 MOVX A, @DPTR ;(A)=(1000H),片外存储器 1000H单元内容传给A MOVX @R0, A ;(56H)=(A),片外1000H单元内容送入片外56H单元 MOV R0, #78H ;(R0)=78H MOV DPTR, #1010H;(DPTR)=1010H,指针DPTR指向片外1010H单元 MOVX A, @R0 ;(A)=(78H),片外78H单元内容传给A MOVX @DPTR, A ;(1010H)=(A),片外78H内容送入片外1010H单元例3-4 编写程序将外部RAM中2000H单元中的内容送入片内RAM的60H单元中。 MOV DPTR,#2000H ;(DPTR)=2000H,设指针 MOVX A,@DPTR ;(A)=(2000H),片外2000H单元内容传给A MOV 60H,A ;(60H)=(A)=(2000H),片外2000H单元内容送入片内60H单元3. 程序存储器读指令MOVC指令格式 MOVC A, @A+DPTR ;A←((A)+(DPTR))MOVC A, @A+PC ;A←((A)+(PC))指令功能把累加器A作为变址寄存器,将其中的内容与基址寄存器(DPTR、PC)的内容相加,得到程序存储器某单元的地址,再把该地址单元中的内容送累加器A。指令执行后,不改变基址寄存器的内容。指令说明本指令主要用于查表,即完成从程序存储器读取数据的功能。但基址寄存器DPTR和PC的适用范围不同。 (1) 当以DPTR作为基址寄存器时,查表时DPTR用于存放表格的起始地址。由于用户可以很方便地通过16位数据传送指令给DPTR赋值,因此该指令适用范围较广,表格常数可以设置在64KB程序存储器中的任何位置。 (2) 当以PC作为基址寄存器时,由于A为8位无符号数,这就使得该指令查表范围为以PC当前值开始后的256个地址范围。实例解析例3-5 已知寄存器R1中有一个0~9范围内的数,用以上查表指令编出能查出该数平方值的程序。 (1) 以DPTR作为基址寄存器 MOV A, R1 MOV DPTR, #2000H MOVC A, @A+DPTR ;查表 ? RET2000H DB 0,1,4,9,16,25,36,49,64,81若(R1) =3,查表得9并存于A中;若(R1) =6,查表得36并存于A中。 (2) 以PC作为基址寄存器 ORG 2000H 2000H MOV A, R12001H ADD A, #03H ;加修正量2003H MOVC A, @A+PC ;查表2004H MOV 20H, A2006H RET2007H DB 0,1,4,9,16,25,36,49,64,81若(R1) = 4,查表得16并存于A中。查表指令所在单元为2003H,取指令后的PC当前值为2004H。若A不加修正量调整,将出现查表错误。修正量=表头首地址-PC当前值=2007H-2004=03H。所以这里修正量为03H ( "MOV 20H,A”指令占2个字节,RET指令占1个字节)。由于A为8位无符号数,因此查表指令和被查表格通常在同一页内(页内地址00H~FFH) . 例3-6 编写程序,将外部ROM中的1000H单元的内容送到外部RAM的10H单元中。 MOV DPTR,#1000H ;(DPTR)=1000H,程序存储器地址 MOV A,#00H ;(A)=00H,变址寄存器A清0 MOVC A,@A+DPTR ;(A)=(1000H+00H),程序存储器1000H单元内容送A MOV R0,#10H ;(R0)=10H,外部RAM地址 MOVX @R0,A ;((R0))=(10H)=(A)=(1000H),1000H内容送外部RAM 10H4. 堆栈操作指令PUSH、POP堆栈是一个先进后出的区域。栈指针为SP,它指出栈顶的位置。1) 进栈指令指令格式 PUSH direct ; SP←(SP)+1, SP←(direct) 指令功能把指令中直接地址中的内容送入当前栈指针加1的单元中去。指令说明 (1) 栈指针的内容加1. (2) 把直接地址单元中的内容送入栈指针所指的单元中。实例解析例3-7 为下列进栈程序代码添加注释。 MOV 30H, #12H ;(30H)=12H MOV SP, #50H ;设栈顶,(SP)=50H PUSH 30H ;(SP)=51H,(51H)=(30H)=12H例3-8 设(SP)=60H,数据指针DPTR内容为2000H。试分析执行下列程序后的结果。 PUSH DPL ;(SP)=(SP)+1=61H,(61H)=(DPL)=00H PUSH DPH ;(SP)=(SP)+1=62H, (62H)=(DPH)=20H执行结果: (SP)=62H, (61H) =00H,(62H)=20H. 2) 出栈指令POP指令格式 POP direct ;(direct)←((SP)), SP←(SP)-1

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/27 6:23:55