本书共分两篇,第一篇为基础篇,从绪论到第11章,介绍了单片机原理课程的基础知识。通过本篇的学习,大家可以从整体上了解单片机的基本知识、基本结构、工作原理、扩展方法、编写语言等。第二篇为应用提高篇,从第12章到第17章,介绍单片机应用的新技术,主要是提供给开发人员、毕业设计等需要进一步提高的人员使用,每章后面都给出了设计实例,便于读者和用户参考。在本书最后,还给出了大量典型、综合应用实例。由于篇幅有限,大量的参考资料、应用实例都放在本书的配套光盘中,希望能给读者和用户带来方便。\r\n 本书在编写过程中,既做到内容全面、叙述清楚,又注意一些最新的单片机应用技术、规范,以及学术界、工业界的研究进展,同时还非常注重内容的实用性,并对开发范例进行了较详细的介绍。\r\n 本书理论体系完整,内容翔实,语言通俗易懂,实例实用性和针对性强,既适合作为高等院校通信、控制、电工、电子、计算机专业的教材,也可供有关技术培训及工程技术人员自学参考之用。
第一篇 基础篇\r\n 第0章 绪论\r\n 0.1 本书结构及阅读指南\r\n 0.2 单片机概述\r\n 0.2.1 8位单片机\r\n 0.2.2 16位单片机\r\n 0.2.3 32位单片机\r\n 0.3 单片机的发展\r\n 0.4 单片机应用系统概述\r\n 0.5 常见应用系统\r\n 0.6 单片机应用系统的使用范围\r\n 0.7 习题\r\n 第1章 单片机设计基础\r\n 1.1 单片机基础知识\r\n 1.1.1 基本概念\r\n 1.1.2 单片机数制及其转换\r\n 1.1.3 二进制运算\r\n 1.1.4 微型计算机码制和编码\r\n 1.2 单片机系统组成原理\r\n 1.2.1 单片机系统基本结构\r\n 1.2.2 微型计算机的基本原理\r\n 1.3 单片机编程语言概述\r\n 1.3.1 汇编语言\r\n 1.3.2 高级语言\r\n 1.4 单片机开发环境概述\r\n 1.4.1 编译环境\r\n 1.4.2 仿真器\r\n 1.4.3 编程器\r\n 1.5 习题\r\n 第2章 51系列单片机汇编语言的设计\r\n 2.1 51系列单片机汇编语言概述\r\n 2.2 51系列单片机指令系统\r\n 2.2.1 标志位\r\n 2.2.2 数据传送指令\r\n 2.2.3 算术操作指令\r\n 2.2.4 逻辑操作类指令\r\n 2.2.5 控制转移类指令\r\n 2.2.6 布尔变量操作类指令\r\n 2.3 51单片机内部结构及寻址方式\r\n 2.3.1 单片机内部结构概述\r\n 2.3.2 寻址方式\r\n 2.4 伪指令\r\n 2.5 51单片机汇编程序设计\r\n 2.5.1 MCS-51汇编语言格式\r\n 2.5.2 MCS-51程序设计步骤\r\n 2.5.3 子程序设计\r\n 2.5.4 结构化程序设计\r\n 2.5.5 常见程序的编写\r\n 2.6 MCS-51指令表\r\n 2.7 常用的26个子程序范例\r\n 2.8 习题\r\n 第3章 51系列单片机C程序设计\r\n 3.1 概述\r\n 3.2 数据类型、运算符、表达式\r\n 3.2.1 基本数据类型\r\n 3.2.2 字符型\r\n 3.2.3 基本运算符和表达式\r\n 3.3 C51的数据类型\r\n 3.4 C语言程序设计\r\n 3.4.1 分支程序\r\n 3.4.2 循环语句\r\n 3.4.3 C语言语句结构小结\r\n 3.5 数组\r\n 3.5.1 数组元素的表示方法\r\n 3.5.2 数组的赋初值\r\n 3.5.3 二维数组\r\n 3.5.4 二维数组的初始化\r\n 3.5.5 字符数组\r\n 3.6 函数\r\n 3.6.1 函数的分类\r\n 3.6.2 函数的定义\r\n 3.6.3 函数的调用\r\n 3.6.4 函数值\r\n 3.6.5 函数的递归调用\r\n 3.7 变量的作用域\r\n 3.7.1 局部变量\r\n 3.7.2 全局变量\r\n 3.7.3 变量的存储方式\r\n 3.8 外部函数和内部函数\r\n 3.8.1 外部函数\r\n 3.8.2 内部函数\r\n 3.9 指针\r\n 3.9.1 指针变量的类型说明\r\n 3.9.2 指针变量的赋值\r\n 3.9.3 指针变量的运算\r\n 3.9.4 数组指针变量的使用\r\n 3.9.5 指向多维数组的指针\r\n 3.10 结构体与联合体\r\n 3.11 枚举和位运算\r\n 3.11.1 枚举型\r\n 3.11.2 位运算\r\n 3.12 自定义符号\r\n 3.13 预处理\r\n 3.13.1 宏定义\r\n 3.13.2 文件的包含\r\n 3.13.3 条件编译\r\n 3.14 习题\r\n 第4章 开发调试环境\r\n 4.1 软件开发环境\r\n 4.1.1 集成开发环境(编译器)\r\n 4.1.2 仿真器\r\n 4.1.3 编程器\r\n 4.2 KEIL环境下编程\r\n 4.3 在线下载\r\n 4.4 硬件调试系统\r\n 4.5 习题\r\n 第5章 CPU单元设计\r\n 5.1 51系列单片机简介及选型指南\r\n 5.1.1 Intel公司\r\n 5.1.2 Atmel公司\r\n 5.1.3 Philips公司\r\n 5.1.4 Winbond公司\r\n 5.1.5 Cypress公司\r\n 5.2 AT89S51单片机内部结构\r\n 5.2.1 中央处理器\r\n 5.2.2 存储器\r\n 5.2.3 片内并行口\r\n 5.2.4 其他片内资源\r\n 5.2.5 管脚介绍\r\n 5.2.6 工作方式\r\n 5.3 单片机应用系统结构\r\n 5.4 AT89S51最小系统设计\r\n 5.4.1 时钟电路设计\r\n 5.4.2 复位电路\r\n 5.5 总线扩展\r\n 5.6 习题\r\n 第6章 I/O扩展\r\n 6.1 并行I/O扩展\r\n 6.1.1 并行I/O扩展原理\r\n 6.1.2 常用的并行I/O扩展芯片\r\n 6.1.3 并行I/O的汇编编程\r\n 6.1.4 并行I/O的C编程\r\n 6.2 串行I/O扩展\r\n 6.2.1 串行I/O扩展原理\r\n 6.2.2 常用串行I/O芯片\r\n 6.2.3 串行I/O的汇编编程\r\n 6.2.4 串行I/O的C编程\r\n 6.3 I/O输出技术\r\n 6.3.1 输出接口隔离技术\r\n 6.3.2 继电器输出技术\r\n 6.3.3 可控硅接口\r\n 6.3.4 固态继电器\r\n 6.3.5 集成功率开关\r\n 6.4 系统键盘扩展\r\n 6.4.1 键盘工作原理\r\n 6.4.2 按键的识别方法\r\n 6.4.3 键值的编码\r\n 6.4.4 按键的抗干扰设计\r\n 6.4.5 矩阵式键盘及其编程\r\n 6.5 习题\r\n 第7章 半导体存储器设计\r\n 7.1 分类、特性及选型\r\n 7.1.1 只读存储器\r\n 7.1.2 随机读写存储器\r\n 7.1.3 常见存储器芯片\r\n 7.1.4 存储器的选型\r\n 7.2 并行RAM扩展\r\n 7.2.1 并行RAM扩展硬件设计\r\n 7.2.2 并行RAM的汇编编程\r\n 7.2.3 并行RAM的C语言编程\r\n 7.3 并行Flash存储器扩展\r\n 7.3.1 并行Flash扩展硬件设计\r\n 7.3.2 并行Flash的汇编编程\r\n 7.3.3 并行Flash的C语言编程\r\n 7.4 串行Flash扩展\r\n 7.4.1 串行Flash扩展硬件设计\r\n 7.4.2 串行Flash的汇编编程\r\n 7.5 习题\r\n 第8章 A/D扩展\r\n 8.1 A/D的原理、分类及特性\r\n 8.2 并行A/D的扩展\r\n 8.2.1 8位并行转换器ADC0809的扩展\r\n 8.2.2 12位并行转换器ADC574的扩展\r\n 8.3 串行A/D的扩展\r\n 8.4 A/D的选型及实用技术\r\n 8.4.1 A/D转换器的主要技术指标\r\n 8.4.2 常见A/D介绍\r\n 8.5 习题\r\n 第9章 D/A扩展\r\n 9.1 D/A的原理、分类及特性\r\n 9.2 并行D/A的扩展\r\n 9.2.1 单缓冲方式\r\n 9.2.2 双缓冲方式\r\n 9.2.3 8位并行DAC0830/0831/0832的扩展\r\n 9.2.4 DAC0830扩展范例\r\n 9.2.5 12位并行D/A DAC1208的扩展\r\n 9.2.6 DAC1208与8031单片机的接口设计范例\r\n 9.3 串行D/A的扩展\r\n 9.3.1 12位串行DAC7543的扩展原理\r\n 9.3.2 12位串行DAC7543的扩展范例\r\n 9.4 D/A的选型及实用技术\r\n 9.4.1 D/A转换器的主要技术指标\r\n 9.4.2 常见D/A介绍\r\n 9.5 习题\r\n 第10章 串行通信及接口\r\n 10.1 串行口的结构\r\n 10.1.1 串口控制寄存器\r\n 10.1.2 特殊功能寄存器\r\n 10.1.3 串口工作方式\r\n 10.2 串行通信的原理\r\n 10.3 通信协议\r\n 10.4 单机通信\r\n 10.4.1 PC与单片机通信\r\n 10.4.2 单片机与单片机通信\r\n 10.5 多机通信\r\n 10.6 通信程序的调试\r\n 10.7 习题\r\n 第11章 中断系统和定时器/计数器\r\n 11.1 单片机的中断系统概述\r\n 11.2 MCS-51单片机的中断系统及其管理\r\n 11.2.1 MCS-51单片机的中断系统\r\n 11.2.2 中断源的管理\r\n 11.2.3 MCS-51单片机对中断优先级别的处理原则\r\n 11.2.4 中断优先级\r\n 11.2.5 各中断源所对应的中断服务程序入口地址(P70)\r\n 11.2.6 中断系统特殊功能寄存器\r\n 11.2.7 外部中断方式的选择\r\n 11.3 中断系统应用举例\r\n 11.4 定时器/计数器\r\n 11.4.1 定时器/计数器的内部结构和功能\r\n 11.4.2 定时器的方式控制寄存器(TMOD)\r\n 11.4.3 定时器/计数器控制寄存器(TCON)\r\n 11.4.4 工作方式\r\n 11.4.5 定时器/计数器的应用实例\r\n 11.5 习题\r\n 第二篇 应用提高篇\r\n 第12章 单片机实用系统外设新技术\r\n 12.1 PS/2设备接口\r\n 12.1.1 PS/2的电气特性\r\n 12.1.2 PS/2协议介绍\r\n 12.1.3 PS/2设备到主机的通信过程\r\n 12.1.4 主机到PS/2设备的通信过程\r\n 12.2 AT-PS/2键盘接口\r\n 12.2.1 键盘简介\r\n 12.2.2 AT-PS/2键盘\r\n 12.3 LCD液晶显示接口\r\n 12.3.1 12232液晶模块\r\n 12.3.2 液晶模块的寄存器\r\n 12.3.3 液晶模块的读/写时序图\r\n 12.4 PS2键盘与液晶显示实例\r\n 12.4.1 电路原理图\r\n 12.4.2 程序设计\r\n 第13章 单片机设备驱动新技术\r\n 13.1 IC卡读/写器的设计原理\r\n 13.2 设计实例——非接触IC卡读/写器设计\r\n 13.2.1 非接触IC卡读/写器硬件设计\r\n 13.2.2 非接触IC卡读/写器软件设计\r\n 13.3 步进电机及驱动器\r\n 13.3.1 步进电机的分类及原理\r\n 13.3.2 步进电机驱动器\r\n 13.4 设计实例——地税局自动盖章系统设计\r\n 13.4.1 系统功能说明\r\n 13.4.2 应用系统设计\r\n 第14章 单片机总线新技术\r\n 14.1 I2C总线接口\r\n 14.1.1 I2C总线的原理\r\n 14.1.2 I2C总线的协议\r\n 14.2 设计实例——AT24C02与8031的接口及软件模拟\r\n 14.3 232通信总线\r\n 14.3.1 232通信总线原理\r\n 14.3.2 常用232通信总线芯片\r\n 14.3.3 232通信总线硬件设计\r\n 14.4 设计实例——虚拟仿真器的功能实现\r\n 14.5 485、422通信总线\r\n 14.5.1 485、422通信总线原理\r\n 14.5.2 常用485、422通信总线芯片\r\n 14.5.3 485、422通信总线硬件设计\r\n 14.6 RS-232、RS-422、RS-485的应用范围\r\n 14.7 CAN总线\r\n 14.7.1 CAN通信总线原理\r\n 14.7.2 常用CAN通信总线芯片\r\n 14.7.3 CAN通信总线硬件设计\r\n 14.8 USB总线\r\n 14.8.1 USB通信总线原理\r\n 14.8.2 USB标准设备请求\r\n 14.8.3 常用USB通信总线芯片\r\n 14.8.4 USB通信总线硬件设计\r\n 第15章 单片机应用系统实用技术\r\n 15.1 电源设计\r\n 15.1.1 开关稳压电源\r\n 15.1.2 线性稳压电源\r\n 15.2 系统抗干扰措施\r\n 15.2.1 干扰源的分类\r\n 15.2.2 硬件抗干扰技术\r\n 15.2.3 软件抗干扰技术\r\n 15.2.4 采用WATCHDOG(看门狗)技术\r\n 15.3 系统的恢复技术\r\n 15.3.1 系统的复位\r\n 15.3.2 热启动的过程\r\n 15.3.3 系统信息的恢复\r\n 第16章 嵌入式操作系统\r\n 16.1 多任务嵌入式操作系统简介\r\n 16.2 RTOS多任务嵌入式操作系统工作原理\r\n 16.3 RTX51的应用\r\n 16.4 用RTX51进行编译和连接\r\n 16.5 RTX51函数\r\n 16.6 RTOS多任务嵌入式操作系统的应用\r\n 16.7 嵌入式系统在蓝牙技术中的应用\r\n 第17章 单片机应用系统设计及应用实例\r\n 17.1 单片机应用系统的一般结构\r\n 17.1.1 单机结构\r\n 17.1.2 多机结构\r\n 17.2 确定系统的功能与性能\r\n 17.3 单片机应用系统硬、软件的设计原则\r\n 17.4 应用软件设计的特点\r\n 17.5 系统的积木式设计\r\n 17.5.1 模块化设计的特点及注意事项\r\n 17.5.2 模块化程序的开发过程\r\n 17.5.3 硬件设计\r\n 17.5.4 软件设计\r\n 17.6 一个录音系统的设计\r\n 17.7 全国大学生电子设计竞赛试题及解决方案\r\n 17.8 单片机应用系统新技术及设计范例\r\n 附录A 光盘说明\r\n 参考文献
单片机及其应用”不但是目前各个大专院校计算机应用专业及计算机相关专业的一门重要课程,同时也是一个电子类工程师应该掌握的三大技术之一。但是编者近年在带本、专科生毕业设计及承担合作项目时发现,一些学生既不清楚最基础的知识,也不清楚该如何应用。编者按自己的理解和学生们讨论了单片机设计的原理及应用,很快学生们就掌握单片机应用系统设计的技巧。最让编者欣慰的是,凭借熟练的设计技巧,学生们都顺利地找到了收入较高的工作。编者想这也是一个知识改变命运的例子,所以编者在总结多年教学经验的基础上,精心组织并编写了本书。
本书特点
本书是在单片机及其应用多种新技术的基础上,结合项目开发的实际经验而编写的,其定位是“教材+设计范例+工具书”。由于篇幅有限,书中大量工程资料、应用范例、教学指导、开发软件部分放入本书附送的光盘中,部分工程资料、应用范例放在网上供读者免费下载,希望能给读者和用户带来方便。这样在实际设计过程中,读者可以轻松而快速地参考设计。
全书共分18章,全面阐述了MCS-51系列单片机的基本原理及其最新的应用技术。
本书主要介绍了MCS-51系列单片机的基本结构、组成、中断系统、存储器以及汇编语言程序设计。通过这些内容的学习,可使学生对MCS-51系列单片机有一个总体的概念和认识,并在掌握基本硬件的基础上用软件实现单片机的一些基本功能。在单片机的应用中详细介绍了并行口、串行口、定时器以及相应的扩展和应用,简单介绍了模拟量和数字量的相互转换以及转换器件与单片机的接口,同时综合前面所学内容,列举了单片机典型应用实例。
同时本书还介绍了目前单片机领域的流行语言C51及其编译器、常用的AT89C51的改进型芯片AT89S51相关新技术、嵌入式实时操作系统(RTOS)。
单片机的程序设计应该以C语言为主,以汇编语言为辅。采用C语言不必对单片机和硬件接口的结构有很深入的了解,编译器可以自动完成变量的存储单元的分配,编程者可以专注于应用软件部分的设计,大大加快软件的开发速度。同时,采用C语言可以很容易地进行单片机的程序移植工作,有利于产品中单片机的重新选型,所以C语言成为目前单片机设计的主流语言。需要特别指出的是,汇编语言的学习对于理解和优化单片机C语言程序的编写非常有利。
KEIL公司C51编译器DOS版本曾通过美国Franklin公司在市场上销售多年,最早传入我国并得到广泛使用的是Franklin C51 V3.2版本。随着时间的推移,KEIL公司的产品不断升级,V5.0以上版本的C51编译器就配有基于Windows的mVision集成开发环境和dScope软件模拟调试程序。现在KEIL公司的编译器有支持经典8051和8051派生产品的版本,统称为Cx51。新版本mVision2把mVision1用的模拟调试器dScope与集成开发环境无缝结合起来,界面更友好,使用更方便,支持的单片机品种更多。
使用C语言的确会提高开发效率,也能提高软件的可维护性,仅仅依靠编程语言还远远不够,而应该建立开发平台。在平台上开发,才能事半功倍。嵌入式实时操作系统(RTOS)就是一个很好的嵌入式软件的开发平台。Small RTOS51是为51系列单片机而编写的,它是完全免费的、源代码公开的多任务实时操作系统,它可在无任何外部数据存储器的单片80C51系统上运行,并且可移植。本书介绍Small RTOS51和一些基本概念,并详细分析Small RTOS51的工作原理,给出部分常用硬件在Small RTOS51下驱动程序的源代码。这些源代码在DP51单片机仿真实验仪上全部调试通过,只要经过很少的改动,或者不改动,就可以在其他环境下使用。应用篇还通过对这些源代码的分析,让读者理解基于RTOS的编程方法,并给出完整的例子让读者全面掌握基于RTOS的编程方法。
本书特色
本书坚持深入浅出的写作风格,在阅读方法上进行了精心设计,力求读者能在最短时间内实现从入门到精通。
本书内容系统、全面又兼顾前沿。同时又坚持实用性和权威性,书中提供大量实例,均可以仿真验证,并提供大量工程资料,一书在手,可轻松实现设计。为了降低图书价格和读者的费用,本书尽量精简了书中的内容,而将大量有用内容放在网上免费供读者下载,便于读者学习参考。
本书将汇编指令的操作数与机器指令的代码并列、指令字节数与周期数并列,两个并列再集于一图,做到学习、复习、编程调试时“随用随查”。初学指令,先要跑面,重在识其全貌。指令不是学会而是用会的。编程时带上问题进入场景,一遍遍地翻查找出最有效的指令,长期实践定会流出“家珍”。指令部分有意安插的一些范例是为入门后顿悟用的。
C语言的模块化程序结构特点,可以使程序模块大家共享,不断丰富。C语言的可读性的特点,更容易使大家借鉴前人的开发经验,提高自己的软件设计水平。采用C语言,可针对单片机常用的接口芯片编制通用的驱动函数;可针对常用的功能模块、算法等编制相应的函数。这些函数经过归纳整理可形成专家库函数,供广大的单片机爱好者使用和完善,希望通过阅读本书可大大提高单片机软件设计水平。
随着半导体工业的发展,32位单片机的价格持续降低。在某些应用中,使用32位单片机的总体成本更低,而在32位单片机中不使用RTOS几乎是不可能的。因而,在嵌入式系统中使用RTOS是大势所趋,所以本书对RTOS也进行了相应的介绍。
本书可以作为高等院校通信、控制、电工、电子、计算机专业的教材,也可供有关技术培训及工程技术人员自学参考之用。
由于编者水平有限,时间仓促,难免会有许多不足,甚至错误,请各位专家多多批评。感谢磁动力工作室、单片机开发联盟、老古开发网的大力支持。感谢编写本书中共享软件的作者和各位参考文献的作者。由于有的资料来源网上,使用的时间太长,无法查证作者,如果编者引用了您的观点,请联系,编者将尽快更正参考文献目录,并表示感谢。
本书由胡学海主编,主要编写人员如下:第5,6,7,10章由章磊老师编写,第3,12章由彭富国博士编写,第11章由李本亮博士编写,第2章由代传龙硕士编写,第15,16章由任代蓉、俞颖硕士编写,第4,14章由胡梅蓉、罗永杰编写,第0,1,8,9,13,17章由胡学海编写,对编者们的辛勤工作表示感谢。
配套服务
为充分展现本书的编写特点,帮助读者深刻理解本书编写意图与内涵,进一步提高对本书教学的使用效率,我们建立本书使用指导联络方式,这将成为读者与编者之间交流沟通的直通车。欢迎读者将图书使用过程中的各种问题、建议反馈给我们,本书编者会竭诚给你满意的答复。我们的联系方式E-mail:bojia@bojia.net。
我们为读者提供配套光盘,其中包括本书的所有范例完整文档和配套的电子教案,为读者学习和老师教学提供有益的参考和帮助。
胡学海
于电子科技大学