
本书以STC8H8K64U系列单片机为教学平台,该系列单片机代表当今8位机较高水平,包含高级PWM 定时器、USB 模块及 16 位硬件乘/除法器等高级功能模块。本书基于 STC 大学计划实验箱(8.3)(主控单 片机为 STC8H8K64U 系列单片机),采用“汇编+C”双语言编程,精选工程训练实例,设计多种类型的 习题。本书内容包括单片机基础,对 STC8H8K64U 系列单片机的增强型 8051 内核、应用系统的开发工具、 指令系统、汇编及 C 双语言程序设计、存储器与应用编程、定时/计数器、中断系统、串行通信端口、人 机对话接口的应用设计、12 位 A/D 转换模块、比较器、SPI 接口、I2C 通信接口、高级 PWM 定时器、USB 模块、16 位乘/除法器的介绍,以及应用其进行低功耗设计与可靠性设计的介绍。 本书可作为高等学校电子信息类、电子通信类、自动化类、计算机应用类专业“单片机原理与应用” 或“微机原理”课程教材,也可作为电子设计竞赛、单片机应用工程师考证的培训教材,还可作为传统 8051 单片机应用工程师升级转型的参考书。
前 言 单片机技术是现代电子系统设计、智能控制的核心技术。单片机课程是应用电子、电 子信息、电子通信、物联网、机电一体化、电气自动化、工业自动化、计算机应用等相关 专业的必修课程。本书是编者根据自身 35 年单片机应用经历及教学经验,精心打造的 8051 单片机前沿技术的单片机课程教材。 STC 系列单片机传承自 Intel 8051 单片机,其在 Intel 8051 单片机框架基础上注入了新鲜血液。STC8H8K64U 系列单片机是当今 8 位机中的佼佼者,除保留了 STC8A 等系列产品的优良性能外,还增加 了 USB 接口、高级 PWM 定时器、16 位乘除法器、实时时钟等高级功能模块,尤其具备了 16 位单片机的运算能力。STC8H8K64U 单片机是第 15 届和第 16 届全国智能汽车大赛的指 定参赛芯片。 本书兼顾实用性、应用性与易学性,并以提高读者的工程设计能力与实践动手能力为 目标。本书具有以下几方面的特点。 (1)单片机机型贴近生产实际。STC 系列单片机是我国 8 位单片机应用市场占有率较 高的,本书采用 STC8H8K64U 系列单片机作为主讲机型。 (2)采用“双”语言编程。绝大多数应用程序的编程采用的是汇编语言和 C 语言(C51) 对照编程。采用汇编语言设计的程序进行教学更有利于加强读者对单片机的理解,而 C51 在功能、结构,以及用其编写的程序的可读性、可移植性、可维护性方面相对于汇编语言 而言有非常明显的优势。 (3)理论联系实际。在介绍单片机指令系统前,第 3 章专门介绍了单片机应用系统的 开发工具,贯穿程序的编辑、编译、下载与调试。强化单片机知识的应用性与实践性,一 条或若干条指令或一个程序段都可以用开发工具进行仿真调试或在线联机调试。 (4)强化了单片机应用系统的概念。学习单片机就是为了能开发与制作有具体意义的 单片机应用系统,因此绝大多数章节都配置了工程训练实例。 (5)为了便于读者更好地理解教学内容,以及满足教学的需要,本书采用了多样化的 习题类型,包括填空题、选择题、判断题、问答题与程序设计题。 (6)为便于读者学习与应用开发,附录中提供了实用的技术资料,如 STC 大学计划实 验箱(8.3)电路图、STC8H8K64U 系列单片机特殊功能寄存器一览表、STC8H8K64U 系 列单片机内部接口功能引脚的切换、C 语言编译错误信息一览表、C51 的模块化编程与 C51 库函数的制作等。 (7)在本书的编写过程中,编者直接与 STC 系列单片机的创始人姚永平先生、陈锋工 程师进行了密切沟通与交流。姚永平先生担任本教材的主审,确保了本书内容的系统性与 正确性。 (8)本书工程训练是基于 STC 大学计划实验箱(8.3)开发的。 本书是 STC 大学推广 计划指定教材。 本书由丁向荣编著。宏晶科技在技术上给予了大力支持和帮助,STC 系列单片机创始 人姚永平先生对全书进行了认真审阅,并提出了宝贵意见。在此,向所有提供帮助的人表 示感谢! 由于编者水平有限,书中定有疏漏和不妥之处,敬请读者不吝指正!书中相关勘误或 信息也会动态地公布在 STC 官网上。可发电子邮件到 dingxiangrong65@163.com,与编者 进一步沟通与交流。 编 者 2020.10 于广州
目 录 第 1 章 认识单片机 ······················································································.1 1.1 单片机概述 ······················································································.1 1.1.1 微型计算机的工作原理 ······························································.1 1.1.2 单片机 ····················································································.5 1.2 STC8H 系列单片机简介 ······································································.6 1.2.1 STC 系列单片机概述 ·································································.6 1.2.2 STC8H 系列单片机 ····································································.7 1.2.3 STC8H8K64U 系列单片机 ···························································.8 本章小结 ·······························································································.18 习题 ·····································································································.19 第 2 章 增强型 8051 内核 ·············································································.21 2.1 CPU 结构 ·······················································································.21 2.2 存储结构 ························································································.22 2.3 并行I/O 口 ·····················································································.28 2.3.1 并行I/O 口的工作模式 ······························································.28 2.3.2 内部上拉电阻的设置·································································.31 2.3.3 施密特触发器的设置·································································.31 2.3.4 电平转换速度的设置·································································.32 2.3.5 电流驱动能力的设置·································································.32 2.3.6 数字信号输入使能的设置 ··························································.32 2.4 时钟与复位 ·····················································································.32 2.4.1 时钟 ······················································································.32 2.4.2 复位 ······················································································.36 本章小结 ·······························································································.38 习题 ·····································································································.39 第 3 章 应用系统的开发工具 ·········································································.42 3.1 Keil ?Vision4 集成开发环境——单片机应用程序的编辑、编译与调试流程 ····.42 3.2 在线编程与在线仿真 ·········································································.50 3.2.1 在线可编程电路 ·······································································.50 3.2.2 单片机应用程序的下载与运行 ····················································.51 3.2.3 Keil ?Vision4 集成开发环境与 STC 仿真器的在线仿真 ······················.53 3.2.4 STC-ISP 在线编程软件的其他功能 ···············································.54 3.3 仿真软件 Proteus ··············································································.55 3.4 工程训练 ························································································.55 3.4.1 Keil ?Vision4 集成开发环境的操作使用 ·········································.55 3.4.2 STC8H8K64U 系列单片机的在线调试与在线仿真 ····························.62 3.4.3 Proteus 单片机应用系统的仿真 ····················································.66 本章小结 ·······························································································.72 习题 ·····································································································.72 第 4 章 指令系统与汇编语言程序设计 ·····························································.75 4.1 指令系统 ························································································.75 4.1.1 概述 ······················································································.75 4.1.2 数据传送类指令 ·······································································.81 4.1.3 算术运算类指令 ·······································································.86 4.1.4 逻辑运算与循环移位类指令 ·······················································.91 4.1.5 控制转移类指令 ·······································································.95 4.1.6 位操作类指令 ········································································.100 4.2 汇编语言程序设计 ··········································································.104 4.2.1 汇编语言程序设计基础 ···························································.104 4.2.2 基本程序结构与程序设计举例 ··················································.109 4.3 工程训练 LED 数码管的驱动与显示(汇编语言版) ······························118 本章小结 ·····························································································.121 习题 ···································································································.122 第 5 章 C51 与 C51 程序设计 ······································································.127 5.1 C51 基础 ······················································································.127 5.1.1 C51 数据类型 ········································································.129 5.1.2 C51 的变量 ···········································································.131 5.1.3 8051 单片机特殊功能寄存器变量的定义 ······································.132 5.1.4 8051 单片机位寻址区(20H~2FH)位变量的定义 ························.134 5.1.5 函数的定位 ···········································································.134 5.1.6 中断服务函数 ········································································.135 5.1.7 函数的递归调用与再入函数 ·····················································.136 5.1.8 在C51 中嵌入汇编语言程序 ·····················································.136 5.2 C51 程序设计 ················································································.137 5.2.1 C51 程序框架 ········································································.137 5.2.2 C51 程序设计举例 ··································································.140 5.3 工程训练 LED 数码管的驱动与显示(C 语言版) ·······························.142 本章小结 ·····························································································.144 习题 ···································································································.145 第 6 章 存储器与应用编程 ··········································································.147 6.1 程序存储器 ···················································································.147 6.2 片内基本 RAM ···············································································.149 6.3 扩展RAM ····················································································.150 6.4 EEPROM ······················································································.154 6.5 工程训练 ······················································································.160 6.5.1 片内扩展 RAM 的测试 ····························································.160 6.5.2 EEPROM 的测试 ····································································.161 本章小结 ·····························································································.165 习题 ···································································································.166 第 7 章 定时/计数器 ···················································································.168 7.1 定时 /计数器(T0/T1)的结构和工作原理 ············································.168 7.2 定时 /计数器(T0/T1)的控制 ···························································.169 7.3 定时 /计数器(T0/T1)的工作方式 ·····················································.172 7.4 定时 /计数器(T0/T1)的应用举例 ·····················································.175 7.4.1 定时应用 ··············································································.176 7.4.2 计数应用 ··············································································.177 7.4.3 T0、T1 的综合应用 ································································.178 7.5 定时 /计数器 T2 ··············································································.181 7.5.1 T2 的电路结构 ······································································.181 7.5.2 T2 的控制寄存器 ···································································.181 7.6 定时 /计数器 T3、T4 ········································································.182 7.6.1 电路结构 ··············································································.182 7.6.2 控制寄存器 ···········································································.183 7.7 可编程时钟输出 ·············································································.184 7.7.1 T0~T4 的可编程时钟输出 ·······················································.184 7.7.2 可编程时钟的应用举例 ···························································.185 7.8 工程训练 ······················································································.187 7.8.1 定时/计数器的定时应用 ···························································.187 7.8.2 定时/计数器的计数应用 ···························································.189 7.8.3 定时/计数器的综合应用 ···························································.191 7.8.4 可编程时钟输出 ·····································································.193 本章小结 ·····························································································.195 习题 ···································································································.196 第 8 章 中断系统 ······················································································.199 8.1 中断系统概述 ················································································.199 8.1.1 中断系统的几个概念·······························································.199 8.1.2 中断的技术优势 ·····································································.200 8.1.3 中断系统需要解决的问题 ························································.201 8.2 STC8H8K64U 系列单片机中断系统的简介 ···········································.201 8.2.1 中断请求 ··············································································.201 8.2.2 中断响应、中断服务与中断返回 ···············································.210 8.2.3 中断应用举例 ········································································.213 8.3 STC8H8K64U系列单片机外部中断源的扩展 ·············································.218 8.4 工程训练 ······················································································.221 8.4.1 定时中断的应用编程·······························································.221 8.4.2 外部中断的应用编程·······························································.222 本章小结 ·····························································································.224 习题 ···································································································.225 第 9 章 串行通信端口 ················································································.228 9.1 串行通信基础 ················································································.228 9.2 串行通信端口 1 ···············································································.231 9.2.1 控制寄存器 ···········································································.231 9.2.2 工作方式 ··············································································.234 9.2.3 波特率 ·················································································.237 9.2.4 应用举例 ··············································································.238 9.3 STC8H8K64U 系列单片机与计算机的通信 ···········································.251 9.3.1 接口设计 ··············································································.251 9.3.2 程序设计 ··············································································.253 9.4 串行通信端口 2* ············································································.256 9.5 串行通信端口 3* ············································································.257 9.6 串行通信端口 4* ············································································.259 9.7 工程训练 ······················································································.260 9.7.1 单片机间的双机通信·······························································.260 9.7.2 单片机与计算机间的串行通信 ··················································.263 本章小结 ·····························································································.266 习题 ···································································································.267 第 10 章 人机对话接口的应用设计 ································································.270 10.1 单片机应用系统的设计和开发 ·························································.270 10.1.1 单片机应用系统的设计原则 ····················································.270 10.1.2 单片机应用系统的开发流程 ····················································.271 10.1.3 单片机应用系统工程报告的编制 ··············································.274 10.2 键盘接口与应用编程 ·····································································.276 10.3 LCD 接口与应用编程 ·····································································.285 10.3.1 LCD 模块概述 ·····································································.285 10.3.2 点阵字符型液晶显示模块 LCD1602 ··········································.285 10.3.3 点阵图形型 LCD 模块 LCD12864 ·············································.293 10.4 工程训练 ····················································································.302 10.4.1 单片机与矩阵键盘的接口与应用 ···············································.302 10.4.2 单片机与 LCD12864(含中文字库)的接口与应用 ·······················.306 本章小结 ·····························································································.313 习题 ···································································································.314 第 11 章 A/D 转换模块 ···············································································.318 11.1 A/D 转换模块的结构 ·····································································.318 11.2 A/D 转换模块的控制 ·····································································.319 11.3 A/D 转换模块的应用 ·····································································.323 11.4 工程训练 ····················································································.325 11.4.1 测量内部 1.19V 基准电压 ·······················································.325 11.4.2 ADC 键盘 ···········································································.328 本章小结 ·····························································································.332 习题 ···································································································.332 第 12 章 比较器 ························································································.334 12.1 比较器的内部结构与控制 ·······························································.334 12.2 比较器的应用 ··············································································.337 12.3 工程训练 应用比较器和 A/D 转换模块测量单片机内部 1.19V 基准电压 ····.338 本章小结 ·····························································································.342 习题 ···································································································.342 第 13 章 SPI 接口 ·····················································································.344 13.1 结构 ····························································································.344 13.2 控制 ····························································································.346 13.3 配置与通信方式 ···········································································.347 13.4 应用编程 ····················································································.352 13.5 工程训练 ····················································································.357 13.5.1 通过 SPI 串行总线访问 PM25LV040 ··········································.357 13.5.2 ILI9325 驱动 TFT 触摸显示屏的测试 ········································.370 本章小结 ·····························································································.371 习题 ···································································································.372 第 14 章 I2C 通信接口 ················································································.373 14.1 I2C 总线 ······················································································.373 14.2 STC8H8K64U 系列单片机 I2C 通信接口的介绍 ····································.381 14.2.1 I2C 通信接口的控制 ······························································.381 14.2.2 主机模式的应用编程 ·····························································.385 14.2.3 从机模式的应用编程 ·····························································.388 14.3 工程训练 I 2C 通信接口的应用 ·······················································.390 本章小结 ·····························································································.395 习题 ···································································································.395 第 15 章 高级 PWM 定时器 ·········································································.398 15.1 PWMA 概述 ················································································.399 15.2 PWMA 的特殊功能寄存器 ······························································.400 15.3 PWMA 的应用编程 ·······································································.426 15.3.1 PWMA 的时基单元与操作 ······················································.427 15.3.2 时钟 /触发控制器的操作 ·························································.430 15.3.3 捕获 /比较通道的操作 ····························································.433 15.4 中断与操作 ·················································································.446 15.5 工程训练 高级 PWM 定时器的应用·················································.446 本章小结 ·····························································································.451 习题 ···································································································.451 第 16 章 USB 模块 ····················································································.454 16.1 USB 概述 ····················································································.454 16.2 USB 模块的控制 ···········································································.455 16.3 USB 模块的操作文件 ·······································································.466 16.4 工程训练 计算机通过 USB 接口发送指令读取 A/D 转换模块的测试参数 ··.470 本章小结 ·····························································································.481 习题 ···································································································.481 第 17 章 16 位乘/除法器 ·············································································.483 17.1 16 位乘/除法器的操作 ······································································.483 17.2 16 位乘/除法器的应用编程 ······························································.485 17.3 工程训练 STC8H8K64U 系列单片机 16 位乘/除法器的应用 ··················.488 本章小结 ·····························································································.490 习题 ···································································································.491 第 18 章 低功耗设计与可靠性设计 ································································.492 18.1 低功耗设计 ·················································································.492 18.2 可靠性设计 ·················································································.496 本章小结 ·····························································································.499 习题 ···································································································.500 参考文献 ···································································································.502