
MCS-51系列单片机的应用很广泛,是学习单片机技术较好的系统平台,同时也是开发单片微型计算机应用系统的一个重要系列。本书以实用为宗旨,用丰富的实例来讲解MCS-51单片机原理和软硬件开发技术,并采用对比的方法,同一功能分别用单片机汇编语言和单片机C语言来实现,并免费提供所有源代码和电路图的资源下载。
本书为原书第2版,对一些章节作了修订,另外补充了部分应用设计实例。全书共分12章,第1、2~5章介绍单片微机系统的基础知识,MCS-51单片机的基本原理,单片机汇编程序设计,单片机C语言程序设计,单片机C语言与汇编语言混合编程;第6~9章,用实例介绍MCS-51单片机内部资源及编程,MCS-51单片机的常用接口,MCS-51单片机与D/A、A/D转换器的接口和MCS-51单片机的其他接口;第10~12章介绍单片机应用系统设计,单片机应用系统设计实例,Keil C51集成环境的使用;附录提供了MCS-51系列单片机指令表和C51库函数。
本书适合各类本科和专科院校及培训机构作为“单片机原理与应用”或“单片机C程序设计及应用”类课程的教材,特别适合学习单片机应用系统开发的读者,也可供各类电子工程、自动化技术人员和计算机爱好者学习参考。
前 言
《单片机原理与应用及C51程序设计》一书自2006年出版后,以其全新的编写思路、鲜明的应用性特色,受到了广大教师与学生的欢迎,已经重印8次。为使《单片机原理与应用及C51程序设计(第2版)》更加适合各院校使用,编者认真听取了广大师生的意见,均衡内容与篇幅,我们保留了第1版的主体框架和特色,同时,为了更加突出应用性,对其内容作了一些修订和增补。
MCS-51系列单片机的应用很广泛,是学习单片机技术较好的系统平台,同时也是开发单片微型计算机应用系统的一个重要系列。目前,单片机原理与应用教材大都采用汇编语言讲解和设计程序实例,但汇编语言学习起来会比较困难。在实际的应用系统开发调试中,特别是开发比较复杂的应用系统时,为了提高开发效率和使程序便于移植,现在多用C语言。C语言不仅学习方便,而且也同汇编语言一样能够对单片机的资源进行访问,因而目前大多数院校在开设单片机课程时都引入了C语言。但引入C语言后,在选用教材时发现存在两个方面的问题:第一,单片机原理与应用(含单片机C语言程序设计)的教材不多,而兼顾汇编语言和C语言的教材更少,所以可选择的余地较小;第二,单片机C语言方面的教材一般面向开发,不讲原理,属于高级教程,不适合初学者。而我们需要一本在讲单片机基本原理的同时能兼顾汇编语言和C语言两个方面的教材,以避免学生在学习“单片机原理与应用”课程时还要另外参考一本单片机C语言方面的教材。基于此,我们在2006年承担了四川省高等教育教学改革工程人才培养质量和教学改革项目“微机、单片机、接口技术系列实验及实践教学改革”,提出的实验及实践教学改革的目标是培养应用型人才。根据理论教学和实践教学的经验,我们发现学生要想熟练掌握MCS-51单片机应用系统软件设计,就必须完全理解单片机汇编语言,只有这样才能理解并掌握MCS-51程序设计。若在用汇编语言讲授单片机原理后另外单独开设一门“MCS-51程序设计”课程,那么由于时间间隔的原因,学生往往不能与原理很好地联系起来进行对比学习。因此我们尝试在课堂上讲解单片机原理的同时介绍单片机C语言程序设计,避免直到进入实验室或开发实践阶段时才讲授单片机C语言程序设计以及开发环境,为开设综合实验和创新性实验奠定一定的基础。本书的目的是想在讲解单片机基本原理的同时能兼顾汇编语言和C语言两个方面。
在本书的实例中,相同的功能分别用汇编语言和C语言来实现,通过用汇编语言和C语言两个方面的编程对比,使学生能够有选择地掌握一种语言并认识另一种语言。对于把“单片机原理与应用”及“MCS-51程序设计”作为两门课程分别开设的学校,也可以使用同一本教材,这样对学生复习单片机原理及汇编语言知识有很大的帮助。同时,为了提高学生应用设计的能力,还介绍了目前单片机接口常用的接口芯片,列举了几个简单的单片机应用系统开发实例。
1. 第2版内容的调整
第1章 基础知识,做了修订;第2章 单片机基本原理,做了修订;第3章 单片机汇编程序设计,修改了汇编语言伪指令部分,增加了DATA和XDATA伪指令,并做了相应的修改;第4章 单片机C语言程序设计,做了少量修改,增加了运算符的优先级与结合性等;第5章 单片机C语言与汇编混合编程,是新增加的内容;第6章 MCS-51单片机的内部资源及编程,为第1版的第5章;第7章 MCS-51单片机的常用接口,由第1版的第6章与第7章合并修改而成;第8章 MCS-51单片机与D/A、A/D转换器的接口,做了修订;第9章 MCS-51单片机的其他接口,增加了数字温度传感器DS18B20的接口和串行D/A MAX517、A/D MAX1241的接口;第10章 单片机应用系统设计,做了修订;第11章 单片机应用系统设计实例,增加了单片机数显温度计设计;第12章 Keil C51集成环境的使用,做了修改;附录,做了修订。
2. 本书特点
本书以实用为宗旨,用众多的实例讲解了MCS-51单片机原理和硬、软件开发技术,针对同一功能,同时提供单片机汇编源程序和单片机C语言源程序,并免费提供所有源代码和电路图的资源下载。读者可以此作为进入单片机应用系统开发领域的首次尝试。
本书与传统的单片机基本原理书籍相比较,更面向实际开发,与单片机C语言程序设计书籍相比,兼顾了单片机原理和汇编语言的讲解,有利于初学者迅速掌握单片机技术。
本书图文并茂,实用性强,为便于读者自学和练习,各章均配有少量习题。本书可作为大专院校单片机原理与应用类课程的教材,也可作为单片机原理与应用技术培训班的教材,特别适合于打算学习单片机应用系统开发技术的读者,同时可供各类电子工程、自动化技术人员和计算机爱好者学习参考。
3. 本书内容
本书共分12章,具体内容如下。
第1章主要介绍学习单片微机系统必备的基础知识。
第2章介绍MCS-51单片机的详细工作原理。
第3章主要介绍包括寻址方式、MCS-51单片机指令系统等汇编源程序设计的相关技术细节。
第4章主要介绍单片机C语言程序设计,并列举了大量实例及详细代码。
第5章主要介绍单片机C语言与汇编语言混合编程的方法。
第6章至第9章,分别用单片机汇编程序和单片机C语言程序编写实例,介绍MCS-51单片机的内部资源及编程、MCS-51单片机的常用接口、MCS-51单片机与D/A和A/D转换器的接口及MCS-51单片机的其他接口。
第10章讲述单片机应用系统设计的方法和步骤。
第11章以三个简单的单片机应用系统设计为例来讲解单片机应用系统的设计技术。
第12章介绍Keil C51集成环境的使用。
附录中提供了MCS-51系列单片机指令表和C51库函数,以及与单片机相关的资源网站列表,以使读者找到更广阔的学习园地。
4. 如何使用本书
对于MCS-51单片机的初学者来说,应该从本书的第1章开始进行学习,以了解MCS-51单片机技术的基本知识和MCS-51单片机的使用方法,掌握MCS-51单片机结构和相应接口芯片的具体使用方法,以及与MCS-51单片机汇编语言编程和单片机C语言编程相关的具体技术,学完第1~12章,即可达到从事单片机应用系统开发的基本要求。
对于已经具有一定MCS-51单片机技术基础,比较了解MCS-51单片机的读者来说,可以直接从第4章开始学习,重点理解和掌握使用MCS-51单片机开发应用系统的相关技术,通过对比来掌握单片机汇编语言编程和单片机C语言编程的方法,着重掌握单片机应用系统的开发过程。
建议本书的理论课安排在60学时左右,实验16学时,如果只学习汇编程序设计或C语言程序设计,理论学习课时可适当减少。课程学完后,可安排相应的课程设计,以便对学习内容进行巩固和加深理解。
另外,本书在描述中把MCS-51单片机简称为“单片机”,书中采用了Keil C51 V7.06软件界面,读者在学习过程中也可以采用Keil C51的最新版本,或者从本书提供的资源网站www.wenyuan.com.cn中搜索下载其对应的软件包,以供学习和使用。
5. 我们的经验
根据我们的教学和开发经验,学习单片机技术,特别是学习单片机应用系统开发技术时,关键是让读者迅速找到适合自己的学习方法,在第一时间使读者看到自己的学习成绩,排除“对硬件设计没有信心,畏惧编程”的心理因素。因此有必要走“依葫芦画瓢”的道路,在实验中模拟开发出简单的应用系统,然后由浅入深,逐步进入单片机应用系统开发领域。
为此目的本书给出了大量实例,包括硬件电路设计和应用系统开发,我们希望读者通过大量的实例来加深对相关内容的认识和理解,尽快地把理论知识转换为解决实际问题的能力。另一方面,为方便读者快速阅读本书,书中各实例中的所有源代码和电路图(用Protel绘制,不具有电气连接功能)均提供免费下载,读者可以根据自己的实际情况进行选择和使用,建议读者详细阅读第5~12章,并分析电路和程序源代码,最好能够自己在实验室模拟一个单片机应用系统实验项目进行开发练习,以此作为真正的单片机应用系统开发的起步。
6. 致谢
本书由西华大学的谢维成和成都大学的杨加国、赵定远、杨显富共同编写,谢维成和杨加国担任主编。
本书第4、5、6章由谢维成编写,第1、2、3、7、11章和附录由杨加国编写,第8和第9章由赵定远编写,第10、12章由杨显富编写,最后由谢维成和杨加国统稿完成。西华大学董秀成教授在百忙中审阅了全部书稿并提出了建设性的意见。另外伍高辉、宋玉忠、郑海春、王孝平、赵华颖、李茜参与了本书部分图形的绘制工作,在此一并表示感谢。同时感谢参考文献中提到的作者,本书借鉴了他们的部分成果,他们的工作给了我们很大的帮助和启发。
尽管是再版图书,我们全体参编人员已尽心尽力,但限于自身水平,书中难免出现遗漏和错误之处,恳请广大读者不吝指正。
编 者
II
单片机原理与应用及C51程序设计(第2版)
III
前 言
目 录
第1章 基础知识 1
1.1 信息在计算机中的表示 1
1.1.1 数在计算机内的表示 1
1.1.2 字符在计算机内的表示 5
1.2 单片机的概念及其特点 6
1.2.1 单片机的基本概念 6
1.2.2 单片机的主要特点 6
1.3 单片机的发展及其主要品种 7
1.3.1 4位单片机 7
1.3.2 8位单片机 8
1.3.3 16位单片机 8
1.3.4 32位单片机 8
1.4 单片机的应用 8
1.4.1 单机应用 9
1.4.2 多机应用 9
1.4.3 单片机的等级 9
习题 10
第2章 单片机基本原理 11
2.1 MCS-51系列单片机简介 11
2.2 MCS-51系列单片机的结构原理 11
2.2.1 MCS-51系列单片机的
基本组成 11
2.2.2 MCS-51系列单片机的
内部结构 12
2.2.3 MCS-51系列单片机的
中央处理器(CPU) 13
2.2.4 MCS-51系列单片机的
存储器结构 14
2.2.5 MCS-51系列单片机的
输入/输出接口 20
2.3 MCS-51系列单片机的外部引脚及
片外总线 24
2.3.1 外部引脚 24
2.3.2 片外总线结构 27
2.4 MCS-51系列单片机的工作方式 27
2.4.1 复位方式 27
2.4.2 程序执行方式 28
2.4.3 单步执行方式 28
2.4.4 掉电和节电方式 29
2.4.5 编程和校验方式 30
2.5 MCS-51系列单片机的时序 31
2.5.1 机器周期和指令周期 31
2.5.2 单机器周期指令的时序 31
2.5.3 双机器周期指令的时序 32
习题 32
第3章 单片机汇编程序设计 34
3.1 MCS-51系列单片机汇编指令
格式及标识 34
3.1.1 指令格式 34
3.1.2 指令中用到的标识符 35
3.2 MCS-51系列单片机的寻址方式 35
3.2.1 常数寻址(立即寻址) 35
3.2.2 寄存器数寻址(寄存器寻址) 36
3.2.3 存储器数寻址 36
3.2.4 位寻址 38
3.2.5 指令寻址 38
3.3 MCS-51系列单片机的指令系统 39
3.3.1 数据传送指令 39
3.3.2 算术运算指令 42
3.3.3 逻辑操作指令 44
3.3.4 控制转移指令 46
3.3.5 位操作指令 51
3.4 MCS-51系列单片机汇编程序
常用伪指令 53
3.5 MCS-51系列单片机汇编程序设计 57
3.5.1 运算程序 57
3.5.2 数据的拼拆和转换 60
3.5.3 多分支转移(散转)程序 62
习题 64
第4章 单片机C语言程序设计 67
4.1 C语言与MCS-51单片机 67
4.1.1 C语言的特点及程序结构 67
4.1.2 C语言与MCS-51单片机 69
4.1.3 C51程序结构 69
4.2 C51的数据类型 70
4.3 C51的运算量 73
4.3.1 常量 73
4.3.2 变量 74
4.3.3 存储模式 77
4.3.4 绝对地址的访问 78
4.4 C51的运算符及表达式 80
4.4.1 赋值运算符 80
4.4.2 算术运算符 81
4.4.3 关系运算符 81
4.4.4 逻辑运算符 81
4.4.5 位运算符 82
4.4.6 复合赋值运算符 82
4.4.7 逗号运算符 83
4.4.8 条件运算符 83
4.4.9 指针与地址运算符 83
4.4.10 运算符的优先级与结合性 84
4.5 表达式语句及复合语句 85
4.5.1 表达式语句 85
4.5.2 复合语句 86
4.6 C51的输入/输出 87
4.6.1 格式输出函数printf() 87
4.6.2 格式输入函数scanf() 88
4.7 C51程序的基本结构与相关语句 89
4.7.1 C51的基本结构 89
4.7.2 if语句 91
4.7.3 switch/case语句 92
4.7.4 while语句 93
4.7.5 do…while语句 93
4.7.6 for语句 94
4.7.7 循环的嵌套 95
4.7.8 break和continue语句 95
4.7.9 return语句 96
4.8 函数 96
4.8.1 函数的定义 97
4.8.2 函数的调用与声明 99
4.8.3 函数的嵌套与递归 102
4.9 C51构造数据类型 103
4.9.1 数组 103
4.9.2 指针 106
4.9.3 结构 108
4.9.4 联合 111
4.9.5 枚举 113
习题 114
第5章 单片机C语言与汇编语言
混合编程 117
5.1 混合编程概述 117
5.1.1 单片机汇编语言的特点 117
5.1.2 单片机C语言的特点 118
5.1.3 单片机混合编程的优点 119
5.1.4 单片机混合编程的
基本方式 120
5.2 混合汇编的参数传递与实现 121
5.2.1 混合汇编的参数传递 121
5.2.2 混合汇编的实现 123
习题 126
第6章 MCS-51单片机的
内部资源及编程 127
6.1 并行输入/输出接口 127
6.2 定时/计数器接口 127
6.2.1 定时/计数器的主要特性 127
6.2.2 定时/计数器T0、T1的
结构及工作原理 128
6.2.3 定时/计数器的方式和
控制寄存器 129
6.2.4 定时/计数器的工作方式 130
6.2.5 定时/计数器的初始化
编程及应用 132
6.3 串行接口 137
6.3.1 通信的基本概念 137
6.3.2 MCS-51单片机串行口的
功能与结构 139
6.3.3 串行口的工作方式 142
6.3.4 串行口的编程及应用 143
6.4 中断系统 158
6.4.1 中断的基本概念 158
6.4.2 MCS-51单片机的中断系统 159
6.4.3 MCS-51中断系统的应用 164
习题 166
第7章 MCS-51单片机常用接口 168
7.1 MCS-51单片机的最小系统 168
7.1.1 8051/8751的最小系统 168
7.1.2 8031的最小系统 168
7.2 存储器扩展 169
7.2.1 存储器扩展概述 169
7.2.2 程序存储器扩展 171
7.2.3 数据存储器扩展 174
7.3 输入/输出口扩展 175
7.3.1 简单I/O接口扩展 175
7.3.2 可编程I/O接口
扩展(8255A) 176
7.4 MCS-51单片机与键盘的接口 183
7.4.1 键盘的工作原理 183
7.4.2 独立式键盘与
单片机的接口 185
7.4.3 矩阵式键盘与
单片机的接口 186
7.5 MCS-51单片机与
LED显示器接口 192
7.5.1 LED显示器的结构与原理 192
7.5.2 LED数码管显示器的
译码方式 193
7.5.3 LED数码管的显示方式 194
7.5.4 LED显示器与
单片机的接口 196
7.6 MCS-51单片机与行程开关、
晶闸管、继电器的接口 199
7.6.1 行程开关、继电器与MCS-51
单片机接口 199
7.6.2 晶闸管与MCS-51单片机
接口 199
7.6.3 继电器与MCS-51单片机
接口 200
7.6.4 蜂鸣器与单片机接口 201
习题 201
第8章 MCS-51单片机与D/A、
A/D转换器的接口 203
8.1 MCS-51单片机与ADC的接口 203
8.1.1 A/D转换器概述 203
8.1.2 ADC0809与MCS-51的
接口 204
8.2 MCS-51单片机与DAC的接口 209
8.2.1 D/A转换器概述 209
8.2.2 MCS-51单片机与8位
DAC0832的接口 211
习题 216
第9章 MCS-51单片机的其他接口 217
9.1 LCD与MCS-51单片机的接口 217
9.1.1 字符型点阵式液晶显示器 217
9.1.2 LCD显示器与单片机的
接口与应用 222
9.2 MCS-51单片机与I2C总线芯片
接口 226
9.2.1 I2C总线简介 226
9.2.2 I2C总线EEPROM芯片与
单片机的接口 229
9.3 MCS-51单片机与时钟日历
芯片的接口 242
9.3.1 并行日历时钟芯片
DS12887与单片机的接口 242
9.3.2 串行日历时钟芯片与
单片机的接口 251
9.4 MCS-51单片机与数字温度
传感器的接口 262
9.4.1 DS18B20简介 262
9.4.2 DS18B20的主要特性 263
9.4.3 DS18B20的外部结构 263
9.4.4 DS18B20的内部结构 263
9.4.5 DS18B20的温度转换过程 266
9.4.6 DS18B20与单片机的接口 267
9.4.7 DS18B20使用中的
注意事项 274
9.5 MCS-51单片机与串行A/D、
D/A的接口 275
9.5.1 MCS-51单片机与串行A/D
芯片MAX1241的接口 275
9.5.2 MCS-51单片机与串行D/A
芯片MAX517的接口 279
习题 284
第10章 单片机应用系统设计 286
10.1 单片机应用系统的基本结构 286
10.1.1 单片机应用系统的
硬件系统 286
10.1.2 单片机应用系统开发的
基本过程 287
10.2 单片机应用系统的硬件系统设计 289
10.2.1 硬件系统设计的原则 289
10.2.2 硬件设计 290
10.3 单片机应用系统的软件设计 291
10.3.1 软件设计的特点 291
10.3.2 资源分配 292
10.3.3 单片机应用系统开发工具 292
习题 293
第11章 单片机应用系统设计实例 294
11.1 单片机电子时钟的设计 294
11.1.1 软时钟的基本原理 294
11.1.2 系统硬件电路的设计 294
11.1.3 系统软件程序的设计 295
11.2 多路数字电压表的设计 302
11.2.1 多路数字电压表的
原理及功能 302
11.2.2 系统硬件电路的设计 303
11.2.3 系统软件程序的设计 304
11.3 单片机数字显示温度计 312
11.3.1 单片机数字显示温度计的
原理 312
11.3.2 系统硬件电路设计 312
11.3.3 系统软件程序设计 313
习题 322
第12章 Keil C51集成环境的使用 324
12.1 Keil C51简介 324
12.1.1 Keil uVision2 IDE的安装 324
12.1.2 Keil uVision2 IDE界面 324
12.2 Keil uVision2 IDE的使用方法 330
12.2.1 项目文件的建立 330
12.2.2 给项目添加程序文件 331
12.2.3 编译、连接项目,
形成目标文件 332
12.2.4 运行调试观察结果 332
12.2.5 多文件的处理 333
12.2.6 仿真环境的设置 334
12.3 Keil C51的调试技巧 337
12.3.1 如何设置和删除断点 337
12.3.2 如何查看和
修改寄存器的内容 337
12.3.3 如何观察和修改变量 337
12.3.4 如何观察存储器区域 338
12.3.5 并行口的使用 338
12.3.6 定时/计数器的使用 339
12.3.7 串行口的使用 341
12.3.8 外中断的使用 341
习题 342
附录A MCS-51系列单片机指令表 343
附录B C51的库函数 348
附录C 单片机技术及嵌入式
系统的网络资源 357
参考文献 358
VI
单片机原理与应用及C51程序设计(第2版)
VII