单片机原理与应用 C51语言版
作者:欧伟明
出版时间:2019年版
内容简介
本书以89S51 为典型机,主要论述单片机的基本结构与工作原理,以及单片机应用系统的设计与开发方法。全书内容分为13 章,内容包括概述、单片机的结构和工作原理、指令系统、单片机C51 语言程序设计基础、中断系统、定时器/计数器、单片机的串行口UART、单片机常用并行接口技术、串行总线接口技术、单片机应用系统开发环境、基于嵌入式实时操作系统的单片机程序设计方法、基于RTX51的乐曲编辑器和发生器设计、数控电流源设计。书后附录给出了18 个单片机课程设计课题,以及单片机89S51 的指令系统。本书从工程应用出发,突出单片机应用技术的新颖性和实用性;此外,本书为任课教师免费提供电子课件。
目录
第1章 概述 1
1.1 单片机概念与发展过程 1
1.1.1 单片机概念 1
1.1.2 单片机技术发展过程 1
1.1.3 单片机技术发展方向 3
1.1.4 常用数制与编码 4
1.2 单片机应用领域与嵌入式系统概念 5
1.2.1 单片机应用领域 6
1.2.2 嵌入式系统概念 6
1.3 单片机应用系统开发过程简述 8
1.3.1 单片机编程语言 8
1.3.2 单片机应用系统结构 9
1.3.3 单片机应用模式 10
1.3.4 单片机应用系统开发过程简介 11
1.4 本书特点与教材使用建议 12
1.4.1 本书编写指导思想 13
1.4.2 本书特点 15
1.4.3 教材使用建议 16
1.5 本章小结 18
1.6 思考题与习题 19
第2章 单片机的结构和工作原理 20
2.1 MCS-51系列单片机概述 20
2.2 89S51单片机引脚功能说明 21
2.2.1 89S51的引脚图与封装 21
2.2.2 89S51的引脚功能说明 22
2.2.3 89S51的引脚应用特性 23
2.3 89S51单片机内部结构 24
2.3.1 89S51的基本组成 24
2.3.2 89S51的CPU 26
2.4 89S51单片机的存储器 28
2.4.1 程序存储器 29
2.4.2 数据存储器 29
2.5 89S51单片机的时钟电路与时序 32
2.5.1 时钟电路 32
2.5.2 基本时序单位 33
2.6 89S51单片机的工作方式 35
2.6.1 复位工作方式和复位电路 35
2.6.2 低功耗工作方式 36
2.6.3 串行ISP编程方式 37
2.7 89S51单片机的输入/输出端口 38
2.7.1 P0端口 38
2.7.2 P1端口 39
2.7.3 P2端口 40
2.7.4 P3端口 40
2.8 本章小结 41
2.9 思考题与习题 42
第3章 指令系统* 43
3.1 MCS-51单片机指令概述 43
3.1.1 指令格式 43
3.1.2 符号说明 44
3.2 寻址方式 45
3.2.1 寄存器寻址方式 45
3.2.2 直接寻址方式 45
3.2.3 寄存器间接寻址方式 46
3.2.4 立即寻址方式 46
3.2.5 变址寻址方式 46
3.2.6 相对寻址方式 47
3.2.7 位寻址方式 47
3.3 89S51单片机的指令系统 47
3.3.1 数据传送类指令 47
3.3.2 算术运算类指令 50
3.3.3 逻辑运算及移位类指令 53
3.3.4 控制转移类指令 54
3.3.5 位操作类指令 56
3.4 单片机汇编语言简介 58
3.4.1 汇编语言的语句格式 58
3.4.2 伪指令 59
3.4.3 单片机汇编语言程序设计 60
3.5 本章小结 63
3.6 思考题与习题 63
第4章 单片机C51语言程序设计基础 65
4.1 单片机C51语言概述 65
4.1.1 C51语言在单片机应用系统开发中的优势 65
4.1.2 C51语言与标准C语言的比较 65
4.1.3 编写C51语言程序的基本原则 66
4.2 C51语言关键字与数据类型 67
4.2.1 标识符 67
4.2.2 关键字 68
4.2.3 数据类型 69
4.3 C51语言数据 71
4.3.1 常量 71
4.3.2 变量 72
4.3.3 存储器类型和存储器模式 72
4.3.4 数组 74
4.3.5 指针 75
4.4 C51语言对单片机硬件资源的控制 76
4.4.1 特殊功能寄存器(SFR)的定义 76
4.4.2 位变量的定义 77
4.4.3 存储器和外接I/O端口的绝对地址访问 78
4.5 C51语言运算符和表达式 79
4.5.1 运算符 79
4.5.2 表达式 81
4.6 C51语言流程控制语句 81
4.6.1 语句的概念和分类 81
4.6.2 判断分支(if、switch语句) 82
4.6.3 循环控制(for、while语句) 84
4.6.4 break、continue、return、goto语句 85
4.7 C51语言函数 86
4.7.1 函数的定义 87
4.7.2 函数的调用 88
4.7.3 C51语言中断函数 89
4.8 C51语言预处理命令 90
4.8.1 文件包含 90
4.8.2 宏定义 90
4.8.3 条件编译 91
4.9 C51语言与汇编语言混合编程方法 91
4.9.1 C51语言程序嵌入汇编语句 92
4.9.2 C51语言程序调用汇编语言子程序 93
4.10 本章小结 94
4.11 思考题与习题 95
第5章 中断系统 96
5.1 中断 96
5.1.1 中断的概念 96
5.1.2 中断的条件和中断响应过程 97
5.2 89S51中断系统结构与控制 98
5.2.1 89S51的中断源和中断入口地址 98
5.2.2 89S51的中断系统结构 99
5.2.3 中断控制 100
5.3 中断应用举例 105
5.3.1 单外部中断源系统的设计 105
5.3.2 多外部中断源系统的设计 106
5.4 本章小结 107
5.5 思考题与习题 108
第6章 定时器/计数器 109
6.1 定时器/计数器的结构与控制 109
6.1.1 89S51定时器/计数器的结构 109
6.1.2 定时器/计数器的控制 110
6.2 定时器/计数器的4种工作方式 111
6.2.1 工作方式1 111
6.2.2 工作方式2 112
6.2.3 工作方式3 113
6.2.4 工作方式0 115
6.3 定时器/计数器的应用举例 115
6.3.1 脉冲信号的产生 115
6.3.2 脉冲宽度的测量 116
6.4 本章小结 117
6.5 思考题与习题 117
第7章 单片机的串行口UART 119
7.1 串行通信概述 119
7.1.1 串行通信与并行通信 119
7.1.2 串行通信的分类 119
7.1.3 串行通信的数据传送方式 121
7.2 89S51串行口UART的结构与控制 122
7.2.1 串行口UART的结构 122
7.2.2 串行口UART的工作方式 124
7.2.3 串行口UART的波特率计算 126
7.3 串行口UART的编程及应用实例 128
7.3.1 串行口UART的编程步骤 128
7.3.2 串行口UART应用实例 128
7.4 本章小结 131
7.5 思考题与习题 131
第8章 单片机常用并行接口技术 133
8.1 键盘接口 133
8.1.1 独立按键 134
8.1.2 矩阵键盘 136
8.2 LED显示器接口 141
8.2.1 LED数码管 141
8.2.2 LED数码管静态显示接口 142
8.2.3 LED数码管动态显示接口 144
8.3 DAC接口 147
8.3.1 DAC0832芯片介绍 147
8.3.2 DAC0832与89S51的接口电路 148
8.3.3 利用DAC0832输出各种电压波形 149
8.4 ADC接口 151
8.4.1 ADC0809芯片介绍 151
8.4.2 ADC0809与89S51的接口电路 153
8.4.3 ADC0809应用举例 154
8.5 液晶显示模块LCD1602的接口 155
8.5.1 LCD1602介绍 155
8.5.2 LCD1602与89S51的接口电路 160
8.5.3 LCD1602应用举例 161
8.6 外部并行三总线接口 164
8.7 大功率器件驱动接口 165
8.7.1 光耦接口 166
8.7.2 继电器接口 166
8.7.3 双向晶闸管输出接口 167
8.7.4 固态继电器输出接口 168
8.8 本章小结 169
8.9 思考题与习题 169
第9章 串行总线接口技术 170
9.1 EIA系列总线标准及其接口 170
9.1.1 RS-232C总线 170
9.1.2 RS-485总线 172
9.1.3 单片机与PC之间的通信 174
9.2 SPI总线 176
9.2.1 SPI总线简介 176
9.2.2 SPI总线通信协议 177
9.2.3 E2PROM存储器AT93C46及其应用 177
9.3 I2C总线 180
9.3.1 I2C总线简介 180
9.3.2 I2C总线通信协议 181
9.3.3 I2C接口存储器AT24C02及其应用 183
9.4 1-Wire单总线 191
9.4.1 1-Wire单总线简介 191
9.4.2 温度传感器DS18B20及其应用 193
9.5 USB总线 198
9.5.1 USB总线原理 198
9.5.2 USB总线通信接口设计实例 200
9.6 CAN总线 202
9.6.1 CAN总线简介 203
9.6.2 CAN总线控制器 204
9.6.3 CAN总线通信接口设计实例 204
9.7 本章小结 205
9.8 思考题与习题 206
第10章 单片机应用系统开发环境 207
10.1 单片机应用系统的调试方法 207
10.1.1 硬件调试方法 207
10.1.2 软件仿真调试方法 209
10.2 Keil μVision4集成开发环境 210
10.2.1 Keil μVision4的主要特性 210
10.2.2 Keil μVision4集成开发环境设置方法 211
10.2.3 Keil μVision4工程应用 216
10.2.4 Keil C51主要头文件介绍 226
10.3 Proteus 8仿真软件 228
10.3.1 Proteus 8主界面介绍 228
10.3.2 Proteus 8绘制电路原理图 230
10.3.3 Proteus 8仿真调试 232
10.4 单片机应用系统开发小工具 233
10.4.1 波特率初值计算工具 233
10.4.2 数码管编码器 233
10.4.3 定时器计算工具 234
10.4.4 串口调试助手 234
10.5 本章小结 235
10.6 思考题与习题 236
第11章 基于嵌入式实时操作系统的单片机程序设计方法 237
11.1 嵌入式实时操作系统的概念 237
11.1.1 嵌入式系统的特征 237
11.1.2 嵌入式实时操作系统的概念 238
11.2 在电子系统设计中引入RTOS的意义 238
11.2.1 两种软件开发模式的比较 239
11.2.2 嵌入式应用中使用嵌入式RTOS的必要性 239
11.2.3 嵌入式操作系统环境下的应用软件设计 240
11.2.4 嵌入式操作系统环境下的应用软件调试 241
11.3 嵌入式实时操作系统RTX51的介绍 241
11.3.1 RTX51的技术参数 241
11.3.2 几个概念 242
11.3.3 RTX Tiny内核分析 245
11.3.4 RTX Tiny内核源代码 249
11.4 基于RTX51的单片机程序设计方法 251
11.4.1 目标系统需求 251
11.4.2 软件设计指导方针 251
11.4.3 任务划分的原则 252
11.4.4 应用程序架构 254
11.5 本章小结 256
11.6 思考题与习题 256
第12章 基于RTX51的乐曲编辑器和发生器设计 257
12.1 设计任务 257
12.2 方案设计与论证 257
12.2.1 以FPGA为核心的实现方案 257
12.2.2 以MCU为核心的实现方案 257
12.3 系统硬件设计 258
12.3.1 系统硬件电路原理图 258
12.3.2 人机交互界面 259
12.4 基于RTX51的系统软件设计 260
12.4.1 乐曲的表示方法 260
12.4.2 编辑乐曲的软件实现方法 261
12.4.3 播放乐曲的软件实现方法 262
12.4.4 系统软件流程框图 264
12.5 系统源程序清单 265
12.5.1 C51语言主程序 265
12.5.2 读AT24C02汇编语言子程序 276
12.5.3 写AT24C02汇编语言子程序 279
12.5.4 键盘扫描汇编语言子程序 281
12.5.5 实时操作系统RTX51 Tiny内核程序 283
12.6 系统设计总结 283
第13章 数控电流源设计 284
13.1 设计任务 284
13.2 方案设计与论证 284
13.2.1 D/A转换模块设计方案的论证与比较 285
13.2.2 恒流源模块设计方案的论证与比较 285
13.2.3 数据采集模块设计方案的论证与比较 286
13.2.4 辅助电源、主电源设计方案的论证与比较 287
13.2.5 键盘、显示器设计方案的论证与比较 288
13.3 理论计算与EWB仿真 288
13.3.1 采样电阻值的确定 288
13.3.2 D/A转换器分辨率的确定 289
13.3.3 TLC5618参考电压的确定 289
13.3.4 主电源参数的确定 289
13.3.5 用EWB进行电路仿真 289
13.4 系统硬件设计 291
13.4.1 MCU微控制器、键盘、显示器电路图 291
13.4.2 D/A转换模块、恒流源模块的电路图 291
13.4.3 数据采集模块的电路图 294
13.4.4 辅助电源、主电源的电路图 294
13.5 系统软件设计 298
13.5.1 主程序流程框图 298
13.5.2 设置输出电流给定值功能函数程序流程框图 299
13.5.3 设置电流步进值功能函数程序流程框图 299
13.5.4 键盘扫描程序流程框图 300
13.6 系统测试方法与结果分析 300
13.6.1 测试使用的仪器 300
13.6.2 恒流特性的测试 301
13.6.3 电流步进值为1mA的测试 301
13.6.4 纹波电流的测试 302
13.6.5 输出电流范围的测试 302
13.6.6 输出电压的测试 302
13.6.7 1~99mA内任意电流步进值设置功能的测试 303
13.6.8 测试结果分析 303
13.7 系统使用说明书 303
13.7.1 键盘界面 304
13.7.2 菜单操作 305
13.8 系统源程序清单 305
13.8.1 C51语言主程序 305
13.8.2 键盘扫描汇编语言子程序 316
13.8.3 写TLC5618的汇编语言子程序 318
13.8.4 读MC14433的汇编语言子程序 319
13.8.5 显示缓冲器的汇编语言子程序 320
13.9 系统设计总结 321
附录A 单片机课程设计 322
附录B 89S51指令表 331