0 绪论 1
1 计算机中的数和码 4
1.1 有限字长的二进制数 4
1.1.1 二进制数 4
1.1.2 数制及其表示方法 5
1.1.3 有限字长的二进制数 5
1.1.4 常用术语解释 5
1.3 带符号二进制数的表示及其运算 6
1.3.1 带符号数的表示方法 6
1.2 十进制数到二进制数的转换 6
1.3.2 补码到真值的转换 8
1.3.3 补码的运算 8
1.4 溢出及运算的有效性 9
1.4.1 无符号数与带符号数的溢出条件 9
1.4.2 进位标志CY与溢出标志OV 10
1.5 BCD码 11
1.6 ASCII码 11
2.1.3 非运算 12
2.1.2 或运算 12
2.1 逻辑电路 12
2 常用数字电路 12
2.1.1 与运算 12
2.1.4 异或门 13
2.1.5 累加器 13
2.2 译码电路 13
2.2.1 地址译码 13
2.2.2 7段数码管显示、译码 14
2.2.3 简单的实验元件 14
2.3.2 锁存器 15
2.3 时序电路 15
2.3.1 触发器 15
2.3.3 分频器与计数器 16
2.4 三态门和总线驱动 16
2.4.1 三态门 16
2.4.2 总线驱动 17
2.5 数字电路设计中采用的先进技术 17
2.5.1 PROM/PAL/GAL 17
2.5.2 CPLD/FPGA 18
2.5.3 数字系统中硬件方法与软件方法的特点与联系 19
3 微处理器 20
3.1 微处理器系统的组成 20
3.2 总线及总线时序 21
3.3 关于微处理器的基本概念 23
3.3.1 微控制器 23
3.3.2 嵌入式微处理器 23
3.4.1 指令 24
3.4.2 指令的编码 24
3.4 CPU的指令系统 24
3.4.3 指令系统 25
3.4.4 指令的微操作 25
3.4.5 指令的重叠执行 26
3.4.6 执行速度方面的指标 26
3.4.7 精简指令计算机 26
3.5 CPU中的寄存器 26
3.5.1 寄存器与程序运行 27
3.5.2 堆栈及堆栈指示器 28
4.1.2 半导体存储器的结构 30
4.1.1 内存与外存 30
4 存储器与存储管理 30
4.1 存储器概述 30
4.1.3 只读存储器 31
4.1.4 随机访问存储器 32
4.1.5 内存的主要性能指标 32
4.1.6 新型存储器 33
4.2 存储器的组织 33
4.2.1 存储器映像 33
4.2.2 存储器的地址空间 34
4.2.3 哈佛结构 34
4.3 存储管理 35
4.3.1 逻辑地址与物理地址 35
4.3.2 存储器的段式管理 35
4.3.3 存储器的页式管理 35
4.3.4 保护 36
4.4 存储器扩展中的总线连接 36
4.4.3 32位字长存储器的扩展 37
4.4.1 8位字长存储器的扩展 37
4.4.2 16位字长存储器的扩展 37
4.4.4 Cache高速缓冲技术 38
5 计算机的输入/输出 40
5.1 输入/输出的概念 40
5.1.1 外部设备 40
5.1.2 接口(Interface)与接口技术 40
5.1.3 端口地址(Port Address) 40
5.1.4 端口及其编址方法 41
5.2.2 中断概述 42
5.2 输入/输出的数据传输方式 42
5.2.1 程序传送方式 42
5.2.3 中断传送方式 43
5.2.4 DMA方式的数据传送 44
5.3 常用数字接口部件 45
5.3.1 定时器/计数器 45
5.3.2 并行口和串行口 46
5.3.3 I2C和SPI 46
6.1 MCS-51系列微控制器概述 47
6 MCS-51系列微控制器 47
6.2.1 运算器 48
6.2 CPU结构 48
6.2.2 布尔处理机 49
6.2.3 控制器 49
6.3 MCS-51的存储器组织 51
6.3.1 程序存储器 52
6.3.2 内部数据存储器 53
6.3.3 特殊功能寄存器 54
6.4 MCS-51系列微控制器的引脚功能P0~P3 56
6.3.4 外部数据存储器和I/O 56
6.4.1 P1口的内部结构 57
6.4.2 P3口的内部结构 58
6.4.3 P2口 59
6.4.4 P0口 59
6.5 单片方式以及总线扩展方式 59
6.5.1 单片方式 59
6.5.2 应用示例 60
6.5.3 单片机的总线扩展 61
7 MCS-51指令系统 62
7.1 MCS-51指令概述 62
7.1.1 指令分类 62
7.1.2 书写格式与缩略符 62
7.1.3 寻址方式 63
7.2 数据传送类指令 65
7.2.1 内部数据传送指令 65
7.2.2 栈操作指令 66
7.2.3 外部数据传送指令 67
7.3 运算类指令 68
7.4 逻辑运算类指令 70
7.5 控制类指令 72
7.5.1 程序转移指令 73
7.5.2 子程序调用和返回指令 77
7.6 位操作指令 79
7.6.1 位操作与位地址 79
7.6.3 位状态控制指令 80
7.6.2 位传送指令 80
7.6.4 位逻辑运算指令 81
7.6.5 基于位测试的控制转移指令 81
8 汇编语言程序设计 82
8.1 汇编语言语句结构 82
8.1.1 程序行的组成 82
8.1.2 宏汇编中的常数 83
8.1.3 宏汇编中的表达式 83
8.2.1 段定义伪指令 84
8.2 伪指令 84
8.2.2 符号定义伪指令 85
8.2.3 存储单元定义并初始化 86
8.2.4 保留地址伪指令 87
8.2.5 模块连接伪指令 89
8.2.6 其他伪指令 89
8.3 常用程序设计方法 90
8.3.1 最大值、最小值问题 91
8.3.2 多分支转移问题 92
8.3.3 二进制数据转为BCD码的问题 94
8.4.1 ASM-51编程环境下的文件类型 97
8.4 模块化程序设计 97
8.4.2 各种文件的关系及生成流程 98
8.4.3 由两个模块构成的程序示例 98
8 MCS-51的定时器/计数器与中断系统 102
9.1 MCS-51的定时器/计数器 102
9.1.1 定时器/计数器的结构 102
9.1.2 定时器/计数器的工作方式 103
9.1.3 定时器/计数器T0和T1的应用实例 107
9.2 增强型MCS-51的T2定时器 111
9.2.1 控制寄存器 112
9.2.2 T2的16位自动装载方式 112
9.2.3 T2的16位捕获方式 113
9.2.4 T2的波特率发生器方式 114
9.3 MCS-51的中断系统 115
9.3.1 中断源 115
9.3.2 中断源的屏蔽 116
9.3.3 中断的优先级 116
9.3.4 中断向量 117
9.3.5 中断响应的条件和过程 118
9.3.6 中断服务程序的特点和编写要求 119
9.3.7 数码管动态显示技术 120
9.3.8 定时器应用的其他示例 126
10 MCS-51的串行通信 128
10.1 串行通信基本概念 128
10.1.1 通信方式 128
10.1.3 异步串行通信的常用物理标准 130
10.1.2 串行通信的波特率 130
10.2 MCS-51的串行通信控制器 131
10.2.1 串行通信相关特殊功能寄存器用法介绍 132
10.2.2 串行口的工作方式 133
10.3 串行通信控制器的应用 137
10.3.1 移位寄存器方式应用举例 137
10.3.2 串行通信的应用举例 140
10.3.3 接收中断的循环缓冲区 148
10.3.4 多机通信的中断接收 149
11.1 MCS-51系统的时钟和复位电路 152
11.1.1 时钟电路 152
11 MCS-51的总线 152
11.1.2 复位电路 153
11.2 MCS-51的总线 155
11.2.1 总线的构成 155
11.2.2 总线的时序 156
11.3 应用举例 162
11.4 存储器访问中的等待 163
12.1.1 存储器结构 164
12.1 存储器扩展 164
12 MCS-51的存储器扩展电路 164
12.1.2 存储器的地址容量扩展 165
12.1.3 译码电路 166
12.1.4 存储器在实际应用中的技巧 168
12.1.5 存储器的时序要求 169
12.2 程序存储器扩展 171
12.2.1 扩展示例 171
12.2.2 微控制器的ISP、IAP概要介绍 174
12.3 扩充数据存储器 174
12.4 DS12C887B日历时钟的扩展 180
12.5 集成的扩展数据存储器 186
13 I/O接口电路及其扩展 187
13.1 简单并行口扩展 187
13.1.1 简单的并行口输入 187
13.1.2 带锁存的并行口输入 188
13.1.3 简单的并行口输出 189
13.2 8255通用可编程并行接口芯片 190
13.2.1 8255简介 190
13.2.2 8255的工作说明 192
13.2.3 8255与MCS-51总线的接口和编程 194
13.3 8253可编程外围定时器/计数器 198
13.3.1 8253的内部结构和引脚 198
13.3.2 8253的控制字和工作方式 199
13.3.3 8253与MCS-51总线的接口和编程 202
13.4 SC16C2552通用UART通信控制器 205
13.4.1 SC16C2552的功能描述 205
13.4.2 芯片的引脚功能和内部结构 205
13.4.3 SC16C2552的寄存器 207
13.4.4 SC16C2552的扩展电路 211
13.4.5 SC16C2552的编程举例 212
13.5 液晶点阵屏的接口设计 216
14 模拟量的输入和输出 219
14.1 D/A转换器 219
14.1.1 D/A转换器的基本原理 219
14.1.2 D/A转换器的主要技术指标 221
14.2 D/A的应用电路 221
14.2.1 D/A电路的单极性和双极性设计 221
14.2.2 DAC0832 223
14.2.3 12位DAC7541A接口电路 225
14.3 A/D转换器 227
14.3.1 A/D转换器原理 227
14.3.2 A/D转换器的主要技术指标 229
14.4 典型A/D转换器的接口设计 230
14.4.1 8位8通道ADC0809及其应用 230
14.4.2 12位AD574B及其应用 234
15 C51高级语言编程 239
15.1 C51的数据类型 239
15.3.1 存储区域 240
15.2 Keil C51扩展关键字 240
15.3 存储区域与存储模式 240
15.3.2 存储模式 242
15.3.3 指针变量 242
15.3.4 绝对地址访问 243
15.4.2 函数参数与返回值 244
15.4.3 函数的寄存器组 244
15.4.4 中断函数 244
15.4.1 函数的声明 244
15.4 C51的函数 244
15.5 C51模块化程序设计 245
15.6 C51与ASM-51宏汇编语言的混合编程 250
15.6.1 函数名的转换 250
15.6.2 参数传递 250
15.6.3 函数的返回值 252
15.6.4 C语言和汇编语言的接口示例 253
16 Keil 51应用基础 255
16.1 μVision2的界面 255
16.2.1 编辑一个汇编语言程序 256
16.2 编辑源程序文件 256
16.2.2 编辑一个C语言程序 257
16.3 创建工程文件 258
16.3.1 新建工程 258
16.3.2 打开已存在的工程 263
16.4 汇编/编译和链接 263
16.5 程序调试功能 264
16.5.1 进入调试模式 265
16.5.2 单步执行 265
16.5.4 断点设置 266
16.5.3 在线汇编 266
16.5.5 观察窗口 267
16.5.6 储存器窗口 267
16.5.7 串行窗口 267
16.5.8 性能分析窗口 268
16.6 实例分析 268
16.6.1 实例一 268
16.6.2 实例二 269
16.7 在线仿真调试功能 274
17.1 8086/8088微处理器 276
17 8086/8088微处理器体系结构 276
17.2 8086指令系统 283
17.2.1 8086的寻址方式 284
17.2.2 8086指令系统概要 286
17.2.3 数据传送指令 287
17.2.4 算术运算指令 288
17.2.5 逻辑运算和移位循环指令 290
17.2.6 串操作指令 291
17.2.7 控制转移类指令 293
17.2.8 处理器控制指令 298
17.3 DOS功能调用 299
17.4 8086的I/O与中断系统 301
17.4.1 I/O接口 301
17.4.2 等待电路 303
17.4.3 8086的中断 303
17.4.4 8086的硬件中断 305
17.4.5 8086的中断管理 306
习题 312
参考文献 320