
本书以80C51单片机为主介绍微机基本理论与原理,实现将微机原理的学习和具体的单片机应用实践密切结合。本书从计算机基础知识入手,全面介绍微机的基本组成和原理,重点讲述80C51单片机的结构、指令系统、程序设计及常用的接口技术。对8086系统和C51语言分设两章介绍,一些实用的接口技术和接口芯片的使用穿插在相关的章节中介绍。 本书以汇编语言为主、C51语言为辅来讲述程序的设计方法与技巧,对Proteus8、Keil μVision5、C51语言做基本介绍,C51语言与汇编语言编程在实例中交叉出现,对典型或重要知识点实例通常给出汇编语言与C51语言对应的源程序及软件仿真过程。本书选材规范,通俗易懂,每章都配有思考题与习题。 本书可作为高等院校电气类、电子信息类、自动化类等“微机原理”与“单片机技术”课程的教材,也可作为高职高专相关专业的教材,同时可作为学习单片机应用基础的培训教材和自学参考书。
“微机原理及应用”是高等学校电气与电子信息类各专业的计算机硬件基础课程,“单片机与接口技术”是上述各专业的应用技术课程,目前很多院校电子、通信、电气、自动化等专业的学生在就业见习时,单片机的设计开发已被企业视为毕业生必备的基本能力。在目前教学学时大量压缩的情况下,“微机原理及应用”(作为学科基础课程)和“单片机与接口技术”(作为实践动手要求很高的专业课程)同时分学期前后开设,在学时安排上势必存在一定的困难,由于两门课程存在衔接关系,因此很难保证不在教学内容上出现重复和遗漏。 如何既让学生掌握微机基本理论和原理,为后续课程(EDA设计、ARM、嵌入式系统、DSP等)及自主性学习与研究打下较扎实的理论基础,又让学生真正掌握单片机的应用技术(包括原理、接口技术、最新设计技术等),以提高学生的实验实践能力、创新创业(就业)能力,这对以培养应用型人才为主的一般院校的本科教学来说极为重要,为此我们试着编写满足这种要求的教材。本书第2版经过4年多的教学实践,为更好实现以上目标和服务于应用型大学,同时应国家一流专业建设的需要,在听取专家和用户使用意见后,历时一年多修订出版第3版。 本书旨在将“微机原理及应用”和“单片机与接口技术”两门课程合二为一,在较系统讲述微机基本理论和原理的同时,突出单片机(以80C51单片机为典型机)应用的技术性、实用性、前沿性,以满足本科教学“质量工程”提升的需要。 本书由东莞理工学院宋跃教授、任斌教授担任主编,湖南工业大学石伟副教授、五邑大学黄辉副教授、佛山科技学院蒋业文教授级高工、东莞理工学院彭超博士担任副主编,东莞理工学院雷瑞庭老师、黄河科技学院王照平副教授参编。其中,宋跃编写第7章、8.4.1节,任斌编写第3、5章,石伟编写第1(除1.5节)、6章,黄辉编写第9、10章,蒋业文编写第8章(除8.4.1节),彭超编写第2、4章,雷瑞庭编写第11章和1.5节,王照平编写第12章,东莞理工学院余炽业高级实验师、丁颜玉博士提供协助。 本书是首批国家级一流本科课程、广东省高等学校本科精品课程、广东省精品开放资源共享课程的配套教材。在本书编写过程中,感谢东莞理工学院胡必武副教授、朱德海老师对本书的编写与修改提出的指导和建议。在编写过程中参考了许多文献和资料,在此向各文献和资料的作者表示感谢。 本书按照72学时组织内容,具体教学内容教师可根据实际情况取舍。本书配有电子课件、程序源代码、思考题与习题参考解答、STC单片机参考资料等,读者可登录华信教育资源网www.hxedu.com.cn下载。 “80C51单片机指令表”和“MCS-51单片机汇编指令-机器码对照表”以二维码形式给出,以方便读者查阅参考。 由于作者水平有限,书中肯定存在错误和不足之处,敬请各位同仁不吝批评指正。 作 者 2021年12月
第1章 计算机基础知识 1 1.1 计算机中负数的表示和运算 1 1.1.1 机器数 1 1.1.2 机器数的原码、反码和补码 1 1.1.3 补码加/减运算 2 1.1.4 原码乘/除运算 3 1.2 计算机中的常用编码 3 1.2.1 ASCII码 3 1.2.2 非ASCII编码 4 1.2.3 BCD码 4 1.3 微型计算机概述 4 1.3.1 计算机的发展 4 1.3.2 微型计算机的基本组成 5 1.3.3 中央处理器的基本组成 5 1.3.4 微型计算机的程序存储与控制 6 1.4 单片机概述 6 1.4.1 单片机的发展过程及产品近况 6 1.4.2 AT89S5X单片机简介 7 1.4.3 STC系列单片机简介 7 1.4.4 STM32系列单片机简介 8 1.4.5 GD32系列单片机简介 8 1.5 单片机应用的开发仿真工具 8 1.5.1 Keil μVision集成开发环境简介 8 1.5.2 Proteus软件介绍 14 1.5.3 跑马灯仿真实例 17 思考题与习题 21 第2章 存储器 22 2.1 概述 22 2.2 只读存储器 24 2.2.1 只读存储器的结构及分类 24 2.2.2 EPROM芯片27256介绍 26 2.3 随机存储器 28 2.3.1 静态基本存储电路 29 2.3.2 动态基本存储电路 30 2.3.3 SRAM芯片6116介绍 30 2.3.4 DRAM芯片2116介绍 31 2.4 闪存 31 2.4.1 闪存简介 32 2.4.2 闪存芯片M45PE80 32 2.5 存储器的选择与扩展 33 2.5.1 存储器的选择 33 2.5.2 存储器的扩展 33 思考题与习题 37 第3章 80C51单片机的结构和原理 38 3.1 80C51单片机的概述 38 3.1.1 MCS-51单片机 38 3.1.2 80C51单片机的应用模式 38 3.2 80C51单片机典型产品资源配置与引脚 39 3.2.1 80C51单片机典型产品资源配置 39 3.2.2 引脚及其功能 39 3.3 80C51单片机的结构 40 3.3.1 80C51单片机逻辑结构 40 3.3.2 80C51单片机内部结构 41 3.4 80C51单片机内部数据存储器 42 3.4.1 80C51单片机的内部RAM 42 3.4.2 专用寄存器的位寻址 46 3.5 80C51单片机内部程序存储器 47 3.5.1 内部与外部ROM的选择 47 3.5.2 ROM的几个特殊单元 48 3.6 80C51单片机输入/输出(I/O)接口 49 3.6.1 P0口 49 3.6.2 P1口 50 3.6.3 P2口 50 3.6.4 P3口 50 3.7 单片机的工作方式 51 3.7.1 复位及复位电路 51 3.7.2 时钟电路和时序 52 3.7.3 单片机的低功耗方式 54 3.8 单片机执行指令的过程 54 思考题与习题 55 第4章 80C51单片机的指令系统 57 4.1 指令的基本格式及常用符号 57 4.1.1 指令的字节数 57 4.1.2 指令的执行时间 58 4.1.3 汇编语言的语句结构 58 4.2 80C51单片机的寻址方式 58 4.2.1 立即寻址 59 4.2.2 直接寻址 59 4.2.3 寄存器寻址 60 4.2.4 寄存器间接寻址 60 4.2.5 变址寻址 61 4.2.6 相对寻址 61 4.2.7 位寻址 62 4.3 数据传送类指令 62 4.3.1 一般传送指令 63 4.3.2 特殊传送指令 64 4.4 算术运算类指令 67 4.4.1 不带进位加法指令及BCD码调整指令 67 4.4.2 带进位加法指令 69 4.4.3 加1指令 69 4.4.4 带借位减法指令 70 4.4.5 减1指令 70 4.4.6 乘、除法指令 70 4.5 逻辑运算类指令 71 4.5.1 逻辑与指令 71 4.5.2 逻辑或指令 72 4.5.3 逻辑异或指令 72 4.5.4 清零及取反指令 72 4.5.5 移位指令 73 4.6 控制转移类指令 73 4.6.1 无条件转移指令 74 4.6.2 条件转移指令 75 4.6.3 子程序调用和返回指令 77 4.7 布尔变量操作指令 78 4.7.1 位传送指令 78 4.7.2 位置位指令 78 4.7.3 位运算指令 79 4.7.4 位控制转移指令 79 思考题与习题 80 第5章 80C51单片机的汇编语言程序设计 82 5.1 程序编制的方法和技巧 82 5.1.1 汇编语言的语句种类及 指令格式 82 5.1.2 常用的伪指令 83 5.1.3 源程序的编辑和汇编 84 5.2 汇编语言基本程序结构 85 5.2.1 顺序程序 85 5.2.2 分支程序 85 5.2.3 循环程序 88 5.2.4 子程序及其调用 90 5.3 常用程序举例 94 5.3.1 算术运算程序 94 5.3.2 代码转换 96 5.3.3 I/O操作 97 5.4 简单I/O设备的并行口直接驱动示例 99 思考题与习题 101 第6章 80C51单片机的C语言程序设计 103 6.1 单片机C语言概述 103 6.1.1 C51的程序结构 103 6.1.2 C51编译器介绍 103 6.1.3 C51语言和汇编语言的关系 103 6.2 C51的数据类型及存储类型 104 6.2.1 C51的数据类型 104 6.2.2 C51数据的存储类型 105 6.2.3 80C51单片机特殊功能寄存器的C51定义 105 6.3 C51的运算符和表达式 106 6.3.1 赋值运算符 106 6.3.2 算术运算符 107 6.3.3 关系运算符 107 6.3.4 逻辑运算符 107 6.3.5 位运算符 108 6.3.6 其他运算符 108 6.4 C51流程控制语句 111 6.4.1 条件语句 111 6.4.2 循环语句 111 6.4.3 开关语句 112 6.4.4 break、continue和goto语句 113 6.5 C51的构造数据类型 114 6.5.1 数组 114 6.5.2 指针 115 6.5.3 结构体 117 6.5.4 枚举 118 6.6 C51函数 118 6.6.1 C51函数定义 119 6.6.2 C51函数调用 120 6.6.3 混合编程简介 120 6.6.4 混合编程形式 122 6.6.5 C51库函数 122 6.7 C51中断编程实例 123 6.8 C51实例 124 6.8.1 C51仿真实例 124 6.8.2 混合编程实例 125 思考题与习题 126 第7章 80C51单片机的中断系统及定时/计数器 127 7.1 中断概述 127 7.2 中断处理过程 128 7.3 80C51单片机的中断系统及其控制 130 7.4 80C51单片机中断源的扩展 135 7.5 80C51单片机的定时/计数器及其应用 136 思考题与习题 152 第8章 80C51单片机的串行口及串行总线扩展 154 8.1 串行通信基本知识 154 8.1.1 基本通信方式及特点 154 8.1.2 串行通信的数据传送方式 154 8.1.3 串行通信的分类 155 8.1.4 串行通信的波特率、比特率 156 8.2 80C51单片机的串行口 156 8.2.1 80C51单片机串行口的结构 156 8.2.2 80C51单片机串行口控制 157 8.2.3 80C51单片机串行口实例 160 8.3 80C51单片机的串行口应用 163 8.3.1 双机通信 163 8.3.2 多机通信 166 8.3.3 单片机与PC通信 167 8.4 单片机的串行总线扩展 171 8.4.1 I2C总线接口及其扩展 171 8.4.2 SPI总线接口及其扩展 180 8.4.3 CAN总线 183 8.4.4 USB总线 184 8.4.5 单总线(1-Wire) 184 思考题与习题 185 第9章 80C51单片机的系统扩展 187 9.1 I/O接口电路概述 187 9.2 数据传送方式 187 9.2.1 无条件传送方式 187 9.2.2 查询传送方式 188 9.2.3 中断传送方式 188 9.2.4 直接存储器存取(DMA)方式 188 9.3 存储器扩展及时序 188 9.3.1 系统扩展总线及扩展芯片的寻址方式 189 9.3.2 程序存储器扩展 189 9.3.3 数据存储器扩展 191 9.3.4 简单I/O接口扩展 195 9.4 可编程接口芯片81C55及其应用 197 9.5 可编程接口芯片82C55及其应用 202 9.6 单片机显示、键盘系统 206 9.6.1 并行扩展静态显示电路 208 9.6.2 串行扩展静态显示电路 209 9.6.3 动态显示电路及其实例 210 9.7 单片机LCD显示接口及其实例 214 9.8 单片机键盘接口 218 思考题与习题 223 第10章 80C51单片机的模拟量接口 225 10.1 并行D/A转换器与单片机的接口 225 10.1.1 D/A转换概述及DAC的主要性能指标 225 10.1.2 8位D/A转换器DAC0832及与单片机接口 227 10.1.3 12位D/A转换器DAC1208及与单片机接口 230 10.2 并行A/D转换器与单片机的接口 232 10.2.1 A/D转换器概述及其主要性能指标 232 10.2.2 8位A/D转换器ADC0809及与单片机接口 234 10.2.3 12位A/D转换器AD1674及与单片机接口 237 10.3 串行A/D转换器与单片机的接口 240 10.3.1 串行A/D转换器HX711介绍 241 10.3.2 HX711的工作原理 241 10.3.3 80C51单片机和HX711的接口设计 243 思考题与习题 243 第11章 80C51单片机应用系统设计 245 11.1 单片机应用设计过程 245 11.1.1 确定系统的功能与性能 245 11.1.2 确定系统基本结构 245 11.1.3 单片机应用系统硬件、软件的设计原则 246 11.1.4 硬件设计 247 11.1.5 软件设计 248 11.1.6 资源分配 248 11.1.7 单片机应用系统的开发 248 11.2 提高系统可靠性的一般方法 249 11.2.1 电源干扰及其抑制 250 11.2.2 地线干扰及其抑制 250 11.2.3 其他提高系统可靠性的方法 251 11.3 设计与制作实例 256 11.3.1 单片机学习板设计与制作 256 11.3.2 用温度传感器DS18B20进行温度测量 258 11.3.3 电子密码锁设计 259 思考题与习题 263 第12章 微处理器及微机系统 264 12.1 微处理器概述 264 12.1.1 微处理器发展简介 264 12.1.2 8086的结构 264 12.1.3 8086的内部寄存器 265 12.1.4 8086的存储空间管理 267 12.1.5 8086的引脚功能 268 12.1.6 8086的两种工作方式 269 12.1.7 8086的总线周期 271 12.1.8 8086的指令系统 271 12.1.9 汇编语言程序设计 272 12.2 微机系统的构成与扩展 275 12.2.1 微机系统的构成 275 12.2.2 8086系统扩展 276 12.3 总线技术 281 12.3.1 总线概述 281 12.3.2 总线规范及主要性能指标 281 12.3.3 常用的系统总线 281 思考题与习题 282 参考文献 283