第1章 MCS-51单片机概述 1
1.1 单片机发展历史 1
1.2 MSC-51系列单片机 2
1.3 单片机应用系统的硬件设计 3
1.4 应用系统的软件设计 3
1.5 单片机最新进展 4
1.5.1 数字单片机的技术发展 5
1.5.2 以单片机为核心的嵌入式系统 6
1.5.3 单片机应用的可靠性技术发展 7
第2章 硬件结构和指令系统 9
2.1 MSC-51功能 9
2.2 管脚概述 10
2.3 I/O(输入/输出)端口结构 12
2.3.1 P0口 13
2.3.2 P1口 14
2.3.3 P2口 15
2.3.4 P3口 15
2.3.5 端口的负载能力和接口要求 17
2.4 8051存储器配置 17
2.4.1 程序存储器地址空间 18
2.4.2 数据存储器地址空间 19
2.4.3 PSW 24
2.5 复位 25
2.5.1 复位信号和复位状态 25
2.5.2 常用的几种复位电路 26
2.6 MCS-51单片机工作时序 26
2.6.1 片内振荡器及时钟信号的产生 26
2.6.2 机器周期和指令周期 27
2.6.3 CPU取指令、执行指令周期时序 28
2.6.4 访问片外ROM的操作时序 29
2.6.5 访问片外RAM的操作时序 29
2.7 MCS-51指令系统 31
2.7.1 指令系统综述 31
2.7.2 寻址方式 32
2.7.3 数据传送类指令 33
2.7.4 算术运算类指令 35
2.7.5 逻辑操作类指令 38
2.7.6 控制转移类指令 40
2.7.7 布尔操作类指令 43
第3章 C51程序设计 45
3.1 C51程序设计基础 45
3.1.1 C51的标识符 45
3.1.2 C51的关键字 45
3.1.3 变量与常量 48
3.1.4 数据类型 49
3.1.5 变量的作用域 53
3.1.6 const修饰符 56
3.1.7 C51的分隔符 57
3.1.8 运算符 58
3.1.9 表达式 65
3.2 C51语句 68
3.2.1 说明语句 69
3.2.2 表达式语句 69
3.2.3 复合语句 69
3.2.4 条件语句 70
3.2.5 开关与跳转语句 73
3.2.6 循环语句 76
3.2.7 函数调用语句 80
3.2.8 空语句 81
3.2.9 C51语句的流程与控制 81
3.3 C51函数 84
3.3.1 函数的定义 84
3.3.2 函数的调用和返回 85
3.3.3 函数作用范围 90
3.3.4 函数的变量作用域 90
3.3.5 main函数 90
3.4 C51数据结构 92
3.4.1 C51结构 92
3.4.2 数组 95
3.4.3 联合与枚举 101
3.4.4 类型说明 103
3.4.5 指针 104
3.5 预处理 114
3.5.1 文件包含指令 114
3.5.2 宏定义 115
3.5.3 预处理指令 116
3.5.4 C51头文件 120
第4章 最小应用系统设计 123
4.1 AT89C51单片机性能介绍 123
4.2 MCS-51最小应用系统设计 126
4.3 C51应用开发初步 126
4.3.1 延时程序 127
4.3.2 P1I/O口的声明 127
4.3.3 控制LED指示灯的源程序 129
第5章 中断系统 131
5.1 中断的概念 131
5.2 8051中断控制 133
5.2.1 中断控制寄存器 134
5.2.2 中断响应过程及响应时间 137
5.3 C51中断函数 138
5.3.1 中断函数的定义 138
5.3.2 内部中断函数的使用 139
5.3.3 外部中断函数的使用 140
5.3.4 扩展外部中断函数的使用 141
5.3.5 使用中断函数要注意的问题 142
第6章 定时器/计数器 144
6.1 定时器/计数器简介 144
6.2 定时器/计数器的设置 145
6.2.1 工作模式寄存器TMOD(89H) 145
6.2.2 控制寄存器TCON(88H) 146
6.3 定时器/计数器的四种工作模式 147
6.3.1 模式0 147
6.3.2 模式1 148
6.3.3 模式2 148
6.3.4 模式3 149
6.4 定时器/计数器的编程和应用 150
6.4.1 模式0的应用 150
6.4.2 模式1的应用 151
6.4.3 模式2的应用 152
6.4.4 模式3的应用 152
6.4.5 运行中读定时器/计数器 152
6.4.6 门控制位GATE的功能和使用方法 153
6.5 定时器应用综合实例 153
6.5.1 简介 154
6.5.2 工作原理 154
6.5.3 电路原理图 154
6.5.4 程序 155
第7章 串行口 162
7.1 概述 162
7.1.1 并行和串行 162
7.1.2 串行通信的方式 163
7.1.3 同步通信和异步通信 163
7.1.4 波特率(Baud rate) 164
7.2 8051串行口 164
7.2.1 结构 165
7.2.2 串行口控制寄存器 165
7.2.3 串行通信工作方式 167
7.2.4 波特率设计 169
7.3 单片机双机通信技术 171
7.3.1 中断方式双机通信软件设计 172
7.3.2 通信软件的调试及故障排除 173
7.4 单片机多机通信技术 174
7.4.1 多机通信接口设计 174
7.4.2 多机通信原理 174
7.4.3 多机通信的软件协议 175
7.4.4 主机、从机构成中断方式的多机通信软件实例 176
7.5 PC机与单片机的通信技术 177
第8章 人机交互设计 203
8.1 I/O口的使用 203
8.1.1 I/O口的直接输入/输出 203
8.1.2 开关电路及驱动电路接口 208
8.2 键盘接口技术 211
8.2.1 矩阵键盘工作原理 213
8.2.2 按键的识别方法 213
8.2.3 键盘的编码 215
8.3 显示器接口技术 21
8.3.1 LED显示器接口技术 215
8.3.2 显示器结构原理 215
8.3.3 LED显示器接口及显示方式 216
8.3.4 16×2字符液晶显示(LCD)程序 218
第9章 A/D与D/A转换 222
9.1 传感器 222
9.2 A/D与D/A转换技术 223
9.2.1 D/A转换 223
9.2.2 A/D转换器接口技术 230
9.3 MCS51系列单片机ADμC812 234
9.3.1 ADμC812工作原理 234
9.3.2 控制ADC工作的特殊功能寄存器 236
9.3.3 ADC的工作模式 237
第10章 MCS-51单片机系统的扩展 240
10.1 外部I/O的扩展 240
10.1.1 I/O口扩展概述 240
10.1.2 I/O地址译码技术 240
10.2 扩展程序存储器 242
10.2.1 扩展总线 243
10.2.2 扩展8K字节EPROM 243
10.2.3 扩展16K字节EPROM 245
10.3 扩展数据存储器 245
10.3.1 扩展总线 246
10.3.2 8051扩展2K字节RAM 246
10.4 程序存储器与数据存储器同时扩展 247
10.4.1 8051外扩32KEPROM和32KRAM 247
10.4.2 译码法扩展大容量存储器 247
10.5 采用8279扩展键盘与显示接口 249
10.5.1 8279可编程键盘/显示器接口芯片 249
10.5.2 8279基本启动程序 252
10.6 采用芯片8255进行扩展 254
10.6.1 8255管脚功能 254
10.6.2 8255三种工作方式 255
10.6.3 8255与8051单片机的连接 256
10.6.4 8255扩展实例 256
10.7 8051存储结构 257
10.7.1 8051存储单元 257
10.7.2 数据类型 259
10.7.3 存储器类型 260
10.7.4 存储器模式 263
第11章 单片机实用技术 264
11.1 I2C总线 264
11.1.1 I2C总线特点 264
11.1.2 I2C总线工作原理 264
11.1.3 总线基本操作 265
11.1.4 实例:X24C04与MCS-51单片机软硬件的实现 266
11.1.5 实例程序 267
11.2 电源设计要注意的问题 269
11.3 抗干扰设计 274
11.3.1 硬件考虑 274
11.3.2 软件考虑 277
第12章 C51编译方法 281
12.1 Keil的编译环境μVision2 282
12.1.1 μVision2窗口与菜单 283
12.1.2 编译检查工具PC-Lint 293
12.1.3 开发工具选项 294
12.1.4 调试工具选项 300
12.2 Keil C51编译器的控制指令 301
12.2.1 源文件控制类 301
12.2.2 目标文件(Object)控制类 301
12.2.3 列表文件(listing)控制类 301
12.3 编译过程 302
12.3.1 A51宏汇编器 303
12.3.2 映像文件 305
12.3.3 LIB51库管理器 305
12.3.4 OC51分段目标文件转换器 306
12.3.5 OH51目标代码到HEX文件的转换器 306
12.4 代码优化 306
12.4.1 代码优化 306
12.4.2 对8051的特殊优化 306
12.4.3 代码生成选项 307
12.5 混合编译 307
12.5.1 项目目标和文件组 307
12.5.2 浏览项目窗口中的文件和文件组的属性 308
12.5.3 用户上电初始化程序STARTUP.A51简介 309
12.5.4 与汇编语言的接口 312
12.5.5 和PL/M-51的接口 319
12.6 μVision2其他功能 319
12.6.1 多个文件中查找 320
12.6.2 资源浏览器 320
12.7 出错信息 321
第13章 上机实验指导 322
13.1 实验1—用C51编写简单程序 322
13.1.1 实验要求 322
13.1.2 实验目的 322
13.1.3 部分参考程序 322
13.2 实验2—中断实验 322
13.2.1 实验要求 322
13.2.2 实验目的 323
13.2.3 实验电路及连线 323
13.2.4 实验说明 323
13.2.5 实验程序框图 324
13.2.6 部分源程序 324
13.3 实验3—定时器实验 325
13.3.1 实验要求 325
13.3.2 实验目的 325
13.3.3 实验电路及连线 325
13.3.4 实验说明 326
13.3.5 实验程序框图 326
13.3.6 部分代码 326
13.4 实验4—计数器实验 327
13.4.1 实验要求 327
13.4.2 实验目的 327
13.4.3 实验电路及连线 327
13.4.4 实验说明 327
13.4.5 实验程序框图 328
13.4.6 部分实验程序 329
13.5 实验5—单片机串行口实验 329
13.5.1 实验要求 329
13.5.2 实验目的 329
13.5.3 实验电路及连线 329
13.5.4 实验说明 329
13.6 实验6—P1口控制直流电机实验 330
13.6.1 实验要求 330
13.6.2 实验目的 330
13.6.3 实验电路及连线 330
13.6.4 实验说明 331
13.6.5 实验程序框图 331
13.7 实验7—LCD显示实验 332
13.7.1 实验要求 332
13.7.2 实验目的 332
13.7.3 实验电路及连线 332
13.7.4 实验说明 332
13.7.5 实验程序框图 333
13.7.6 实验程序 333
13.8 实验8—A/D转换实验 337
13.8.1 实验要求 337
13.8.2 实验目的 337
13.8.3 实验电路及连线 337
13.8.4 实验说明 338
13.8.5 实验程序框图 338
13.9 实验9—D/A转换实验 339
13.9.1 实验要求 339
13.9.2 实验目的 339
13.9.3 实验电路及连线 339
13.9.4 实验说明 340
13.9.5 实验程序框图 340
13.10 实验10—扩展存储器读写实验 341
13.10.1 实验要求 341
13.10.2 实验目的 341
13.10.3 实验电路及连线 341
13.10.4 实验说明 341
13.10.5 实验程序框图 342
附录A 致命错误信息 343
附录B 语法和语义错误信息 346
附录C 警告信息 361
附录D MCS-51汇编指令集 365
附录E C51库函数 369