
本书是普通高等教育“十一五”国家级规划教材再版教材和国家精品课程主讲教材。详细介绍美国ATMEL公司的AT89S51单片机的片内硬件资源及工作原理,采用C51语言编程,并以虚拟仿真平台Proteus作为设计与开发工具,还简要介绍了Keil μVision 3的使用方法。从应用角度出发,重点介绍单片机应用的各种技术实现,如信息的显示与输入、中断、定时/计数、串行通信、模/数与数/模转换、系统的并行/串行扩展、应用系统设计等,书中给出较多虚拟仿真设计案例,并在附录A提供实验和课程设计题目。本书还为任课老师提供电子课件和习题参考答案。
前 言 本书是普通高等教育“十一五”国家规划教材的第2版,也是哈尔滨工业大学 “单片机原理”国家精品课程主讲教材。自2008年本书出版以来,已印刷12次,被全国几十所院校选为“单片机原理”课程教材。 由于Intel 8051内核单片机获得的巨大成功,使其成为国内外公认的8位单片机的标准体系结构,被许多厂家作为基核,推出了各种高集成化的兼容机型,且在世界范围得到了广泛应用。由于8051单片机结构简单、清晰、易学,是目前单片机初学者最容易掌握的机型,因此以8051内核技术为主导的单片机仍是目前我国多所高校讲授的机型。 美国ATMEL公司的AT89S51单片机是目前各种8051内核单片机中最具代表性的机型,本书基于AT89S51单片机,详细介绍其工作原理及应用设计。 本书采用C51语言编程,并融入了先进的虚拟仿真开发工具Proteus,给出较多的经过验证的Proteus仿真案例。本次修订,反映了作者负责的“单片机原理”国家精品课程的教学模式与教学方法改革的部分成果,对课程体系结构的改进也体现在本教材的修订之中。 本书在编写时重点考虑了如下问题: (1)将虚拟仿真工具Proteus应用在单片机课程教学中,使课程的教学模式及传统的设计开发模式发生了革命性的变化,Proteus平台为学习者提供了一个功能强大的流动的单片机系统设计的虚拟实验室。 (2)传统教学模式存在的弊病是,学生听完课堂讲授,往往得不到软硬件设计的训练,使得教学与实际设计脱节。本书采用Proteus与Keil Vision3作为工具,将软、硬件设计与案例设计有机地结合为一体,使学生真正从概念出发,设计出一个能够虚拟运行的应用系统,真正得到软硬件设计与调试的完整训练,从而达到课程教学的最终目的。把Proteus融入到课程教学各环节中,是课程深入改革的必然趋势。 (3)本书的编程语言采用C51。为提高读者的编程调试能力,还对C51的开发调试工具Keil Vision3以及Proteus的使用,从实际使用角度进行了介绍,以使读者尽快掌握这两个软件平台的使用方法。 本书共分为12章,涵盖了单片机应用技术的基本内容。 第1章介绍有关单片机的基本概念,介绍了目前流行的各类单片机及嵌入式处理器。 第2章介绍片内基本硬件结构及硬件资源。 第3章介绍C51语言编程基础以及Keil Vision3开发平台的使用。 第4章介绍Proteus虚拟仿真平台的基本功能与使用方法。 第5章介绍单片机系统的显示以及开关与键盘检测的实现,为后续各章的案例仿真,观察系统运行的结果,设定运行条件,打下基础。 第6章至第8章分别介绍片内硬件资源,即中断系统、定时器及异步串行口的工作原理及应用案例。 第9章为系统的并行扩展介绍。 第10章对目前流行的串行扩展技术,如I2C系统、单总线、SPI串行系统以及相应的应用案例给出详细介绍。 第11章介绍模/数与数/模转换的设计。 第12章介绍系统设计及应用案例,供读者参考借鉴。 此外,附录A给出了紧密结合课程内容的课程实验与课程设计题目,用于实验教学和课程设计环节。 全书参考学时为40~60学时,教师可根据实际情况,对讲授内容进行取舍或补充。 本书由哈尔滨工业大学张毅刚教授担任主编,负责完成全书整体架构、目录确定以及全书的统稿工作,此外还完成了第1、2章的编写。副主编由俞洋、刘丹和邓立宝担任,第6、8章由俞洋编写,第4、9章由刘丹编写,第3、7章由邓立宝编写。参加编写的还有哈尔滨工业大学自动化测试与控制研究所的刘大同、刘旺、付宁、梁军、赵光权、马云彤、杨智明以及刘颖诸位老师。满源同学完成了部分章节的程序调试与案例虚拟仿真设计以及附录A与附录B的编写与调试。 本书提供教学大纲、PPT课件和习题参考答案等教学资源,任课教师可登录华信教育资源网http://www.hxedu.com.cn免费注册下载。 在本书出版之际,特别感谢广州风标电子有限公司总经理匡载华先生为本书的编写出版给予的大力支持和帮助,感谢广州风标电子有限公司提供的有关的技术资料、网络版Proteus仿真实验平台以及配套的E型模块化实验装置。 由于作者学识有限,书中错误及疏漏之处敬请读者批评指正,并请与主编本人联系,邮箱:zyg@hit.edu.cn。 主 编 于哈尔滨工业大学
第1章 单片机概述 1 1.1 单片机简介 1 1.2 单片机的发展历史 1 1.3 单片机的特点 2 1.4 单片机的应用领域 3 1.5 单片机的发展趋势 3 1.6 MCS-51系列与AT89S5x系列单片机 4 1.6.1 MCS-51系列单片机 5 1.6.2 AT89S5x系列单片机 5 1.7 各种衍生品种的8051单片机 7 1.7.1 STC系列单片机 7 1.7.2 C8051Fxxx单片机 8 1.7.3 ADC812单片机 8 1.7.4 华邦W77系列、W78系列单片机 9 1.8 PIC系列单片机与AVR系列单片机 9 1.8.1 PIC系列单片机 9 1.8.2 AVR系列单片机 10 1.9 其他嵌入式处理器简介 11 1.9.1 嵌入式DSP处理器 11 1.9.2 嵌入式微处理器 11 思考题及习题1 12 第2章 AT89S51单片机的片内硬件结构 13 2.1 AT89S51单片机的硬件组成 13 2.2 AT89S51的引脚功能 14 2.2.1 电源及时钟引脚 15 2.2.2 控制引脚 15 2.2.3 并行I/O口引脚 16 2.3 AT89S51的CPU 17 2.3.1 运算器 17 2.3.2 控制器 18 2.4 AT89S51单片机存储器的结构 18 2.4.1 程序存储器空间 19 2.4.2 数据存储器空间 20 2.4.3 特殊功能寄存器 20 2.4.4 位地址空间 23 2.5 AT89S51单片机的并行I/O端口 24 2.5.1 P0口 24 2.5.2 P1口 26 2.5.3 P2口 26 2.5.4 P3口 27 2.6 时钟电路与时序 28 2.6.1 时钟电路设计 28 2.6.2 机器周期、指令周期与指令时序 29 2.7 复位操作和复位电路 30 2.7.1 复位操作 30 2.7.2 复位电路设计 30 2.8 看门狗定时器(WDT)的使用 31 2.9 低功耗节电模式 32 2.9.1 空闲模式 33 2.9.2 掉电运行模式 33 2.9.3 掉电模式和空闲模式下的WDT 33 思考题及习题2 34 第3章 C51语言编程基础与Keil Vision3开发平台 36 3.1 C51编程语言概述 36 3.1.1 C51语言与8051汇编语言的比较 36 3.1.2 C51语言与标准C语言的比较 36 3.2 C51语言程序设计基础 37 3.2.1 C51语言中的数据类型与存储类型 37 3.2.2 C51语言的特殊功能寄存器及位变量定义 41 3.2.3 C51语言的绝对地址访问 43 3.2.4 C51语言的基本运算 45 3.2.5 C51语言的分支与循环程序结构 47 3.2.6 C51语言的数组 53 3.2.7 C51语言的指针 55 3.3 C51语言的函数 55 3.3.1 函数的分类 56 3.3.2 函数的参数与返回值 57 3.3.3 函数的调用 57 3.3.4 中断服务函数 58 3.3.5 变量及存储方式 59 3.3.6 宏定义与文件包含 59 3.3.7 库函数 60 3.4 Keil Vision3环境下的C51语言程序开发 60 3.4.1 KeilVision3的基本操作 60 3.4.2 添加用户源程序文件 62 3.4.3 程序的编译与调试 64 3.4.4 工程的设置 66 思考题及习题3 68 第4章 虚拟仿真平台Proteus的使用 69 4.1 Proteus功能概述 69 4.2 Proteus ISIS的虚拟仿真 70 4.3 Proteus ISIS环境简介 71 4.3.1 ISIS各窗口简介 71 4.3.2 主菜单栏 72 4.3.3 主工具栏 75 4.3.4 工具箱 75 4.3.5 仿真工具栏 77 4.3.6 元件列表 77 4.3.7 预览窗口 77 4.3.8 原理图编辑窗口 78 4.4 Proteus ISIS的编辑环境设置 78 4.4.1 选择模板 78 4.4.2 选择图纸 79 4.4.3 设置文本编辑器 79 4.4.4 网格开关与格点间距设置 79 4.5 Proteus ISIS的系统运行环境设置 79 4.6 单片机系统的原理电路设计与虚拟仿真 80 4.6.1 原理电路设计与虚拟仿真的步骤 80 4.6.2 新建或打开一个设计文件 81 4.6.3 选择需要的元件到元件列表 82 4.6.4 放置元件并连接电路 83 4.6.5 加载目标代码文件、设置时钟频率及仿真运行 87 4.7 Proteus的各种虚拟仿真调试工具 88 4.7.1 虚拟信号源 88 4.7.2 虚拟仪器 93 4.7.3 虚拟仪器的图表仿真 102 4.7.4 诊断模式的设定 105 4.7.5 硬件断点的设置 105 第5章 单片机开关检测、键盘输入与显示接口设计 108 5.1 单片机控制发光二极管显示 108 5.1.1 单片机与发光二极管的连接 108 5.1.2 I/O端口的编程控制 109 5.2 开关状态检测 112 5.2.1 开关检测实例1 112 5.2.2 开关检测实例2 113 5.3 单片机控制LED数码管的显示 114 5.3.1 LED数码管的显示原理 114 5.3.2 LED数码管的静态显示与动态显示 116 5.4 单片机控制LED点阵显示器显示 119 5.4.1 LED点阵显示器的结构与显示原理 120 5.4.2 控制16×16 LED点阵显示屏的实例 121 5.5 单片机控制LCD 1602液晶显示器的显示 123 5.5.1 LCD 1602液晶显示模块简介 123 5.5.2 单片机控制字符型LCD 1602显示实例 129 5.5 键盘接口设计 132 5.5.1 键盘接口设计需解决的问题 132 5.5.2 独立式键盘接口设计实例 133 5.5.3 矩阵式键盘的接口设计实例 140 5.5.4 非编码键盘扫描方式的选择 143 5.5.5 单片机与专用键盘/显示器芯片HD7279A的接口设计 143 思考题及习题5 153 第6章 中断系统的工作原理及应用 155 6.1 AT89S51中断技术概述 155 6.2 AT89S51中断系统结构 155 6.2.1 中断请求源 155 6.2.2 中断请求标志寄存器 156 6.3 中断允许与中断优先级的控制 157 6.3.1 中断允许寄存器IE 157 6.3.2 中断优先级寄存器IP 158 6.4 响应中断请求的条件 159 6.5 外部中断的响应时间 160 6.6 外部中断的触发方式选择 160 6.6.1 电平触发方式 160 6.6.2 跳沿触发方式 161 6.7 中断请求的撤销 161 6.8 中断函数 162 6.9 中断系统应用举例 163 6.9.1 单一外中断的应用 163 6.9.2 两个外中断的应用 164 6.9.3 中断嵌套的应用 166 思考题及习题6 167 第7章 定时器/计数器的工作原理及应用 168 7.1 定时器/计数器的结构 168 7.1.1 工作方式控制寄存器TMOD 168 7.1.2 定时器/计数器控制寄存器TCON 169 7.2 定时器/计数器的4种工作方式 169 7.2.1 方式0 169 7.2.2 方式1 170 7.2.3 方式2 171 7.2.4 方式3 171 7.3 对外部输入的计数信号的要求 173 7.4 定时器/计数器的编程和应用 173 7.4.1 用P1口控制8只LED每0.5s闪亮一次 173 7.4.2 计数器的应用 174 7.4.3 控制P1.0引脚产生周期为2ms的方波 176 7.4.4 利用T1控制发出1kHz的音频信号 177 7.4.5 LED数码管秒表的制作 179 7.4.6 测量脉冲宽度——门控位GATEx的应用 181 7.4.7 LCD时钟的设计 183 思考题及习题7 185 第8章 串行口的工作原理及应用 187 8.1 串行口的结构 187 8.1.1 串行口控制寄存器SCON 187 8.1.2 特殊功能寄存器PCON 188 8.2 串行口的4种工作方式 189 8.2.1 方式0 189 8.2.2 方式1 193 8.2.3 方式2 194 8.2.4 方式3 195 8.3 多机通信 195 8.4 波特率的制定方法 197 8.4.1 波特率的定义 197 8.4.2 计算定时器T1产生的波特率 197 8.5 串行口应用设计实例 198 8.5.1 串行通信标准接口RS-232C、RS-422A与RS-485简介 199 8.5.2 方式1的应用设计实例 201 8.5.3 方式2和方式3的应用设计 208 8.5.4 多机通信的应用设计实例 210 8.5.5 单片机与PC机串行通信的设计实例 216 8.5.6 PC机与单片机或与多个单片机的串行通信 220 思考题及习题8 221 第9章 单片机系统的并行扩展 223 9.1 系统并行扩展技术 223 9.1.1 系统并行扩展结构 223 9.1.2 地址空间分配 224 9.1.3 外部地址锁存器 226 9.2 外部数据存储器的并行扩展 228 9.2.1 常用的静态RAM(SRAM)芯片 228 9.2.2 读/写片外RAM的操作时序 229 9.2.3 并行扩展数据存储器的设计 230 9.2.4 单片机外扩数据存储器RAM 6264的设计实例 232 9.3 片内Flash存储器的编程 233 9.3.1 使用通用编程器写入程序 234 9.3.2 使用下载线的ISP编程 234 9.4 E2PROM的并行扩展 235 9.4.1 并行E2PROM芯片简介 235 9.4.2 AT89S51单片机扩展E2PROM 2864A芯片的设计 236 9.5 AT89S51单片机扩展并行I/O接口芯片82C55的设计 237 9.5.1 I/O接口扩展概述 237 9.5.2 并行I/O接口芯片82C55简介 238 9.5.3 82C55的3种工作方式 241 9.5.4 AT89S51单片机与82C55的接口设计 245 9.6 利用74LSTTL电路扩展并行I/O接口设计实例 247 9.7 用AT89S51单片机的串行口扩展并行输入/输出接口设计实例 248 9.7.1 用74LS165扩展并行输入接口实例 248 9.7.2 用74LS164扩展并行输出接口实例 249 思考题及习题9 250 第10章 AT89S51单片机系统的串行扩展 252 10.1 单总线串行扩展 252 10.1.1 单总线扩展的典型应用——DS18B20的温度测量系统 252 10.1.2 设计实例——单总线DS18B20温度测量系统 255 10.2 SPI总线串行扩展 258 10.3 I2C总线的串行扩展 259 10.3.1 I2C串行总线系统的基本结构 259 10.3.2 I2C总线的数据传送规定 260 10.3.3 AT89S51单片机的I2C总线扩展系统 262 10.3.4 I2C总线数据传送的模拟 263 10.3.5 利用I2C总线扩展E2PROM AT24C02的IC卡设计实例 266 思考题及习题10 272 第11章 AT89S51单片机与DAC、ADC的接口 273 11.1 单片机扩展DAC概述 273 11.2 单片机扩展并行8位DAC0832芯片的设计 274 11.2.1 DAC0832芯片简介 274 11.2.2 设计实例1——单片机扩展DAC0832的程控电压源 275 11.2.3 设计实例2——波形发生器的制作 276 11.3 单片机扩展串行10位DAC-TLC5615 281 11.3.1 串行DAC-TLC5615简介 281 11.3.2 设计实例——单片机扩展串行DAC-TLC5615的设计 282 11.4 单片机扩展ADC概述 284 11.5 单片机并行扩展8位A/D转换器ADC0809 286 11.5.1 设计实例——单片机控制ADC0809进行A/D转换 287 11.5.2 设计实例——两路输入的数字电压表的设计 288 11.6 单片机扩展串行8位A/D转换器TLC549 291 11.6.1 TLC549芯片的特性及工作原理 292 11.6.2 设计实例——单片机扩展TLC549的设计 293 11.7 单片机扩展串行12位ADC-TLC2543的设计 295 11.7.1 TLC2543芯片的特性及工作原理 295 11.7.2 设计实例——单片机扩展TLC2543的设计 297 思考题及习题11 299 第12章 AT89S51单片机的应用系统设计 301 12.1 单片机应用系统的设计步骤 301 12.2 单片机应用系统设计应当考虑的问题 302 12.2.1 硬件设计应考虑的问题 302 12.2.2 典型的单片机应用系统组成 303 12.2.3 系统设计中的总线驱动 304 12.2.4 AT89S51单片机的最小应用系统 305 12.3 单片机应用系统的仿真开发与调试 306 12.4 单片机应用系统设计实例 309 12.4.1 设计实例1——单片机控制步进电机的设计 309 12.4.2 设计实例2——单片机控制直流电机的设计 311 12.4.3 设计实例3——频率计的制作 313 12.4.4 设计实例4——模拟电话拨号的设计 316 12.4.5 设计实例5——8位竞赛抢答器设计 321 12.4.6 设计实例6——基于时钟/日历芯片DS1302的电子钟设计 326 思考题及习题12 332 附录A 实验与课程设计题目 333 题目1 单片机I/O口实验——LED流水灯 333 题目2 单个外部中断实验 333 题目3 中断嵌套实验 334 题目4 定时器/计数器的定时实验 334 题目5 定时器/计数器的计数实验 335 题目6 串行口方式0扩展并行输出口实验 335 题目7 串行口方式0扩展并行输入口实验 335 题目8 双单片机串行通信 336 题目9 单片机与PC之间串行通信实验 336 题目10 扩展82C55并行I/O接口实验 337 题目11 独立式键盘实验 337 题目12 矩阵式键盘扫描实验 338 题目13 单片机驱动1602液晶显示模块 338 题目14 DAC0832的D/A转换实验 339 题目15 ADC0809的A/D转换实验 339 题目16 I2C总线串行扩展AT24C02存储器读/写 339 题目17 单片机控制16×16 阵列LED的显示 340 题目18 温度传感器DS18B20实验 340 题目19 直流电机控制实验 341 题目20 步进电机控制实验 341 附录B 头文件"LCD1602.h"和"DS1302.h"清单 342 B.1 头文件"LCD1602.h"清单 342 B.2 头文件"DS1302.h"清单 343 参考文献 348
主编张毅刚,哈工大教授,国家精品课程“单片机原理”负责人,其教学和科研经验丰富,是国内知名的畅销单片机教材作者。
http://www.hxedu.com.cn/hxedu/fg/book/bookinfo.html?code=G0263070