第1章 单片机基础知识 1
1.1 8051单片机的特点 1
1.2 8051的内部结构 3
1.2.1 中央处理器 3
1.2.2 存储器组织 5
1.2.3 片内并行接口 8
1.2.4 8051的内部资源 10
1.2.5 8051的芯片引脚 11
1.2.6 单片机的工作方式 12
1.3 8051的系统扩展 14
1.3.1 外部总线的扩展 14
1.3.2 外部程序存储器的扩展 16
1.3.3 外部数据存储器的扩展 18
1.4 8051指令系统 22
1.4.1 寻址方式 22
1.4.2 指令说明 23
1.4.3 伪指令 30
1.4.4 指令系统表 31
1.5 实用程序设计 36
习题一 38
第2章 C与 8051
2.1 8051的编程语言 41
2.2 Cx51编译器 42
2.3 KEIL 8051开发工具 43
2.4 KEIL Cx51编程实例 48
2.5 Cx51程序结构 53
习题二 54
第3章 Cx51数据与运算 55
3.1 数据与数据类型 55
3.2 常量与变量 56
3.3 Cx51数据的存储类型与8051存储器结构 59
3.4 8051特殊功能寄存器(SFR)及其Cx51定义 64
3.5 8051并行接口及其Cx51定义 66
3.6 位变量(BIT)及其Cx51定义 68
3.7 Cx51运算符、表达式及其规则 69
3.7.1 Cx51算术运算符及其表达式 69
3.7.2 Cx51关系运算符、表达式及优先级 71
3.7.3 Cx51逻辑运算符、表达式及优先级 71
3.7.4 Cx51位操作及其表达式 73
3.7.5 自增减运算符、复合运算符及其表达式 78
习题三 79
第4章 Cx51流程控制语句 80
4.1 C语言程序的基本结构及其流程图 80
4.1.1 顺序结构及其流程图 80
4.1.2 选择结构及其流程图 80
4.1.3 循环结构及其流程图 81
4.2 选择语句 83
4.2.1 选择语句if 83
4.2.2 switch/case语句 86
4.3 循环语句 87
4.3.1 while语句 88
4.3.2 do while语句 89
4.3.3 for循环语句 90
习题四 93
第5章 Cx51构造数据类型 94
5.1 数组 94
5.1.1 一维数组 94
5.1.2 二维数组 97
5.1.3 字符数组 99
5.1.4 查表 100
5.1.5 数组与存储空间 101
5.2 指针 101
5.2.1 指针的基本概念 101
5.2.2 数组指针和指向数组的指针变量 105
5.2.3 指向多维数组的指针和指针变量 109
5.2.4 关于KEIL Cx51的指针类型 110
5.3 结构 112
5.3.1 结构的定义和引用 112
5.3.2 结构数组 116
5.3.3 指向结构类型数据的指针 117
5.4 共用体 120
5.5 枚举 121
习题五 123
第6章 Cx51函数 125
6.1 函数的分类 125
6.2 函数的定义 126
6.3 函数的参数和函数值 128
6.4 函数的调用 129
6.4.1 函数调用的一般形式 129
6.4.2 函数调用的方式 129
6.4.3 对被调用函数的说明 130
6.4.4 函数的嵌套和递归调用 132
6.4.5 函数的递归调用 132
6.4.6 用函数指针变量调用函数 134
6.5 数组、指针作为函数的参数 135
6.5.1 用数组作为函数的参数 135
6.5.2 用指向函数的指针变量作为函数的参数 137
6.5.3 用指向结构的指针变量作为函数的参数 139
6.5.4 返回指针的函数 140
习题六 142
第7章 模块化程序设计 143
7.1 基本概念 143
7.1.1 程序的组成 143
7.1.2 常用术语 143
7.1.3 文件命名常规 145
7.2 模块化程序开发 146
7.2.1 采用模块编程的优点 146
7.2.2 模块化程序开发过程 146
7.3 汇编和编译 147
7.3.1 使用汇编语言的模块化设计 147
7.3.2 使用C语言的模块化设计 151
7.4 覆盖和共享 152
7.4.1 覆盖 152
7.4.2 共享 152
7.5 库和链接器/定位器 154
7.5.1 库 154
7.5.2 链接器/定位器 154
7.6 混合编程 157
7.6.1 混合编程介绍 157
7.6.2 参数传递 158
7.6.3 混合编程实例 162
7.6.4 根据硬件环境的配置 165
7.7 程序优化 166
习题七 167
第8章 8051内部资源的C编程 168
8.1 中断 168
8.1.1 中断源 169
8.1.2 中断的控制 170
8.1.3 中断响应 171
8.1.4 寄存器组切换 173
8.1.5 中断编程 175
8.2 定时器/计数器 177
8.2.1 与T/C有关的特殊功能寄存器 178
8.2.2 定时器/计数器的工作方式 180
8.2.3 定时器/计数器的初始化 181
8.2.4 定时器/计数器的应用实例 182
8.3 串行口 188
8.3.1 与串行口有关的SFR 189
8.3.2 串行口的工作方式 190
8.3.3 串行口初始化 191
8.3.4 串行口应用范例 192
8.4 点对点的串行异步通信 196
8.4.1 通信双方的硬件连接 196
8.4.2 通信双方的约定 196
8.4.3 点对点通信编程 197
8.5 多机通信 200
8.5.1 通信接口 200
8.5.2 通信协议 200
8.5.3 通信程序 201
习题八 207
第9章 8051扩展资源的C编程 209
9.1 可编程外围并行接口8255 209
9.1.1 8255的结构和引脚 209
9.1.2 8255的命令字和工作方式 210
9.1.3 8255与8051的接口 212
9.2 可编程接口芯片8155 214
9.2.1 8155的结构和引脚 214
9.2.2 8155的命令字、状态字及工作方式 215
9.2.3 8155与8051的接口 216
9.3 I2C总线扩展存储器 218
9.3.1 I2C总线简介 218
9.3.2 I2C总线的通信规约 219
9.3.3 串行I2C总线E2PROM 24CXX 220
9.3.4 I2C总线的编程实现 224
习题九 227
第10章 8051输出控制的C编程 228
10.1 8位D/A芯片DAC0832 228
10.1.1 DAC0832的结构和引脚 228
10.1.2 8051与DAC0832的接口电路 229
10.2 12位D/A芯片AD7521 232
10.2.1 AD7521的引脚 232
10.2.2 AD7521与8051的接口 232
10.3 步进电机控制 234
10.3.1 步进电机及其工作方式 234
10.3.2 步进电机与单片机的接口 234
习题十 239
第11章 8051数据采集的C编程 240
11.1 8位A/D芯片ADC0809 240
11.1.1 ADC0809的结构和引脚 240
11.1.2 ADC0809与8051的接口 242
11.2 12位A/D芯片AD574 243
11.2.1 AD574的结构和引脚 243
11.2.2 AD574与8051的接口 245
11.3 V/F变换芯片AD650 247
11.4 频率量的测量 250
11.4.1 测量频率法 250
11.4.2 测量周期法 252
习题十一 254
第12章 8051人机交互的C编程 255
12.1 键盘和数码显示 255
12.1.1 行列式键盘与8051的接口 255
12.1.2 七段数码显示与8051的接口 257
12.2 可编程键盘/显示接口芯片8279 260
12.2.1 8279内部结构和引脚 260
12.2.2 8279的命令字和状态字 262
12.2.3 8279和8051的接口 265
12.3 字符型LCD显示模块 267
12.3.1 字符型LCD的结构和引脚 267
12.3.2 显示板控制器的指令系统 269
12.3.3 LCD显示板与单片机的接口和编程 271
12.4 点阵型LCD显示模块 273
12.4.1 HD61830的特点和引脚 273
12.4.2 HD61830指令集 274
12.4.3 与内藏HD61830的液晶模块的接口和编程 277
习题十二 282
第13章 物联网数据采集 283
13.1 物联网简介 283
13.1.1 物联网的概念 283
13.1.2 物联网的体系结构 283
13.1.3 物联网的关键技术 284
13.1.4 物联网的发展现状与应用 285
13.1.5 物联网数据采集平台 286
13.2 CC2530基础 287
13.2.1 CC2530的结构及特性 287
13.2.2 通用数字I/O接口 295
13.2.3 外部I/O中断 296
13.2.4 定时器操作 297
13.2.5 ADC单次采样 310
13.2.6 USART串口通信 313
13.3 温湿度采集 320
13.3.1 温湿度传感器SHT10 320
13.3.2 TC77温度传感器 326
13.4 加速度传感器采集 328
13.4.1 加速度传感器MMA7360 328
13.4.2 加速度传感器ADXL345 331
13.5 RFID采集 335
13.6 反射式接近开关传感器 337
13.7 超声波测距 338
附录 预处理 342