第1章 嵌入式控制器概述 1
1.1 嵌入式微控器的近来发展 1
1.2 单片机发展趋势 2
1.3 单片机内部结构 2
1.4 单片机与微处理器 3
1.5 单片机产品 4
1.6 单片机的应用 4
1.7 单片机的开发平台 5
第2章 MCS-51单片机的硬件结构和指令系统 8
2.1 MCS-51单片机的主要功能特点 8
2.2 MCS-51单片机内部结构分析 9
2.3 MCS-51单片机的引脚功能 11
2.3.1 时钟电路 12
2.3.2 控制信号 13
2.3.3 I/O端口 14
2.4 MCS-51的存储器组织 19
2.3.4 MCS-51单片机管脚的应用特性 19
2.4.1 MCS-51程序存储器 21
2.4.2 数据存储器 21
2.4.3 专用寄存器(SFR) 25
2.4.4 外部数据存储器 28
2.5 MCS-51 CPU时序 28
2.5.1 机器周期,状态,相位 28
2.5.2 典型指令的取指和执行时序 29
2.6.1 HMOS型单片机的掉电运行方式 30
2.6 MCS-51低功耗运行方式 30
2.6.2 CHMOS型单片机的掉电运行方式与待机方式 31
2.7 MCS-51内部程序存储器的写入、校验和加密 32
2.7.1 8751内部EPROM的写入和擦除 32
2.7.2 内部程序存储器加密位 33
2.8 MCS-51指令系统 33
第3章 C语言与8051单片机 41
3.1 8051的编程语言 41
3.2 C语言的特点与C语言向8051的移植 42
3.3 C51编译器 43
3.4 C51程序结构 44
第4章 C51基本词法 48
4.1 标识符 48
4.2 关键字 49
4.3 常量 49
4.4 字符串 50
4.5 运算符 50
4.5.1 单目运算符 52
4.5.2 双目运算符 54
4.5.3 三目运算符 59
4.5.4 赋值运算符 59
4.5.5 逗号运算符 60
4.5.6 函数参数运算符 60
4.5.7 数组下标运算符 60
4.6.1 方括号对分隔符 61
4.6 分隔符 61
4.5.8 结构/联合成员运算符 61
4.5.9 结构/联合指针运算符 61
4.6.2 圆括号对分隔符 62
4.6.3 花括号对分隔符 62
4.6.4 逗号分隔符 62
4.6.5 分号分隔符 63
4.6.6 冒号分隔符 63
4.6.9 等号分隔符 64
4.6.10 ^分隔符 64
4.6.8 星号分隔符 64
4.6.7 省略号分隔符 64
4.6.11 预处理器伪指令符 65
4.7 空白符 65
4.8 注释符 65
第5章 C51数据结构 67
5.1 数据与数据结构 67
5.2 常量 68
5.2.2 浮点数常量 69
5.2.1 整数常量 69
5.2.3 枚举常量 70
5.2.4 字符常量 71
5.3 变量 72
5.3.1 变量说明 72
5.3.2 变量的数据类型 75
5.3.3 8051特殊功能寄存器和特殊功能位 77
5.4 C51构造数据类型 78
5.4.1 数组 79
5.4.2 结构 82
5.4.3 共用体 86
5.4.4 枚举 87
5.5 指针 88
5.5.1 指针的基本概念 88
5.5.2 变量的指针和指向变量的指针变量 89
5.5.3 数组指针和指向数组的指针变量 93
5.5.4 指向结构类型数据的指针 97
5.5.5 Franklin C51的指针类型 100
第6章 C51的存储 103
6.1 8051单片机的存储器 103
6.2 C51存储类型与8051单片机存储器 105
6.3 存储模式 106
第7章 C51流程控制语句 109
7.1 C语言程序的基本结构 109
7.1.1 顺序结构及其流程图 109
7.1.2 选择结构及其流程图 109
7.1.3 循环结构及其流程图 111
7.2 选择结构流程控制语句 111
7.2.1 if语句 112
7.2.2 switch/case语句 114
7.3 循环结构流程控制语句 115
7.3.1 goto语句及其构成的循环 116
7.3.2 while语句 117
7.3.3 do-while语句 118
7.3.4 for循环语句 119
7.3.5 循环的嵌套 122
7.3.6 break和continue语句 123
第8章 C51函数 125
8.1 C51程序的构成 125
8.2 函数的分类 126
8.2.1 从用户角度划分 126
8.2.2 从函数定义形式划分 126
8.3 函数的说明 127
8.3.1 函数说明的格式 127
8.3.2 函数说明 128
8.3.3 一般的函数定义举例 133
8.4 函数的参数和函数返回值 135
8.4.1 形式参数和实际参数 135
8.4.2 函数的返回值 136
8.5.3 对被调用函数的说明 138
8.5.2 函数调用的方式 138
8.5.1 函数调用的一般形式 138
8.5 函数的调用 138
8.5.4 函数的嵌套调用 140
8.5.5 函数的递归调用 141
8.5.6 用函数指针变量调用函数 142
8.6 数组、指针与函数调用 143
8.6.1 数组作为函数的参数 143
8.6.2 指针作为函数的参数 145
8.6.3 返回指针类型数据的函数 148
8.7 内部函数和外部函数 149
8.7.1 部函数 149
8.7.2 外部函数 149
8.8 C51库函数介绍 150
8.8.1 intrans.h 150
8.2.2 absacc.h 152
第9章 C51预处理器 154
9.1 包含文件伪指令 154
9.2.1 简单宏 155
9.2 伪指令宏 155
9.2.2 参数宏 156
9.2.3 条件宏 156
9.2.4 预定义宏 157
9.2.5 宏释放 158
9.2.6 宏体中的#符和##符 158
9.3 条件编译伪指令 159
9.4 编译器伪指令 159
9.5 #error伪指令 160
第10章 C51和汇编语言 161
10.1 C51和汇编语言的性能比较 161
10.2 C51和汇编语言的混合编程 167
10.2.1 C51语言关于函数定义和函数调用的规定 168
10.2.2 C51与汇编函数互调代码 168
11.1.2 常用名词 173
11.1.1 程序的组成 173
11.1 C51程序基本概念 173
第11章 开发C51程序 173
11.1.3 C51文件扩展名 174
11.2 C51程序开发流程 175
11.3 C51编译 176
11.3.1 汇编方法 176
11.3.2 编译方法 181
11.4.1 库 183
11.4 C51库和连接/定位器 183
11.4.2 连接/定位器 184
11.5 编译连接与存储空间 188
11.5.1 覆盖 188
11.5.2 共享 188
11.6 程序优化 189
第12章 8051内部资源的C51编程 191
12.1 输入/输出端口 191
12.2 定时器/计数器 193
12.2.1 定时器/计数器的控制寄存器和状态寄存器 194
12.2.2 定时器/计数器的计数初值计算 197
12.2.3 应用编程实例 198
12.3 中断 202
12.3.1 8051中断系统 202
12.3.2 控制中断的一些寄存器 202
12.3.3 响应中断 204
12.3.4 中断服务程序的编制 205
12.3.5 中断编程应用实例 205
12.4 串行口 210
12.4.1 与串行口控制有关的寄存器 210
12.4.2 串行口工作模式 212
12.4.3 串行口应用实例 214
第13章 8051外部扩展资源的C51编程 223
13.1 可编程I/O接口控制芯片8255 223
13.1.1 8255简介 223
13.1.2 8255工作说明 225
13.1.3 8255与8051的接口和编程 230
13.2 用串行口扩展I/O端口 231
13.2.1 扩展输出口 231
13.2.2 扩展输入口 233
13.3 可编程外围定时器芯片8253 235
13.3.1 8253内部结构和引脚 235
13.3.2 8253的工作方式和控制字 237
13.3.3 8253与8051单片机的接口和编程 239
13.4.1 8155芯片的结构和引脚 243
13.4 可编程接口芯片8155 243
13.4.2 8155芯片的命令字、状态字 245
13.4.3 8155与8051的接口和编程 247
13.5 实时时钟/日历芯片PCF8583 249
13.5.1 I2C总线 249
13.5.2 PCF8583时钟日历芯片 251
13.5.3 PCF8583的应用 257
第14章 C51的输入编程 263
14.1 开关量的输入 263
14.1.2 开关量输入实例 264
14.1.1 开关量输入要解决的问题 264
14.2 计数器的设计 266
14.3 用单线数字温度传感器DS18B20实现温度测量 268
14.3.1 DS18B20概述 269
14.3.2 DS18B20应用实例 273
14.4 AD7715数据采集 277
14.4.1 AD7715概述 277
14.4.2 AD7715应用实例 284
第15章 C51的输出编程 288
15.1 开关量的输出 288
15.1.1 开关量输出一般结构 288
15.1.2 开关量输出实例 288
15.2 DA接口 290
15.2.1 MAX532概述 290
15.2.2 MAX532的应用 292
16.1 键盘程序设计 296
16.1.1 键盘的类型 296
第16章 单片机人机交互C51程序设计 296
16.1.2 键盘输入程序的设计方法 297
16.2 LCD液晶显示器 299
16.2.1 液晶显示器的结构和工作原理 299
16.2.2 LCD液晶显示器的驱动 299
16.2.3 LCD显示模块 299
第17章 用8051单片机实现CAN总线接口模块 310
17.1 开发背景 310
17.2 角控制器执行机构结构分析及模块设计思路 311
17.3 硬件设计 312
17.3.1 CAN总线接口部分 313
17.3.2 CPU、复位芯片、电源管理及地址译码 318
17.3.3 I/O接口部分 322
17.4 软件设计 326
17.4.1 CAN总线通信程序 326
17.4.2 看门狗芯片初始化程序 334
17.4.3 I/O管理函数 335
17.4.4 控制算法程序 336
17.4.5 模块程序清单 337
17.5 小结 352
附录A 具有51内核的单片机 353
A.1 MCS-51系列单片机 353
A.2 AT89系列单片机 353
A.3 DALLAS DS80C320单片机 354
A.4 WINBOND W78C31单片机 354
附录B C51库函数 355
C.2 编译命令行 363
C.1 简介 363
附录C C51编译命令行控制选项和控制伪命令 363
C.2.1 一次性使用的编译控制伪指令 364
C.2.2 可多次使用的编译控制伪指令 371
附录D C51编译器使用错误提示 375
D.1 致命错误 375
D.2 语法及语义错误 377
D.2.1 错误格式 377
D.2.2 错误信息及可能发生的原因 377
E.2 L51警告 389
附录E L51连接定位器使用错误提示 389
E.1 前言 389
E.3 L51错误 391
E.4 L51致命错误 393
E.5 异常信息 395
附录F C51的极限值 397
附录G QTH仿真开发系统使用指南 398
G.1 QTH仿真器系统设置 398
G.2 QTH-8052F系统设置 399
G.3 QTH调试器的主窗口 400
G.4 基本调试技巧 401
G.4.1 装入代码进行反汇编调试 401
G.4.2 使用源程序窗口调试程序 401
G.4.3 查看内存单元内容 406
G.5 源程序的编译及连接 408
G.5.1 源程序的编译及连接 408
G.5.2 创建工程文件 408