第1章 MCS-51单片机概述 1
1.1 MCS-51单片机结构 1
1.1.1 中央处理器(CPU) 2
1.1.2 存储器结构 6
1.1.3 定时器/计数器 9
1.1.4 并行端口 9
1.1.5 串行端口 11
1.1.6 中断系统 11
1.1.7 总线 12
1.1.8 8051的芯片引脚 12
1.2 MCS-51单片机的指令系统 14
1.2.1 8051的指令格式 14
1.2.2 8051的寻址方式 14
1.2.3 8051的指令说明 18
1.3 MCS-51单片机的伪指令 32
1.3.1 ORG伪指令 32
1.3.2 END伪指令 32
1.3.3 EQU(或=)伪指令 32
1.3.4 DATA伪指令 33
1.3.5 DB伪指令 33
1.3.6 DW伪指令 33
1.3.7 DS伪指令 34
1.3.8 BIT伪指令 34
1.4 MCS-51汇编语言编程实例 34
1.5 MCS-51单片机C语言简介 36
1.5.1 用C语言开发单片机的优势 36
1.5.2 C51程序的例子 37
1.5.3 C51程序在Keil C51下的编译、仿真 38
1.6 小结 42
第2章 C51语言基本语法 43
2.1 C51的标识符和关键字 43
2.2 C51的运算量 45
2.2.1 常量 45
2.2.2 变量 46
2.3 C51的数据类型 46
2.3.1 字符型(char) 47
2.3.2 整型(char) 50
2.3.3 浮点型(float) 52
2.3.4 指针型 53
2.3.5 位变量(bit) 53
2.3.6 特殊功能寄存器(sfr) 53
2.3.7 16位特殊功能寄存器(sfr16) 54
2.3.8 可寻址位(sbit) 54
2.4 C51的存储种类和存储器类型 55
2.4.1 存储种类 55
2.4.2 存储器类型 59
2.4.3 存储模式 60
2.5 C51运算符和表达式 61
2.5.1 算术运算符和算术表达式 61
2.5.2 赋值运算符和赋值表达式 62
2.5.3 增量、减量运算符与增量、减量表达式 63
2.5.4 关系运算符与关系表达式 64
2.5.5 逻辑运算符与逻辑表达式 65
2.5.6 位运算符与位运算表达式 67
2.5.7 复合赋值运算符与复合赋值表达式 69
2.5.8 逗号运算符与逗号表达式 69
2.5.9 条件运算符与条件表达式 70
2.5.10 指针与地址运算符 70
2.5.11 C51运算符的优先级 71
2.6 小结 72
第3章 C51语句 73
3.1 C51控制结构概述 73
3.2 C51语句概述 74
3.3 说明语句 75
3.4 表达式语句 76
3.5 空语句 76
3.6 控制语句 77
3.6.1 条件分支语句 77
3.6.2 循环语句 84
3.6.3 转移语句 91
3.7 小结 94
第4章 C51函数 95
4.1 函数的定义 96
4.1.1 无参数函数的定义方法 96
4.1.2 有参数函数的定义方法 97
4.1.3 空函数的定义方法 97
4.2 函数参数和返回值 98
4.2.1 形式参数和实际参数 98
4.2.2 函数的返回值 99
4.3 函数的原型声明 99
4.4 函数的调用 101
4.4.1 函数调用的一般形式 101
4.4.2 函数调用的方式 101
4.5 函数的递归调用 102
4.6 局部变量与全局变量 104
4.6.1 局部变量 104
4.6.2 局部静态变量 105
4.6.3 全局变量 106
4.6.4 全局静态变量 107
4.7 内部函数与外部函数 108
4.7.1 内部函数 108
4.7.2 外部函数 109
4.8 中断服务函数 110
4.9 库函数 112
4.9.1 标准输入输出函数 113
4.9.2 其他常用库函数 116
4.10 小结 116
第5章 数组 117
5.1 一维数组 117
5.1.1 一维数组的定义和初始化 117
5.1.2 一维数组元素的引用 119
5.1.3 一维数组应用实例 120
5.2 二维数组 122
5.2.1 二维数组的定义和初始化 122
5.2.2 二维数组的引用 124
5.2.3 二维数组应用实例 125
5.3 字符数组 129
5.3.1 字符数组的定义和初始化 129
5.3.2 字符数组元素的引用 130
5.4 小结 130
第6章 指针 131
6.1 指针变量的定义及其运算 131
6.1.1 地址和指针的定义 131
6.1.2 变量的指针和指针变量 132
6.1.3 指针变量的定义和初始化 133
6.1.4 指针变量的引用 133
6.1.5 指针变量的运算 136
6.1.6 指针变量作为函数的参数 137
6.2 数组与指针 140
6.2.1 指向数组元素的指针变量 140
6.2.2 通过指针变量引用数组元素 141
6.2.3 数组名作为函数参数 143
6.3 指向函数的指针变量 144
6.3.1 指向函数的指针变量的定义 144
6.3.2 用函数指针变量调用函数 145
6.3.3 用指向函数的指针作函数参数 146
6.4 指针数组 147
6.5 C51的指针类型 149
6.5.1 通用指针变量 149
6.5.2 指定存储区的指针变量 150
6.6 函数指针实例 150
6.7 小结 152
第7章 结构体与联合体 153
7.1 结构体 153
7.1.1 结构体类型的定义 153
7.1.2 结构体变量的定义 154
7.1.3 结构体变量的引用和初始化 155
7.2 结构体数组与指向结构体的指针变量 157
7.2.1 结构体数组的定义 157
7.2.2 结构体数组的初始化 157
7.2.3 结构体数组的应用实例 158
7.2.4 结构体指针变量 159
7.3 联合体 160
7.3.1 联合体变量的定义 160
7.3.2 联合体变量的引用方式 161
7.3.3 联合体变量的特点 162
7.3.4 联合体变量的应用实例 162
7.4 枚举类型 163
7.5 typedef语句 166
7.6 小结 168
第8章 预处理 169
8.1 宏定义 169
8.1.1 不带参数的宏定义 169
8.1.2 带参数的宏定义 171
8.2 文件包含 173
8.3 条件编译 174
8.4 小结 177
第9章 Keil mVision集成开发环境 178
9.1 Keil μVision概述 178
9.1.1 Keil μVision简介 178
9.1.2 Keil μVision的安装 180
9.2 Keil μVision的使用 181
9.2.1 Keil μVision的菜单条、工具条和快捷键 181
9.2.2 开发工具选项 186
9.3 Keil μVision调试技巧 192
9.3.1 程序复位 193
9.3.2 设置和删除断点的方法 194
9.3.3 查看和修改寄存器的内容 194
9.3.4 观察和修改变量 195
9.3.5 观察和修改存储器区域 196
9.3.6 并行口和串行口的使用方法 197
9.3.7 定时器/计数器的使用方法 197
9.3.8 外部中断的使用方法 198
9.4 小结 198
第10章 单片机内部资源及其C51编程 199
10.1 MCS-51的中断系统及其编程 199
10.1.1 中断源 199
10.1.2 中断相关寄存器 200
10.1.3 中断响应 203
10.1.4 中断的C51编程实例 204
10.2 MCS-51的定时/计数器及其编程 206
10.2.1 定时/计数器的硬件基础知识 206
10.2.2 定时/计数器的相关寄存器 207
10.2.3 定时/计数器的工作方式 208
10.2.4 定时/计数器的C51编程实例 210
10.3 MCS-51的串行口及其编程 214
10.3.1 串行异步通信的字符帧格式和波特率 215
10.3.2 MCS-51单片机串行口的硬件基础知识 216
10.3.3 MCS-51单片机串行口的相关寄存器 216
10.3.4 MCS-51单片机串行口的工作方式 217
10.3.5 串行口的C51编程实例 219
10.4 小结 223
第11章 MCS-51单片机系统扩展 225
11.1 单片机最小系统 225
11.1.1 片内无程序存储器的MCS-51单片机的最小系统 225
11.1.2 片内有程序存储器的MCS-51单片机的最小系统 226
11.2 MCS-51单片机程序存储器的扩展及应用实例 227
11.2.1 片外总线结构 227
11.2.2 地址锁存器 228
11.2.3 程序存储器 229
11.2.4 程序存储器的扩展实例 232
11.3 MCS-51单片机数据存储器的扩展及应用实例 234
11.4 MCS-51单片机I/O端口的扩展及应用实例 237
11.4.1 并行扩展I/O端口 237
11.4.2 串行扩展I/O端口 240
11.5 小结 245
第12章 单片机外围接口技术 247
12.1 MCS-51单片机键盘接口技术 247
12.1.1 独立式键盘的接口设计和编程 248
12.1.2 矩阵式键盘的接口设计和编程 250
12.2 MCS-51单片机显示器接口技术 253
12.2.1 七段发光二极管基础知识 253
12.2.2 发光二极管显示常用芯片及编程实例 254
12.2.3 液晶显示模块基础知识 260
12.2.4 液晶显示模块的C51编程实例 264
12.3 MCS-51单片机与模数转换器接口技术 266
12.3.1 单片机与并行模数转换器ADC0809的接口及编程 267
12.3.2 单片机与串行模数转换器MAX187的接口及编程 269
12.4 MCS-51单片机与数模转换器接口技术 271
12.4.1 MCS-51单片机与并行数模转换器DAC0832的接口及编程 271
12.4.2 MCS-51单片机与串行数模转换器TLC5615的接口及编程 274
12.5 MCS-51单片机与微型打印机接口技术 277
12.5.1 TPmP-TF系列打印机的接口信号 277
12.5.2 TPmP-TF打印机的字符编码和汉字 278
12.5.3 TPmP-TF打印机的打印命令 279
12.5.4 MCS-51单片机与TPmP-TF打印机的接口及编程 281
12.6 小结 282
第13章 简单C51应用实例 284
13.1 简单的跑马灯设计 284
13.1.1 硬件设计 285
13.1.2 程序设计 285
13.2 矩形波发生器 288
13.2.1 用两个定时器/计数器产生矩形波 288
13.2.2 用一个定时器/计数器产生矩形波 290
13.3 基于MCS-51单片机的四路抢答器 292
13.3.1 硬件设计 292
13.3.2 程序设计 294
13.4 I2C总线数据存储器在单片机系统中的用法 299
13.4.1 I2C总线简介 299
13.4.2 AT24C02简介 300
13.4.3 硬件设计 300
13.4.4 程序设计 301
13.5 双端口RAM在单片机系统中的使用 305
13.5.1 硬件设计 305
13.5.2 程序设计 308
13.6 小结 310