第1章 C51单片机的组成及结构 1
1.1 C51单片机的内部结构 1
1.2 C51单片机的CPU结构 3
1.2.1 运算器 3
1.2.2 布尔处理机 4
1.2.3 控制部件及振荡器 4
1.3 C51单片机的存储器空间 5
1.3.1 存储器的基本知识 5
1.3.2 C51单片机的存储器 6
1.3.2.1 数据存储器 7
1.3.2.2 程序存储器 12
1.4 C51单片机的并行输入/输出端口 12
1.4.1 P0口 13
1.4.2 P1口 14
1.4.3 P2口 15
1.4.4 P3口 15
1.4.5 四个并行口使用的注意事项 16
1.5 C51单片机的引脚信号和CPU时序 16
1.5.1 C51单片机引脚功能说明 17
1.5.2 复位电路 18
1.5.3 CPU时序 20
1.6 C51单片机的工作方式 22
1.6.1 复位方式 22
1.6.2 程序执行方式 22
1.6.3 掉电保护方式 22
1.6.4 C51单片机的低功耗方式 23
习题和思考题 23
第2章 C51单片机的指令系统 24
2.1 C51单片机的指令系统概述 24
2.2 C51单片机的寻址方式 26
2.2.1 立即寻址 27
2.2.2 寄存器寻址 27
2.2.3 寄存器间接寻址 27
2.2.4 直接寻址 28
2.2.5 变址寻址 28
2.2.6 相对寻址 29
2.2.7 位寻址 29
2.2.8 寻址方式总汇 29
2.3 C51单片机的指令说明 30
2.3.1 数据传送类指令 30
2.3.2 算术运算类指令 35
2.3.3 逻辑运算类指令 39
2.3.4 控制转移类指令 42
2.3.5 位操作指令 48
2.4 C51单片机的伪指令 51
2.4.1 程序起始地址伪指令ORG 51
2.4.2 结束汇编伪指令END 51
2.4.3 定义字节伪指令DB 51
2.4.4 定义字伪指令DW 52
2.4.5 预留存储空间伪指令DS 52
2.4.6 等值伪指令EQU 52
2.4.7 位地址定义伪指令BIT 53
2.5 C51单片机的程序设计举例 53
2.5.1 简单程序设计 53
2.5.2 分支程序设计 53
2.5.3 循环程序设计 55
2.5.4 数据转换程序设计 55
2.5.5 查表程序设计 56
习题和思考题 56
第3章 单片机的C程序设计 58
3.1 单片机程序设计概论 58
3.1.1 单片机的C语言编程特点 59
3.1.2 C51单片机的C语言编译器 59
3.1.3 C51单片机的程序结构 59
3.2 C51的数据与运算 60
3.2.1 数据与数据类型 60
3.2.2 常量与变量 61
3.2.3 C51数据的存储类型与存储器结构 63
3.2.4 特殊功能寄存器(SFR)及其定义 65
3.2.5 并行接口及其定义 67
3.2.6 位变量(BIT)及其定义 68
3.2.7 C51运算符、表达式及其规则 69
3.3 C51流程控制语句 76
3.3.1 C语言程序的基本结构及其流程图 76
3.3.2 选择语句 79
3.3.3 循环语句 82
3.4 C51构造数据类型 87
3.4.1 数组 87
3.4.2 指针 94
3.4.3 结构 103
3.4.4 共用体 110
3.4.5 枚举 111
3.5 函数 113
3.5.1 函数的分类 114
3.5.2 函数的定义 115
3.5.3 函数的参数和函数值 117
3.5.4 函数的调用 118
3.5.5 数组/指针作为函数的参数 126
3.5.6 局部变量和全局变量 132
3.6 C51的库函数 133
3.7 编程举例 136
习题和思考题 137
第4章 C51单片机的内部资源 139
4.1 输入/输出控制方式 139
4.1.1 程序控制方式 140
4.1.2 中断控制方式 141
4.2 中断系统 143
4.2.1 中断的基本概念 143
4.2.2 中断源 143
4.2.3 中断入口地址 144
4.2.4 中断控制 145
4.2.5 中断响应 147
4.2.6 中断的程序设计 150
4.3 定时/计数器 152
4.3.1 定时/计数器的控制寄存器 153
4.3.2 定时/计数器的工作方式 154
4.3.3 定时/计数器的应用实例 160
4.4 串行通信接口 163
4.4.1 串行通信基础知识 163
4.4.2 C51串行接口 166
习题和思考题 175
第5章 C51单片机的系统扩展 176
5.1 系统扩展概述 176
5.1.1 C51单片机的最小系统 176
5.1.2 系统扩展及结构 177
5.1.3 C51单片机存储器扩展与编址技术 179
5.2 程序存储器的扩展 180
5.2.1 扩展EPROM 180
5.2.2 扩展(E2PROM) 183
5.3 数据存储器的扩展 183
5.3.1 单片数据存储器扩展 184
5.3.2 线选法多片数据存储器扩展 184
5.3.3 译码法多片数据存储器扩展 186
5.4 可编程外围并行接口8255A 187
5.4.1 8255A的引脚功能和逻辑结构 187
5.4.2 8255A的工作方式及数据I/O操作 189
5.4.3 8255A控制字及初始化 190
5.4.4 8255A与C51单片机的接口 192
5.5 可编程外围定时器8253 193
5.5.1 8253的结构和引脚 193
5.5.2 8253的工作方式和控制字 194
5.5.3 8253与C51单片机的接口 195
5.6 可编程并行接口芯片8155 198
5.6.1 8155的引脚功能和逻辑结构 198
5.6.2 8155的工作原理 199
5.6.3 8155的命令/状态字 200
5.6.4 8155的定时/计数器 201
5.6.5 8155的输入/输出口 203
5.6.6 8155与C51单片机的接口 204
5.7 I2C接口芯片AT24C01 205
5.7.1 I2C总线特点 206
5.7.2 I2C总线工作原理 206
5.7.3 AT24C01与C51的接口 207
5.8 SPI接口芯片X5045 212
5.8.1 SPI总线的组成 212
5.8.2 X5045与C51单片机的接口 213
5.9 单片机配置FPGA 218
5.9.1 FLEX10K的工作状态 219
5.9.2 FLEX10K器件的配置 219
5.9.3 主动串行模式配置FLEX10K器件 219
5.9.4 基于C51的被动串行配置FLEX10K器件 220
习题和思考题 222
第6章 C51单片机的机间串行通信 224
6.1 点对点的串行异步通信 224
6.1.1 通信双方的硬件连接 224
6.1.2 通信双方的约定 225
6.1.3 点对点通信编程 226
6.2 多机通信 228
6.2.1 通信接口 228
6.2.2 通信协议 229
6.2.3 通信程序 229
6.3 PC和单片机之间的通信方法 238
6.3.1 MSCOMM控件 238
6.3.2 编程实现 240
习题和思考题 243
第7章 C51单片机人机交互的C编程 244
7.1 键盘接口技术 244
7.1.1 独立式键盘与工作原理 244
7.1.2 行列式键盘与工作原理 246
7.1.3 键盘扫描的控制程序 248
7.2 LED数码显示技术 250
7.2.1 LED显示器的结构与原理 250
7.2.2 LED静态显示接口 251
7.2.3 LED动态扫描显示接口 252
7.3 可编程键盘/显示接口芯片8279 254
7.3.1 8279引脚和内部结构 254
7.3.2 8279的命令字和状态字 256
7.3.3 8279和C51单片机的接口 259
7.4 字符型LCD显示模块 261
7.4.1 字符型LCD的结构和引脚 261
7.4.2 显示板控制器的指令系统 262
7.4.3 LCD显示板与单片机的接口和编程 263
7.5 点阵型LCD显示模块 265
7.5.1 HD61830的特点和引脚 265
7.5.2 HD61830指令集 266
7.5.3 与内藏HD61830的液晶模块的接口和编程 269
习题和思考题 271
第8章 Keil C51上机指南 272
8.1 Keil C51软件的安装 272
8.1.1 系统需求 272
8.1.2 软件安装 273
8.2 Keil C51工程的建立及设置 274
8.2.1 Keil工程的建立 274
8.2.2 设置工程属性 278
8.3 代码编译 282
8.4 程序调试 282
8.4.1 常用调试命令 283
8.4.2 在线汇编 283
8.4.3 断点设置 284
8.5 Keil程序调试窗口 284
8.5.1 存储器窗口 285
8.5.2 观察窗口 286
8.5.3 工程窗口寄存器页 286
8.5.4 外围接口 286
8.6 Keil程序调试 287
8.6.1 片内程序模拟 287
8.6.2 仿真试验板仿真 288
8.6.3 硬件连接调试 288
习题和思考题 289
第9章 C51单片机系统综合实例 290
9.1 外部存储器综合扩展 290
9.2 系统中断程序设计 291
9.3 定时/计数器程序设计 292
9.4 串口程序设计 293
9.5 外扩并行I/O口的C语言编程 294
9.6 点阵型LCD中文显示的C语言编程 296
附录 C51单片机指令系统表 300
参考文献 302