第1篇 汇编语言程序设计 1
引言 1
第1章 深刻理解51单片机的指令系统 3
1.1 概述 3
1.2 单片机指令级逻辑结构 4
1.3 单片机的典型存储结构 8
1.4 指令系统分析 9
1.4.1 指令体系结构 9
1.4.2 指令级计算机的工作机理 10
1.4.3 指令级数据表示 14
1.5 指令编码 17
1.6 寻址方式 20
1.7 指令功能分析 22
1.7.1 数据传送类指令 22
1.7.2 算术运算类指令 25
1.7.3 逻辑运算类指令 26
1.7.4 控制转移类指令 28
1.7.5 位操作类指令 31
1.7.6 控制转移指令的复合应用 34
第2章 查表和散转程序设计技术 40
2.1 查表程序设计技术 40
2.1.1 查表编程概述 40
2.1.2 基本查表编程技术 41
2.1.3 扩展查表编程技术 42
2.1.4 扩展数据表查表编程技术 43
2.1.5 数据表元素扩展查表编程技术 44
2.2 散转程序设计技术 45
2.2.1 应用软件的整体构造 45
2.2.2 散转基本编程技术 47
2.2.3 散转程序的扩展编程技术 49
2.2.4 基本查表散转程序编程技术 50
2.2.5 标记查表法散转程序编程技术 51
2.3 AT24XX系列存储芯片编程 54
2.3.1 AT24系列存储芯片的特性 54
2.3.2 AT24系列芯片的读/写操作 55
第3章 中断程序和单片机软件抗干扰程序设计技术 59
3.1 中断概述 59
3.2 中断的基本编程技术 61
3.3 “定时查询”中断扩展编程技术 63
3.4 中断的“外部中断查询”扩展技术 65
3.5 中断编程实例 66
3.6 单片机软件抗干扰技术概述 70
3.7 抗系统“死循环”技术 71
3.7.1 基本软件看门狗技术 71
3.7.2 高级软件看门狗技术 72
3.8 抗系统“跑飞”干扰技术 75
3.8.1 指令冗余法 75
3.8.2 软件陷阱技术 76
第4章 定时/计数器编程技术 77
4.1 软件定时器设计技术 77
4.1.1 软件定时器的应用原理 77
4.1.2 软件定时器的设计 78
4.1.3 软件定时器的应用实例 80
4.2 硬件定时器设计技术 81
4.2.1 硬件定时/计数器的工作机理 81
4.2.2 实时定时/计数器的编程 83
4.3 超长时间实时定时器编程技术 87
4.4 单片机计时综合应用编程实例 88
4.5 软件运行时间分析 93
4.6 DS1302时钟芯片的应用 97
第5章 显示接口编程技术 105
5.1 LED的显示驱动 105
5.2 独立式LED显示器 106
5.2.1 程序逻辑控制法 107
5.2.2 查表逻辑控制法 107
5.3 LED矩阵显示器 109
5.3.1 程序逻辑控制法 110
5.3.2 查表逻辑控制法 111
5.4 数码管显示器 113
5.4.1 数码显示器静态工作编程模式 116
5.4.2 数码显示器动态工作编程模式 118
5.5 液晶显示器驱动编程 120
5.6 显示编程应用实例 127
第6章 键盘接口编程技术 134
6.1 常用键盘的结构 134
6.1.1 独立式键盘 134
6.1.2 行列式键盘 135
6.2 独立式键盘接口的通用编程模式 137
6.3 行列式键盘接口的通用编程模式 138
6.3.1 扫描法 139
6.3.2 反转法 141
6.4 键盘接口的工作方式 143
6.4.1 键盘完全监控工作方式 144
6.4.2 键盘中断工作方式 144
6.5 键盘编程实例 146
第7章 汇编语言编码风格 156
7.1 汇编伪指令 156
7.2 汇编编码风格 160
7.2.1 软件格式 160
7.2.2 符号约定 165
7.3 模块化程序设计 169
7.4 汇编程序设计范例 174
第2篇 C51程序设计 203
引言 203
第8章 C51语言基础 204
8.1 C语言概况 204
8.2 C51语言的特点 206
8.3 C51程序的组成 210
8.4 C51源程序的基本语法 218
8.5 Keil的基本使用 222
8.6 单片机程序设计方法 230
8.6.1 程序设计基本方法 230
8.6.2 结构化程序设计 231
第9章 C51程序设计基础 240
9.1 程序的输入/输出 240
9.2 C51数据类型 245
9.3 伪随机数发生器 249
9.4 C51运算符 257
9.5 ANSIC标准测试 260
9.6 C51程序的基本设计技巧 261
第10章 C51编码风格 266
10.1 编码风格概述 266
10.2 编码风格实例解释 266
10.2.1 源码组织实例 267
10.2.2 实例源码分析 269
10.3 标识符命名法 283
10.3.1 匈牙利法 283
10.3.2 骆驼法 284
10.3.3 下划线法 284
10.3.4 标识符缩写 285
10.3.5 变量命名原则 285
10.4 源代码的组织方式 287
10.4.1 基本方式 287
10.4.2 功能分组方式 288
10.4.3 人名分组方式 299
第11章 数组、结构与指针 300
11.1 概述 300
11.2 数组 301
11.2.1 一维数组 301
11.2.2 多维数组 308
11.2.3 数组作函数的参数 310
11.3 结构 311
11.3.1 结构定义 311
11.3.2 结构变量的声明 313
11.3.3 关键字typedef的用法 314
11.3.4 结构变量的引用 315
11.3.5 结构变量初始化 315
11.4 结构数组 316
11.4.1 结构数组的定义 316
11.4.2 结构数组的应用 318
11.4.3 结构数组的引用 319
11.4.4 结构作函数参数 319
11.5 指针 321
11.5.1 指针概念 321
11.5.2 指针的应用 322
11.6 指针应用 327
11.6.1 数组指针 327
11.6.2 结构指针 329
11.6.3 函数指针 332
11.6.4 指针型指针 336
第12章 C51编程模式及程序测试 338
12.1 增量式编程模式 338
12.1.1 选择排序模块的实现 339
12.1.2 希尔排序模块的实现 342
12.1.3 快速排序的实现 346
12.2 排序系统源码的组织方式 350
12.2.1 源代码的人名组织方法 350
12.2.2 头文件编制 351
12.3 C51程序调试 356
12.3.1 C51调试环境设置 356
12.3.2 基本调试功能(技术) 358
12.4 C51程序的排错 367
12.5 C51程序的测试 375
12.5.1 黑盒法 375
12.5.2 白盒法 383
第13章 C51混合编程技术 386
13.1 参数传递 386
13.2 C51中的“段” 388
13.3 应用实例 392
13.3.1 无参混合编程(精确延时) 393
13.3.2 有参混合编程(硬件驱动) 398
13.3.3 指针参数混合编程 412
第14章 程序切换技术 422
14.1 软件系统运行管理 422
14.1.1 程序切换 422
14.1.2 系统堆栈 423
14.2 子程序切换 424
14.2.1 子程序切换原理 424
14.2.2 子程序的应用 426
14.2.3 系统堆栈的讨论 427
14.2.4 堆栈的应用―现场切换 428
14.3 函数切换 429
14.3.1 C51函数工作原理 430
14.3.2 C51函数扩展 432
14.3.3 软件堆栈(模拟堆栈) 434
14.4 中断切换 437
14.4.1 中断工作机理 437
14.4.2 中断现场保护 439
14.4.3 C51中断编程 440
14.5 任务切换 442
14.5.1 任务的特点 442
14.5.2 任务的组成原理 443
14.5.3 任务的工作机制 444
参考文献 447
编后记 448