《单片机原理及应用:C语言程序设计与实现》介绍51系列单片机的结构、基本原理、指令系统和硬件资源,重点介绍C51编程技术及其应用。《单片机原理及应用:C语言程序设计与实现》的特点是通过实例以及练习使读者掌握相应知识点,读者能够通过完整的实例,快速、有效地掌握用C51语言开发51单片机的流程,并通过各章的习题掌握各章重点和难点,真正对相关知识做到融会贯通。
《单片机原理及应用:C语言程序设计与实现》可作为高等学校计算机科学与技术、计算机应用及相关专业的教材,也可以作为相关专业人员的培训教材。
在全国高等工科院校中,已普遍开设单片机及相关课程。51系列单片机奠定了8位单片机的基础,形成了单片机的经典体系结构。随着51单片机的发展,应用C语言开发51单片机成为一种流行的趋势。《单片机原理及应用:C语言程序设计与实现》在介绍51系列单片机的硬件结构、汇编语言及单片机扩展技术的同时,着重介绍了C51编程技术及其应用。
系统介绍51单片机硬件结构
着重介绍C51编程技术及应用
配合实例讲解单片机扩展技术
随着计算机应用技术的不断发震,单片机在工业测量控制领域内的应用越来越广泛。同时,随着超大规模集成电路工艺和集成制造技术的不断完善,单片机的硬件集成度也在不断提高,出现了能满足各种不同需求的具有各种特殊功能的单片机。就8051系列单片机而言,由于Intel公司将8051 CPU内核向全世界各大半导体公司的扩散,目前已有Philips、Siemens、Dallas、OKI、Advance Micro Device、Atmel等多家公司生产了100多种型号的51系列单片机。这类单片机具有集成度高、性能价格比优良的特点,在工业测量控制领域内获得了极为广泛的应用,预计在今后的相当一个时期内,51单片机仍将是主流机种。
在开发一个单片机应用系统时,系统程序的编写效率在很大程度上决定了目标系统的研制成效。早期在研制单片机应用系统时,大多以汇编语言作为软件工具。汇编语言程序能够直接操作机器硬件。指令的执行速度快。但由于汇编语言不是一种结构化的程序设计语言,相对较难编写和调试,程序本身的编写效率较低。随着单片机硬件性能的提高,其工作速度越来越快,目前51单片机的时钟频率可达40MHz以上。因此在编写单片机应用系统程序时,更着重于程序本身的编写效率。为了适应这种要求,现在的单片机系统开发过程中,除了采用汇编语言之外,经常采用高级语言,如C51、PLM51来编程实现。
在全国高等工科院校中,已普遍开设单片机及相关课程。51系列单片机奠定了8位单片机的基础,形成了单片机的经典体系结构。随着51单片机的发展,应用c语言开发51单片机成为一种流行的趋势,这是因为它具有使用方便、编程效率高及仿真调试容易等突出特点。
本书在介绍51系列单片机的硬件结构、汇编语言及单片机扩展技术的同时,着重介绍了C51鳊程技术及其应用。C51语言是专门用于51系列单片机编程的C语言,除了一些基于描述单片机硬件的特殊部分外,可以说与标准C语言完全相同。所以以C51语言实现单片机系统更有利于系统的修改及扩展。为了体现汇编语言实现与C51编程实现的不同,本书在相关章节提供了上述两种实现方法的源程序,并进行了相关的讲解。同时本书还配有电子教案,便于教师教学和对教材内容的补充与完善。
本书由马斌、韩忠华、王长涛和夏兴华共同编写。参与本书编写工作与提供帮助的还有东北大学的孙秋野、渤船重工的王延房、北京航空航天大学的王志强、沈阳建筑大学的阎焕忠、戴敬、张万江、闵丽和王鑫以及沈阳大学的唐璐。此外,冯冬、杩艳双、迟铁参与了文字处理及图表绘制工作,在此一并表示诚挚的谢意。
第1章 51单片机结构及工作原理 1
1.1 微型计算机基础 1
1.1.1 单片机及其发展概况 1
1.1.2 计算机中的数制及相互转换 3
1.1.3 二进制数的运算 7
1.1.4 计算机中数的表示方法 10
1.2 51单片机的基本组成和功能 13
1.2.1 51系列单片机的主要功能 13
1.2.2 51系列单片机基本结构 14
1.2.3 51系列单片机外部引脚 15
1.3 51单片机的内部结构 19
1.3.1 中央处理单元 19
1.3.2 存储器 21
1.3.3 定时器/计数器 25
1.3.4 I/O口 26
1.3.5 中断系统 26
1.4 51单片机的工作方式 29
1.4.1 时钟和时钟电路 29
1.4.2 CPU时序 29
1.4.3 复位状态和复位电路 30
本章小结 32
习题与思考 32
第2章 51单片机指令系统及汇编语言程序设计基础 33
2.1 51单片机指令格式 33
2.1.1 指令格式 33
2.1.2 指令的字节数 34
2.1.3 指令的分类 35
2.2 51单片机寻址方式 36
2.2.1 立即寻址 37
2.2.2 直接寻址 37
2.2.3 寄存器寻址 38
2.2.4 寄存器间接寻址 38
2.2.5 变址寻址 39
2.2.6 相对寻址 39
2.2.7 位寻址 40
2.3 51单片机指令 40
2.3.1 数据传送类指令 40
2.3.2 算术运算类指令 44
2.3.3 逻辑运算及移位指令 47
2.3.4 控制转移类指令 51
2.3.5 位操作类指令 56
2.3.6 伪指令 59
2.4 汇编语言程序设计基础 61
2.4.1 汇编语言程序的格式 62
2.4.2 汇编语言程序的基本结构 63
2.4.3 顺序结构程序设计 63
2.4.4 分支程序设计 64
2.4.5 循环程序设计 67
2.4.6 查表程序设计 72
2.4.7 子程序设计 74
本章小结 79
习题与思考 79
第3章 51单片机的硬件资源 81
3.1 51单片机并行I/O口 81
3.1.1 I/O口的作用 81
3.1.2 内部并行I/O口 82
3.1.3 内部并行I/O口的应用 85
3.2 51单片机中断系统 85
3.2.1 中断的定义 86
3.2.2 中断源 86
3.2.3 中断控制 87
3.2.4 中断优先级结构 89
3.2.5 中断响应 90
3.2.6 中断响应时间 91
3.2.7 中断请求的撤除 91
3.2.8 中断系统的初始化 92
3.2.9 外部中断源的扩展 93
3.3 51单片机定时器/计数器 95
3.3.1 定时器/计数器的结构及工作原理 95
3.3.2 控制定时器/计数器的寄存器 96
3.3.3 定时器/计数器的初始化 97
3.3.4 定时器/计数器的工作方式 99
3.4 51单片机串行通信 105
3.4.1 串行通信 105
3.4.2 51单片机串行接口 107
3.4.3 51单片机串行通信的工作方式 109
本章小结 112
习题与思考 112
第4章 C51程序设计基础 114
4.1 C51语言的符号类型 114
4.1.1 标识符 114
4.1.2 关键字 114
4.1.3 运算符 116
4.1.4 分隔符 118
4.2 常量与变量 120
4.2.1 基本数据类型 120
4.2.2 常量 121
4.2.3 变量 122
4.2.4 变量的作用范围 123
4.3 C51语句 124
4.3.1 说明语句与空语句 124
4.3.2 表达式语句 126
4.3.3 条件语句 127
4.3.4 开关、跳转语句 128
4.3.5 循环语句 130
4.3.6 复合语句 132
4.3.7 函数调用语句 132
4.3.8 预处理 133
本章小结 137
习题与思考 137
第5章 C51数据结构 139
5.1 数组 139
5.1.1 数组的定义和引用 139
5.1.2 字符数组 139
5.1.3 数组元素赋初值 140
5.1.4 数组作为函数的参数 140
5.2 指针 141
5.2.1 指针与地址 141
5.2.2 指针变量 141
5.3 结构 142
5.3.1 结构说明和结构变量定义 142
5.3.2 结构变量的使用 143
5.3.3 结构数组和结构指针 143
5.4 联合 144
5.5 枚举 145
本章小结 146
习题与思考 146
第6章 C51编译器及简介 147
6.1 KEIL C51编译器简介 147
6.1.1 KEIL C51开发套件 147
6.1.2 KEIL C51的安装 147
6.1.3 KEIL C51开发实例 147
6.2 C51库函数概述 150
6.2.1 本征库函数和非本征库函数 150
6.2.2 几类重要库函数 150
6.2.3 C51库函数原型列表 151
本章小结 153
习题与思考 153
第7章 51单片机人机交互 154
7.1 外部显示元件设计 154
7.1.1 LED数码管 154
7.1.2 16*2字符型液晶显示器编程 161
7.2 键盘输入设计 168
7.2.1 键盘接口类型 168
7.2.2 键盘的防抖技术 171
7.2.3 键盘扫描方式编程 172
7.2.4 键盘中断方式编程 174
7.3 外接打印机接口设计 176
7.3.1 打印机接口信号 177
7.3.2 字符和汉字编码 178
7.3.3 打印命令 178
7.3.4 外接打印机接口电路设计 180
7.3.5 外接打印机驱动程序设计 182
本章小结 184
习题与思考 184
第8章 51单片机数据采集 185
8.1 传感器技术概述 185
8.1.1 传感器的组成 185
8.1.2 传感器的基本特性 186
8.2 常用的A/D转换元件 187
8.2.1 A/D转换元件的结构和工作原理 187
8.2.2 A/D转换元件的接口电路 192
8.2.3 单片机A/D转换软件编程 192
8.3 温度数据采集元件设计 194
8.3.1 温度数据采集元件的结构和工作原理 194
8.3.2 温度数据采集元件的接口电路 198
8.3.3 单片机温度数据采集软件编程 199
8.4 压力数据采集元件设计 205
8.4.1 压力数据采集元件的结构和工作原理 205
8.4.2 压力数据采集元件接口电路 210
8.4.3 单片机压力数据采集软件编程 211
本章小结 212
习题与思考 212
第9章 51单片机串行通信 214
9.1 单片机串行通信设计 214
9.1.1 常用接口芯片结构和工作原理 214
9.1.2 单片机串行通信电路设计 220
9.1.3 单片机串行通信软件编程 221
*9.2 Windows.NET环境下计算机与单片机串行通信程序设计 230
9.2.1 Windows.NET串行类介绍 230
9.2.2 计算机与下位机通信协议 232
9.2.3 计算机的串行通信程序的设计 238
9.2.4 单片机串行通信程序的设计 240
本章小结 249
习题与思考 249
第10章 51单片机外部存储器扩展 251
10.1 外部I/O的扩展 251
10.1.1 I/O口扩展概述 251
10.1.2 I/O地址译码技术 252
10.2 存储器概述 253
10.2.1 存储器的类型 254
10.2.2 常用的存储器 255
10.2.3 存储器扩展电路的工作方式 258
10.3 外部存储器扩展 259
10.3.1 扩展程序存储器 259
10.3.2 扩展数据存储器及编程 261
10.3.3 程序存储器与数据存储器同时扩展 266
本章小结 267
习题与思考 267
第11章 51单片机输出控制 269
11.1 常用输出接口电路 269
11.1.1 单片机与光电隔离元件的接口电路 269
11.1.2 单片机与模拟开关元件的接口电路 271
11.1.3 单片机与继电器的接口电路 273
11.2 常用D/A转换器设计 279
11.2.1 D/A转换器的结构和工作原理 279
11.2.2 D/A转换器的接口电路 281
11.2.3 D/A转换器的单片机编程 282
*11.3 直流电动机的控制设计 283
11.3.1 直流电动机驱动电路的基本工作原理 284
11.3.2 采用单片机的直流电动机控制电路设计 291
11.3.3 直流电动机驱动的编程 291
本章小结 293
习题与思考 293
附录A 51单片机指令系统表 294
附录B C51语言的库函数 298
参考文献 303
第1章 51单片机结构及工作原理
1975年,美国Texas Instruments公司成功研制了世界上第一台单片机,它的出现是计算机技术发展史上的一个里程碑,从此,计算机技术不仅在数值处理方面得到了进一步的发展,而且在智能化控制领域里也得到了迅猛的发展,并占有越来越重要的地位。51系列单片机是目前应用最广泛的单片机,该系列单片机简单易学,具有丰富的指令系统和高级语言编译系统。本章重点介绍单片机的基本概念、特点、结构以及工作方式等。
1.1 微型计算机基础
1.1.1单片机及其发展概况
1.单片机的发展
单片机的全称为单片微型计算机(Single Chip Microcomputer),它是将组成微型计算机的各个功能部件,如中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)、基本输入/输出接口(I/O接口)、定时器/计数器以及串行通信接口等部件有机地结合在一块集成芯片中,构成一台完整的微型计算机,因此单片机又可以称为微处理器(Microcontroller Unit)。一个完整的单片机如图1.1所示。