第1章 绪论 1
1.1 单片机简介 1
1.1.1 计算机的基本组成 1
1.1.2 单片机的基本结构 2
1.2 单片机的发展 4
1.2.1 单片机的发展历史 4
1.2.2 单片机技术的发展特点 6
1.3 单片机体系结构 7
1.3.1 CPU设计 7
1.3.2 存储器设计 8
1.3.3 总线结构 8
1.3.4 单片机与微处理器 9
1.3.5 单片机与嵌入式系统 9
1.4 单片机内部数据的表示 10
1.4.1 数据的表示 10
1.4.2 数据的运算 13
1.4.3 指令的表示 15
1.5 单片机的应用与选型 15
1.5.1 单片机的应用 15
1.5.2 单片机的选型 16
1.5.3 单片机的学习 17
小结 17
习题 18
第2章 MCS-51单片机的结构 19
2.1 MCS-51单片机的内部结构 19
2.2 MCS-51单片机的引脚功能 21
2.3 MCS-51单片机的CPU 24
2.3.1 控制器 25
2.3.2 运算器 26
2.3.3 布尔处理器 28
2.3.4 时钟电路 29
2.3.5 时序 31
2.4 MCS-51单片机的存储器组织 33
2.4.1 程序存储器 33
2.4.2 内部数据存储器 34
2.4.3 特殊功能寄存器 38
2.4.4 外部数据存储器 38
2.5 MCS-51单片机的工作方式 40
2.5.1 复位方式 40
2.5.2 程序执行方式 42
2.5.3 低功耗方式 42
2.5.4 编程和校验方式 45
2.6 案例实训——单片机最小系统 47
小结 49
习题 50
第3章 MCS-51单片机的指令系统 51
3.1 MCS-51单片机指令系统概述 51
3.1.1 指令格式 51
3.1.2 指令分类 52
3.1.3 指令系统中使用的符号 53
3.2 MCS-51单片机的寻址方式 54
3.2.1 立即数寻址 54
3.2.2 直接寻址 55
3.2.3 寄存器寻址 56
3.2.4 寄存器间接寻址 57
3.2.5 变址寻址 58
3.2.6 位寻址 59
3.2.7 相对寻址 59
3.2.8 寻址方式总结 60
3.3 数据传送类指令 61
3.3.1 内部数据传送指令 61
3.3.2 外部数据传送指令 65
3.3.3 查表指令 66
3.3.4 堆栈操作指令 67
3.3.5 数据交换指令 69
3.4 算术逻辑运算类指令 70
3.4.1 算术运算指令 70
3.4.2 逻辑运算指令 75
3.4.3 移位指令 77
3.4.4 累加器清零指令 78
3.4.5 累加器内容取反指令 78
3.5 位操作指令 79
3.5.1 位传送指令 79
3.5.2 位修改指令 79
3.5.3 位运算指令 80
3.5.4 位控制转移指令 81
3.6 流程控制类指令 83
3.6.1 无条件转移指令 83
3.6.2 条件转移指令 86
3.6.3 减1不为零转移指令 89
3.6.4 子程序调用与返回指令 90
3.6.5 空操作指令 93
3.7 案例实训——简单程序设计 93
小结 97
习题 97
第4章 MCS-51汇编语言程序设计 101
4.1 汇编语言概述 101
4.1.1 程序设计语言 101
4.1.2 汇编语言程序的开发过程 103
4.2 汇编语言格式 103
4.2.1 汇编语言程序示例 103
4.2.2 程序语句格式 104
4.2.3 表达式 105
4.2.4 伪指令语句 107
4.2.5 通用的转移和调用语句 111
4.2.6 条件汇编 111
4.2.7 程序结构 112
4.3 汇编程序的工作过程 113
4.3.1 手工汇编过程 113
4.3.2 机器汇编过程 114
4.3.3 Intel HEX文件 115
4.4 汇编语言程序设计 116
4.4.1 顺序结构 116
4.4.2 分支结构 118
4.4.3 循环结构 120
4.4.4 子程序设计 122
4.5 案例实训——HEX格式文件处理 124
小结 128
习题 128
第5章 MCS-51 C语言程序设计 130
5.1 C语言与MCS-51单片机 130
5.1.1 C语言程序开发过程 130
5.1.2 C语言的特点 132
5.1.3 单片机C语言的移植 132
5.2 单片机C语言的扩充 133
5.2.1 数据类型 133
5.2.2 存储器类型 134
5.2.3 存储模式 135
5.2.4 硬件资源访问 136
5.2.5 指针 139
5.3 C语言程序结构 141
5.3.1 函数 141
5.3.2 流程控制 144
5.3.3 输入与输出 147
5.3.4 程序的入口 147
5.4 C语言与汇编语言的混合编程 148
5.5 案例实训——单片机系统命令接口 150
小结 153
习题 153
第6章 并行接口及应用 155
6.1 MCS-51的并行接口 155
6.1.1 P0口 155
6.1.2 P1口 157
6.1.3 P2口 159
6.1.4 P3口 160
6.1.5 并行接口的驱动能力 161
6.1.6 并行接口的应用 161
6.2 并行接口的扩展 163
6.2.1 MCS-51的总线结构 163
6.2.2 并行输入接口的扩展 165
6.2.3 并行输出接口的扩展 166
6.2.4 可编程并行接口芯片8255A 167
6.3 键盘接口 174
6.3.1 按键的抖动 174
6.3.2 独立式键盘接口 174
6.3.3 矩阵式键盘接口 175
6.4 显示接口 178
6.4.1 LED显示接口 178
6.4.2 LCD显示模块接口 182
6.5 并行存储器的扩展 186
6.5.1 程序存储器的扩展 186
6.5.2 并行数据存储器的扩展 190
6.5.3 Flash存储器的扩展 196
6.6 内部Flash存储器与并行编程 198
6.6.1 Flash存储器的操作方式 199
6.6.2 Flash存储器的并行编程 199
6.6.3 Flash存储器的其他操作 200
6.6.4 Flash存储器的加密 201
6.7 案例实训——交通灯控制电路 201
小结 204
习题 204
第7章 中断系统及应用 207
7.1 中断的概念 207
7.1.1 中断的过程 207
7.1.2 中断的作用 208
7.1.3 中断系统的主要功能 209
7.2 MCS-51中断系统的结构 210
7.2.1 中断源 210
7.2.2 中断向量 211
7.3 中断的控制 212
7.3.1 中断请求标志 212
7.3.2 中断请求方式 213
7.3.3 中断允许 213
7.3.4 中断优先级 214
7.4 中断的响应 215
7.4.1 中断的响应过程 215
7.4.2 中断响应时间 217
7.4.3 中断服务程序 217
7.4.4 中断请求的撤销 218
7.5 中断系统的应用 219
7.5.1 中断控制程序的编写 219
7.5.2 中断服务程序的编写 220
7.5.3 MCS-51的单步操作 224
7.6 中断系统的扩展 228
7.6.1 中断优先级的扩充 228
7.6.2 中断源的扩展 229
7.7 案例实训——带中断的交通灯控制电路 233
小结 237
习题 238
第8章 定时器/计数器及应用 239
8.1 定时器/计数器T0、T1 240
8.1.1 T0、T1的内部结构 240
8.1.2 T0、T1的工作方式 242
8.2 定时器/计数器T2 245
8.2.1 T2的结构 245
8.2.2 T2的工作方式 246
8.3 定时器/计数器的应用 250
8.3.1 工作方式的选择 250
8.3.2 定时常数的计算 251
8.3.3 定时器/计数器应用举例 252
8.3.4 信号的测量 257
8.3.5 读取定时器/计数器 258
8.4 监视定时器 259
8.4.1 监视定时器的原理 259
8.4.2 监视定时器芯片MAX813L 260
8.4.3 AT89S51的内部监视定时器 261
8.5 日历时钟芯片DS1302 261
8.5.1 DS1302简介 262
8.5.2 DS1302的操作 262
8.5.3 DS1302的应用 263
8.6 案例实训——简易电子琴电路 265
小结 269
习题 269
第9章 串行接口与串行通信 271
9.1 串行通信简介 271
9.1.1 串行通信技术分类 271
9.1.2 串行通信的软件实现 274
9.1.3 串行接口与RS-232C标准 275
9.2 MCS-51串行口的结构 277
9.2.1 MCS-51串行口的结构 277
9.2.2 MCS-51串行口的控制 278
9.3 MCS-51串行口的工作方式 280
9.3.1 方式0——同步移位寄存器 280
9.3.2 方式1——8位UART 282
9.3.3 方式2和3——9位UART 285
9.4 串行口的应用 288
9.4.1 波特率的计算 288
9.4.2 方式0的应用 291
9.4.3 方式1的应用 293
9.4.4 方式2和3的应用 298
9.5 多机通信方式 300
9.5.1 多机通信原理 300
9.5.2 通信协议的设计 301
9.6 SPI总线接口 302
9.6.1 SPI总线结构 302
9.6.2 SPI总线应用 303
9.7 I2C总线接口 304
9.7.1 I2C总线简介 305
9.7.2 I2C总线协议 306
9.7.3 I2C串行EEPROM及其应用 306
9.7.4 I2C并行扩展芯片PCF8574 311
9.8 内部Flash存储器与串行编程 314
9.8.1 串行编程过程 314
9.8.2 串行编程指令 315
9.9 案例实训——与PC机的通信 316
小结 320
习题 321
第10章 模拟量接口 323
10.1 D/A转换器 324
10.1.1 D/A转换原理 324
10.1.2 D/A转换器的指标 325
10.1.3 D/A转换器的选型 326
10.2 D/A转换器的应用 327
10.2.1 DAC0832的结构 327
10.2.2 DAC0832的应用 329
10.2.3 DAC1208的结构与应用 332
10.3 A/D转换器 335
10.3.1 A/D转换原理 335
10.3.2 A/D转换器的指标 337
10.3.3 A/D转换器的选择 338
10.4 A/D转换器的应用 338
10.4.1 ADC0809的结构 338
10.4.2 ADC0809的应用 340
10.4.3 AD574A的结构与应用 344
10.5 案例实训——模拟信号的叠加 349
小结 351
习题 351
第11章 单片机应用系统设计 353
11.1 单片机应用系统设计过程 353
11.1.1 单片机应用系统开发周期 353
11.1.2 软件开发过程 354
11.1.3 硬件开发过程 355
11.1.4 软、硬件集成测试 356
11.2 硬件设计中的问题 357
11.2.1 硬件设计的主要内容 357
11.2.2 驱动与隔离技术 358
11.2.3 电源与低功耗系统 361
11.2.4 硬件可靠性设计 363
11.3 软件设计中的问题 364
11.3.1 单片机应用系统软件特点 364
11.3.2 单片机应用系统软件结构 365
11.3.3 软件缓冲区的使用 369
11.3.4 系统运行过程的监控 370
11.3.5 软件可靠性设计 371
11.4 案例实训——自动打铃机电路 372
小结 374
习题 374
第12章 单片机应用系统设计实践 376
12.1 系统总体设计 376
12.1.1 系统说明 376
12.1.2 方案设计 377
12.1.3 功能设计 378
12.2 硬件系统设计 379
12.2.1 总体设计 379
12.2.2 指纹模块简介 380
12.2.3 用户界面设计 380
12.3 软件系统设计 383
12.3.1 软件体系结构 383
12.3.2 软件框架 384
12.3.3 硬件自检和初始化部分 386
12.3.4 消息处理 387
12.3.5 数据缓冲区的设计 389
小结 391
习题 391
附录A 各章习题提示与参考答案 392
附录B MCS-51指令速查表 397
附录C MCS-51指令(按功能顺序) 398
参考文献 400