章 单片机基础知识 1
1.1 单片机的应用与发展 1
1.1.1 单片机的简单应用 1
1.1.2 单片机的发展历史 3
1.2 单片机的分类 6
1.3 AT89C52单片机简介 7
1.3.1 AT89C52单片机的引脚功能 8
1.3.2 AT89C52单片机的内部结构 9
1.3.3 AT89C52单片机的I/O接口部分和特殊功能部分 16
1.4 AT89C52单片机的时钟与复位电路 17
1.4.1 复位操作和复位电路 17
1.4.2 振荡电路和时钟 19
1.4.3 AT89C52单片机的机器周期 20
1.5 AT89C52单片机的低功耗工作方式 21
1.6 常用的名词术语和二进制编码
1.7 指令程序和指令执行 27
本章小结 27
思考题与习题 28
第2章 指令系统及汇编语言程序设计 29
2.1 寻址方式 29
2.2 指令系统 34
2.2.1 数据传送指令 34
2.2.2 算术运算指令 37
2.. 逻辑运算指令 39
2.2.4 位(布尔)操作类指令 41
2.2.5 控制转移类指令 42
. 汇编语言指令格式及汇编语言程序设计基础 46
..1 汇编语言执行指令格式 46
..2 汇编伪指令 47
2 单片机原理与应用实例(第4版)
.. 汇编语言的特点 49
..4 汇编语言程序设计的步骤 49
本章小结 49
思考题与习题 49
第3章 单片机的C语言程序设计 51
3.1 C51的程序结构 51
3.2 数据类型、存储类型及存储模式 53
3.2.1 数据类型 53
3.2.2 常量和变量 54
3.. C51的存储类型及存储模式 55
3.2.4 特殊功能寄存器、并行接口及位变量的定义 58
3.3 运算符、函数及程序流程控制 61
3.3.1 C51的运算符 61
3.3.2 C51的函数 62
3.3.3 C51的流程控制语句 65
3.4 C51的构造数据类型 68
3.4.1 数 组 68
3.4.2 结 构 69
3.4.3 联 合 70
3.4.4 枚 举 71
3.4.5 指 针 71
3.5 C51实例分析及混合编程 74
3.5.1 C51实例分析 74
3.5.2 混合编程 75
3.6 Keil C51简介 78
3.6.1 项目文件的建立、设置与目标文件的获得 78
3.6.2 程序的调试 81
本章小结 85
思考题与习题 85
第4章 单片机的I/O口及Proteus简介 87
4.1 P0~P3端口的结构与功能 87
4.1.1 P0端口的结构与功能 87
4.1.2 P1端口的结构与功能 88
4.1.3 P2端口的结构与功能 89
4.1.4 P3端口的结构与功能 90
4.2 Proteus简介 91
4.2.1 Proteus ISIS的工作界面 92
4.2.2 Proteus ISIS的基本操作 92
4.. Proteus ISIS的原理图绘制和 9
4.2.4 Proteus与Keil C相结合的设计和 98
4.3 I/O口应用实例与 105
4.3.1 LED与数码管简介 105
4.3.2 LED点阵显示屏 107
4.3.3 简易键盘的设计 109
4.3.4 I/O口的实例 111
本章小结 125
思考题与习题 125
第5章 单片机的中断系统与实例 126
5.1 中断系统结构 126
5.1.1 中断概述 126
5.1.2 中断系统结构与中断控制 127
5.2 中断的实现过程 132
5.2.1 中断采样 133
5.2.2 中断查询 133
5.. 中断响应 133
5.2.4 中断服务 135
5.2.5 中断返回 136
5.2.6 中断请求的撤销 137
5.3 中断系统实例与 138
本章小结 148
思考题与习题 149
第6章 定时/器原理及实例 10
6.1 定时/器0和1结构和工作原理 150
6.1.1 定时/器0和1 150
6.1.2 与定时/器0和定时/器1相关的特殊功能寄存器
151
6.1.3 定时/器0和定时/器1的工作模式 153
6.2 定时/器2(T/C2)的结构和工作原理 155
4 单片机原理与应用实例(第4版)
6.2.1 与定时/器2相关的特殊功能寄存器 155
6.2.2 定时/器2的工作模式 156
6.3 实例 160
6.3.1 定时器工作方式实例 160
6.3.2 器工作方式实例 166
6.3.3 捕捉模式实例 168
6.3.4 定时/器复杂应用实例 174
6.4 看门狗定时器 178
6.4.1 看门狗简介 178
6.4.2 看门狗的工作原理 179
6.4.3 看门狗的使用 179
6.4.4 高级看门狗 180
本章小结 180
思考题与习题 181
第7章 单片机的串行通信与实例 182
7.1 串行通信概述 182
7.2 串行接口结构与工作原理 184
7.2.1 AT89C52单片机的串行接口结构 184
7.2.2 AT89C52单片机的串行通信过程 185
7.3 串行接口的控制寄存器与工作方式 185
7.3.1 串行接口的控制寄存器 185
7.3.2 串行口的工作方式 188
7.3.3 波特率的确定 191
7.3.4 定时/器T2产生波特率 192
7.4 串行接口的实例与 193
7.5 单片机多机通信 200
7.6 单片机与PC机串行口通信 207
7.6.1 RS2C接口 207
7.6.2 RS485接口 212
7.6.3 Proteus实现的PC机与单片机的串行通信 216
7.6.4 单片机与计算机的串行通信技术 221
本章小结 2
思考题与习题 2
第8章 单片机扩展技术与实例 4
8.1 存储器的扩展实例与 4
8.1.1 数据存储器的扩展 4
8.1.2 程序存储器的扩展
8.2 I/O接口的扩展实例与 243
8.2.1 可编程接口芯片8255A 243
8.2.2 8255A的应用及 249
8.3 D/A、A/D接口应用实例与 22
8.3.1 D/A转换器 252
8.3.2 A/D转换器 260
本章小结 267
习题与思考题 267
第9章 单片机高级应用实例 269
9.1 Mifare频卡读/写器的设计 269
9.1.1 Mifare卡的内部结构 270
9.1.2 Mifare卡读/写器主要模块的设计 272
9.1.3 Mifare卡操作流程 277
9.1.4 FM1702SL密钥的设计与检测措施 278
9.1.5 Mifare卡读/写软件设计 280
9.2 基于nRF905的无线传输系统设计 287
9.2.1 nRF905简介 288
9.2.2 nRF905电路原理图 292
9.. nRF905固件程序设计 294
本章小结 301
思考题与习题 301
0章 程序烧录与样机开发 302
10.1 项目开发流程 302
10.1.1 项目开发概述 302
10.1.2 需求分析 302
10.1.3 系统总体设计 305
10.2 硬件电路设计与焊接 306
10.2.1 准备工作 306
10.2.2 小系统硬件电路焊接 308
6 单片机原理与应用实例(第4版)
10.. 电路板焊接效果检查 309
10.3 软件开发 310
10.3.1 软件开发过程 311
10.3.2 构建软件项目 312
10.3.3 μVision5软件调试 316
10.4 程序存储器编程 321
10.4.1 程序存储器编程方法 321
10.4.2 在线编程原理 322
10.4.3 STC系列单片机的程序下载 324
10.5 综合调试 326
10.6 综合实例———掉电不丢失日历时钟 327
10.6.1 系统功能要求 327
10.6.2 功分析主要元器件确定 327
10.6.3 主要元器件能介绍 328
10.6.4 硬件设计 334
10.6.5 软件设计 335
本章小结 337
思考题与习题 337
附录A 主要单片机生产商网址及相关信息网址 338
附录B 常用数码对应关系表 339
附录C Proteus VSM 元件库和常用元器件说明 340
附录D C语言的关键字 343
附录E C51的库函数 345
附录F MCS 51指令表 356
参考文献 360
例2.1 寄存器寻址方式 31
例2.2 直接寻址方式 31
例. 直接寻址和立即寻址对比 32
例2.4 寄存器间接寻址方式 32
例2.5 变址寻址方式 33
例2.6 相对寻址方式 33
例2.7 位寻址方式 34
例2.8 共阴极数码管对应的显示代码程序 36
例2.9 标号和字节伪指令DB的使用 47
例2.10 伪指令DS、DB、DW 的使用 48
例3.1 将外部数据存储器2000H~20FFH的内容清零 52
例3.2 求两个数的和 63
例3.3 设计一个程序来实现以下功能:使用拨动开关模拟从P3.0口输入一个脉
冲,控制P1口按十六进制加一方式变化。这里选用AT89C52单片机
74
例3.4 编写一个流水灯程序,其中程序用汇编语言编写 77
例4.1 闪烁灯的Proteus及C语言程序设计 111
例4.2 模拟开关灯的Proteus及C语言程序设计 113
例4.3 广告灯(利用查表方式)的Proteus及程序设计 115
例4.4 I/O 并行口直接驱动数码管显示的Proteus及C语言程序设计
119
例4.5 动态数码管显示的Proteus及C语言程序设计 121
例5.1 外部中断0的Proteus及C语言程序设计 138
例5.2 外部中断在不同触发方式下的Proteus及C语言程序设计 140
例5.3 流水灯Proteus及C语言程序设计 142
例5.4 两位数码管的Proteus及C语言程序设计 144
例5.5 74LS148外部中断扩展的Proteus及C语言程序设计 147
例6.1 将例4.1中的软件方式改为使用定时器来,内容不变
161
例6.2 利用定时器产生脉冲的Proteus及C语言程序设计 163
例6.3 简易车辆里程表的Proteus及C语言程序设计 166
8 单片机原理与应用实例(第4版)
例6.4 利用定时器2测量脉冲宽度的Proteus及C语言程序设计 168
例6.5 音乐播放的Proteus及C语言程序设计 175
例7.1 串入并出芯片74164的Proteus及C语言程序设计 193
例7.2 串行口自检的Proteus及C语言程序设计 195
例7.3 单片机与单片机之间的串行通信Proteus及C语言程序设计 196
例7.4 多机通信的Proteus与C语言程序设计 201
例7.5 单片机与PC机串行通信的Proteus及C语言程序设计 209
例7.6 RS485串行通信的Proteus及C语言程序设计 214
例7.7 串行通信的Proteus及C语言程序设计 218
例7.8 Visual Basic 6.0上位机程序控制DS1302时钟的Proteus 2
例8.1 AT89C52用一片6264芯片扩展8 KB数据存储器并在Proteus中
例8.2 AT89C52用一片2764芯片扩展8 KB程序存储器 241
例8.3 AT89C52通过8255A 并行扩展,模拟交通灯控制并在Proteus中
249
例8.4 利用DAC0832转换器输出三角波的Proteus路和C语言程序设计
257
例8.5 ADC0808电压模数转换Proteus路和C语言程序设计 264