关于我们
书单推荐
新书推荐
|
单片机原理与应用系统设计
本书较全面和详细地介绍了单片机的基本原理、系统结构、指令系统、内部资源、外部接口扩展、应用系统设计实例以及嵌入式操作系统在单片机系统中应用等内容, 并通过大量实例分析, 重点讲解单片机应用系统的设计方法, 以培养读者单片机应用系统设计能力。全书共12章。每章节的例题均由浅入深, 循序渐进、讲解透彻。书中相关例程均在KeilC51 3.0环境下调试通过, 能够实际演示。每章最后备有习题, 以及时巩固所学知识。
内容全面,概念清晰,由浅入深,循序渐进。本书全面介绍了MCS-51单片机的原理、指令系统、51汇编语言和C51语言编程方法、接口技术、应用系统设计方法,以及嵌入式操作系统在51单片机中的应用方法。
案例翔实,具有实战演练功能。书中所有例题均在Keil μVision开发环境下调试通过,并给出Proteus仿真环境下的实现结果,不是纸上谈兵,而是实战演习。 配套资源丰富,包含有电子课件、所有例题的电路图与源代码以及习题解答,而且程序的关键部分标有注释,是学习单片机软硬件设计技术的理想教材和工具。
本书的目的是帮助初学者学习使用单片机。首先,作者总结多年的工程实践经验和教学体会,先与读者分享一下学习经验。
1. 分享经验 首先,是做好基础知识的准备。基础知识包括模拟电路、数字电路和C语言知识。在学习单片机之前,应先温习所学过的模拟电路、数字电路以及C语言知识,为学习单片机加强基础。 单片机的硬件电路大多数属于数字电路,如果数字电路基础扎实,对复杂的单片机硬件结构和原理就能容易理解,就能轻松地迈开学习的第一步。因此,如果你觉得单片机很难,那就应该先去重温数字电路,搞清楚触发器、寄存器、门电路、CMOS电路、时序逻辑和时序图、进制转换等基础知识。当你掌握了这些基础知识后再去看单片机的结构和原理,就会大彻大悟,信心倍增。模拟电路是电子技术的基础,主要内容是学习电阻、电容、电感、二极管、三极管、场效应管及放大器等模拟器件的工作原理和在电路中的作用。扎实的模拟电路基础可以让你容易看懂别人设计的电路,也能使你设计的电路更可靠。同时,单片机的学习离不开编程,在所有的程序设计中C语言运用最为广泛。C语言知识并不难,需要掌握的知识就那么几种数据类型和几个控制语句。可别小看这几种数据类型和几个控制语句,用它们可以处理各种形式的数据以及非常复杂的逻辑关系。 扎实的电子技术基础和C语言基础,会让你的单片机学习得心应手。当单片机乖乖地依照你的想法和设计去执行指令,实现预期结果的时候,成就感会让你信心十足地投入到单片机的世界里,未来的单片机专家就是你。 其次,要通过实践积累经验。单片机的学习具有很强的实践性,是一门很注重实际动手操作的技术学科,不动手实践是学不会单片机的。因此,实践才是真正学习单片机的必由之路。 实践中要有一套完整的学习开发工具, 即必须有一台计算机、◆单片机原理与应用系统设计(第2版)前言一套单片机开发板、视频教程和单片机教材。计算机上要安装Keil C51集成开发软件,用来编写和编译程序,并将程序代码下载到单片机上;开发板用来运行单片机程序,验证实际效果;视频教程就是手把手教你单片机开发环境的使用、单片机编程和调试。对于单片机初学者来说,视频教程必须看,否则,即使把教材看了几遍,还是不知道如何下手;单片机教材是理论学习资料,备忘备查。初学者为了节约成本和时间,可以先用Proteus软件仿真调试,熟悉之后,再使用开发板调试程序。 软件编程要注重理论和实践相结合,效果会更好。看到例程题目先试着构思自己的编程思路,然后再看教材或视频教程里的代码,研究别人的编程思路以及与自己思路的差异;接下来是亲自动手编写程序,对有疑问的地方试着按照自己的思路修改程序,比较程序运行效果,领会其中的奥妙。还可以在原有程序基础上改进和拓展,使其功能更强大。此外,自己应该找些项目来做,以巩固所学的知识和积累更多的经验。 在实践中要多与同行虚心交流。在单片机学习过程中,每个人都会遇到无数的问题,如果你向有经验的过来人虚心求教,就会少走许多弯路,节省很多时间。 最后,研究硬件设计,实现产品开发。学习单片机的最终目的是做产品开发,产品即是一个软硬件相结合的控制系统。所以,硬件设计是学习单片机技术的必学内容。当你的单片机编程水平有了相当提高之后,就应该去研究单片机硬件系统设计了。硬件设计包括电路原理设计和电路板(即PCB板)设计。 电路原理设计涉及各种芯片的应用,而芯片的典型应用在芯片数据手册(Datasheet)中都能找到答案。电子技术领域的第一手资料就是Datasheet,而且几乎都是全英文的,从Datasheet里所获得的知识,可能是在教科书、网络文档和课外读物等中很少见到的。虽然有些资料也都是在Datasheet的基础上撰写的,但内容不全面,甚至存在翻译上的遗漏和错误。所以良好的英文阅读能力也是学习单片机技术不可缺少的。PCB板的设计相对简单,只要懂得使用PCB板设计软件Protel或 Altium Designer就 没问题了。但要想设计的板子布局美观、布线合理,还需要在实践中不断学习。 具备一定的Keil C51环境下的单片机编程经验、会使用Protel软件或 Altium Designer软件设计硬件电路以及良好的英文阅读能力,你就是遇强则强的单片机高手了。 2. 本书内容 本书第2版增加了工程实践内容。多年来,MCS51系列单片机一直是学习单片机技术的主要教学平台,在嵌入式技术高速发展的大环境下,单片机技术课程已经不再是培养电子工程师课程体系的最终环节,单片机的教学要为后续学习嵌入式系统打下良好基础。因此,本书在编写过程中,除了论述MCS51单片机的基本原理、系统结构、内部资源、指令系统、常用接口及其外部扩展、应用系统设计等内容外,还增加了丰富且能够实际演示的单片机应用实例、嵌入式操作系统在51单片机系统中应用的方法和实例,以及自主设计的便携式单片机学习板的软硬件设计的内容,并在第2版中增加了工程实践案例的设计内容。 3. 本书特色 (1) 强调动手实践。 实践是学好单片机技术的必经之路。本书详细介绍了Keil μVision集成开发环境下进行汇编语言程序和C51程序开发的过程;书中所有案例程序均在Keil μVision环境下调试通过,不是纸上谈兵,而是实战演习。 (2) 强调单片机应用系统的软硬件整体设计。 书中给出了若干完整的单片机应用系统实例。案例的编写具有完整性、系统性和工程性。 所有案例均给出可实施的系统级设计资料,包括完整的可实现电路板布线的硬件电路原理图(并非电路示意图)和完整的 Keil μVision环境下调试通过的软件源程序工程代码(并非程序段或伪代码)。 所有案例均给出仿真实现过程和结果,即基于Proteus环境的系统仿真实现结果。 设计有便携式单片机学习板,给出了该学习板的Protel电路原理图设计和PCB版设计资料,便于读者进行工程实践。书中单片机应用系统案例均可在该学习板上硬件实现。 (3) 为嵌入式系统学习打好基础。 嵌入式系统是单片机技术发展的高级阶段,因此学习单片机要做好进一步学习嵌入式系统的知识准备。一方面是加强C语言程序设计能力,另一方面是加强嵌入式操作系统在51单片机系统上应用的内容介绍。此外,本书介绍了嵌入式操作系统在51单片机系统中应用的方法和实例。 (4) 配套资源丰富。 本书配有多媒体资料,其中包含电子课件、所有相关例程源代码、习题解答及编程题的程序源代码,并且在程序的关键部分加以注释,既适合作为教材供教师和学生使用,也适合自学成才。 4. 致谢 本书由沈阳理工大学马秀丽、周越、王红共同编写。本书第1~5章和8.8节由马秀丽编写,第7~10章由周越和王红编写,第6和第11章由周越和马秀丽编写,王红霞参加了附录和部分章节的编写工作。最后由马秀丽审阅并统稿完成。感谢本书所列参考文献的作者,他们的工作给了我们很大的帮助和启发。感谢为本书出版付出辛勤劳动的清华大学出版社的工作人员。感谢读者选用本书。 尽管全体参编人员竭心尽力,但限于自身水平,书中难免会有遗漏,恳请广大读者不吝指正,同时欢迎您对本书内容提供宝贵建议,我们将非常感谢。 编者 2017年5月
第1章单片机概述1
1.1单片机的概念及特点1 1.1.1单片机的基本概念1 1.1.2单片机的主要特点2 1.2单片机的发展历程3 1.3单片机的种类与应用5 1.3.1单片机的种类5 1.3.2单片机的等级9 1.3.3单片机的应用9 1.4单片机的选型10 习题11 第2章单片机的基本原理12 2.1MCS51系列单片机简介12 2.1.1MCS51系列单片机的特点12 2.1.2MCS51系列单片机的常用芯片简介13 2.2MCS51系列单片机的结构16 2.2.1MCS51系列单片机的内部结构16 2.2.2MCS51系列单片机的CPU17 2.2.3MCS51系列单片机的存储器分布20 2.2.4MCS51系列单片机的输入输出接口26 2.2.5MCS51系列单片机的时钟电路29 2.2.6MCS51系列单片机的复位电路29 2.3MCS51系列单片机的引脚功能31 2.4MCS51系列单片机的时序33 2.4.1MCS51系列单片机的时序单位33 2.4.2MCS51系列单片机典型指令的时序34◆单片机原理与应用系统设计(第2版)目录2.5MCS51系列单片机的最小系统36 2.5.1MCS51系列单片机的最小系统组成36 2.5.2MCS51系列单片机的节电方式37 习题38 第3章单片机汇编语言程序设计40 3.1MCS51系列单片机的汇编指令格式和寻址方式40 3.1.1MCS51系列单片机的汇编指令格式40 3.1.2MCS51系列单片机的寻址方式41 3.2MCS51系列单片机的指令系统44 3.2.1数据传送类指令45 3.2.2算术运算类指令48 3.2.3逻辑运算类指令51 3.2.4控制转移类指令52 3.2.5位运算类指令57 3.3MCS51系列单片机汇编程序常用的伪指令59 3.4MCS51系列单片机汇编语言程序设计63 3.4.1数据的寻找与排序的程序64 3.4.2数据运算的程序66 3.4.3数据的拼拆和转换69 3.4.4多分支转移程序71 3.4.5子程序设计74 习题76 第4章单片机C语言程序设计80 4.1C语言与MCS51系列单片机80 4.1.1C语言与MCS51系列单片机概述80 4.1.2C51程序的结构82 4.2C51的基本数据类型83 4.3C51的运算量85 4.3.1常量85 4.3.2变量86 4.3.3变量的存储模式89 4.3.4绝对地址的访问90 4.4C51的运算符及表达式92 4.4.1算术运算符和算术表达式92 4.4.2赋值运算符和赋值表达式93 4.4.3增量运算符和增量表达式93 4.4.4关系运算符和关系表达式93 4.4.5逻辑运算符和逻辑表达式94 4.4.6复合赋值运算符95 4.4.7逗号运算符和逗号表达式95 4.4.8条件运算符和条件表达式95 4.4.9位运算符和位运算96 4.4.10指针与地址运算符96 4.5C51的输入与输出97 4.5.1格式输出函数printf()97 4.5.2格式输入函数scanf()98 4.6C51程序基本结构与相关语句98 4.6.1C51程序的基本结构98 4.6.2C51语句100 4.6.3if语句100 4.6.4switch…case语句101 4.6.5while语句102 4.6.6do…while语句102 4.6.7for语句103 4.6.8break和continue语句103 4.6.9return语句104 4.7C51的函数104 4.7.1函数的定义105 4.7.2函数的调用与声明107 4.7.3函数的嵌套调用和递归调用108 4.8C51的构造数据类型110 4.8.1数组110 4.8.2指针111 4.8.3结构体113 4.8.4共用体115 4.8.5枚举类型117 4.9C51程序的编辑和编译118 习题118 第5章MCS51单片机内部资源及编程120 5.1并行输入输出接口120 5.2定时/计数器接口121 5.2.1定时/计数器的主要特性121 5.2.2定时/计数器T0、T1的工作原理122 5.2.3定时/计数器的特殊功能寄存器123 5.2.4定时/计数器的工作模式124 5.2.5定时/计数器的初始化编程及应用127 5.3串行接口134 5.3.1串行口的主要特性134 5.3.2MCS51系列单片机串行口的工作原理135 5.3.3串行口的特殊功能寄存器136 5.3.4串行口的工作方式138 5.3.5串行口的初始化编程及应用142 5.4中断系统154 5.4.1MCS51系列单片机中断系统的特点154 5.4.2MCS51系列单片机的中断源155 5.4.3MCS51系列单片机的中断控制寄存器157 5.4.4中断系统的应用159 习题162 第6章MCS51单片机的外部接口技术165 6.1人机接口165 6.1.1数码管显示接口165 6.1.2字符点阵式LCD显示接口170 6.1.3图形点阵式LCD显示接口177 6.1.4键盘接口190 6.2存储器扩展196 6.2.1单片机系统总线196 6.2.2数据存储器扩展197 6.2.3程序存储器扩展199 6.2.4单片机对外部存储器的读写时序200 6.3输入输出口扩展202 6.3.1简单I/O接口扩展202 6.3.2可编程并行I/O接口扩展203 6.4A/D转换接口211 6.4.1A/D转换原理211 6.4.2ADC0809芯片的应用213 6.5D/A转换接口219 6.5.1D/A转换原理219 6.5.2DAC0832芯片的应用221 6.6开关量输入输出接口226 习题227 第7章MCS51单片机的通信接口技术228 7.1RS232接口通信228 7.1.1RS232基本原理228 7.1.2单片机与PC的RS232接口通信229 7.2RS485接口通信234 7.3IIC总线接口通信234 7.3.1IIC总线主要特点234 7.3.2IIC总线工作时序235 7.3.3IIC总线操作指令格式236 7.3.4IIC总线EEPROM芯片的应用 236 7.4SPI总线接口通信245 7.4.1SPI总线工作原理245 7.4.2SPI总线芯片ADC0832的应用246 7.5CAN总线接口通信251 7.5.1CAN通信总线原理251 7.5.2常用的CAN总线芯片252 7.5.3CAN总线应用253 7.6USB总线接口通信254 7.6.1USB通信总线原理254 7.6.2常用的USB通信总线芯片255 7.6.3USB 1.1通信总线应用256 习题257 第8章单片机应用系统设计258 8.1系统设计总体规划258 8.1.1单片机应用系统设计流程258 8.1.2硬件系统设计原则260 8.1.3软件系统设计原则260 8.2电子密码锁设计260 8.2.1硬件电路设计261 8.2.2软件程序设计261 8.3GPS定位终端设计263 8.3.1硬件电路设计263 8.3.2软件程序设计264 8.4电子日历设计268 8.4.1硬件电路设计268 8.4.2软件程序设计271 8.5温度检测器设计271 8.5.1硬件电路设计271 8.5.2软件程序设计275 8.6电梯内部控制器设计276 8.6.1硬件电路设计277 8.6.2软件程序设计278 8.7直流电机温控调速器279 8.7.1硬件电路设计280 8.7.2软件程序设计282 8.8RFID读卡器设计282 8.8.1硬件电路设计283 8.8.2软件程序设计284 8.9ZigBee物联网结点设计285 8.9.1ZigBee物联网整体结构285 8.9.2温湿度结点的硬件电路设计286 8.9.3软件程序设计288 第9章嵌入式操作系统应用基础290 9.1嵌入式操作系统介绍290 9.1.1嵌入式计算机系统体系结构290 9.1.2嵌入式操作系统主要功能292 9.1.3典型的嵌入式操作系统293 9.2RTX51 Tiny操作系统基本功能294 9.2.1RTX51 Tiny特性294 9.2.2RTX51 Tiny的任务管理294 9.2.3RTX51 Tiny的系统函数297 9.2.4使用RTX51 Tiny编程时注意事项299 9.2.5RTX51 Tiny的系统配置300 9.2.6RTX51 Tiny的编程规则302 9.3RTX51 Tiny操作系统应用实例303 9.3.1多路跑马灯303 9.3.2矩阵式键盘扫描识别306 9.3.3秒表308 9.3.4串口通信311 习题314 第10章便携式单片机学习板介绍315 10.1SLG1型便携式单片机学习板特点315 10.2原理图设计315 10.2.1总体设计315 10.2.2各模块单元设计317 10.3例程设计322 第11章单片机应用系统开发工具323 11.1Keil μVision集成开发环境的使用323 11.1.1工程文件的建立323 11.1.2在工程中添加程序文件325 11.1.3编译和连接工程文件,形成目标文件325 11.1.4调试运行,观察结果326 11.1.5仿真环境的设置328 11.2Proteus仿真软件介绍332 11.3电路设计开发工具Altium Designer介绍337 附录AMCS51单片机指令表338 A.1数据传输类指令338 A.2算术运算类指令339 A.3逻辑操作类指令340 A.4位操作类指令341 A.5控制转移类指令342 附录BC51的库函数343 B.1专用寄存器头文件regxx.h343 B.2字符函数库ctype.h343 B.3一般输入输出函数库stdio.h344 B.4字符串函数库string.h345 B.5标准函数库stdlib.h347 B.6数学函数库math.h348 B.7预定义宏函数库absacc.h349 B.8内部函数库intrins.h349 参考文献351
第5章chapter5
MCS51单片机内部资源及编程1.1微型计算机简介MCS51系列单片机的内部资源主要有并行I/O口、定时器/计数器、串行接口以及中断系统,MCS51系列单片机的大部分功能就是通过对这些资源的利用来实现的。 5.1并行输入输出接口 MCS51系列单片机有4个8位的并行输入输出接口P0、P1、P2和P3。这4个接口既可以并行输入输出8位数据,也可以按位方式独立地使用每一位作为输入输出接口。其中,P0 口是一个8位漏极开路的双向I/O接口,在用作通用I/O接口时,P0 口必须外接上拉电阻;此外在连接外存储器使用时,P0口被用作低8位地址及数据总线接口。P1、P2和P3是带内部上拉电阻的8位双向I/O 接口,都具有直接驱动负载能力。此外P2 口在连接外存储器使用时,被用作高8位地址总线接口;而P3口除用作通用I/O接口使用外,还用于实现特殊功能。这里先介绍它们用作通用I/O口的编程。 【例51】利用MCS51单片机的P0口接2个发光二极管,P1口接2个开关,编程实现,当P1.X连接的开关动作时,对应的P0.X连接的发光二极管亮或灭。 设计思路: 先把P1口的内容读出,然后把读取的P1口的开关状态通过P0口输出,即可控制发光二极管的亮或灭。电路原理图 如图5.1所示。 汇编程序如下: ORG0000H LJMPSTAR ORG 0100H STAR: MOV P0,#0FFH LOOP: MOV A,P1 MOV P0,A SJMP LOOP END C51语言程序如下: #include sbit S1 = P1^0;sbit S2 = P1^1; sbit LED1 = P0^0; sbit LED2 = P0^1; void main() { while(1) {LED1 = S1;LED2 = S2; } } 图5.1利用并行接口开关控制LED灯的应用 ◆单片机原理与应用系统设计(第2版)第◆5章MCS51单片机内部资源及编程5.2定时/计数器接口〖*4/5〗5.2.1定时/计数器的主要特性MCS51系列单片机中,51子系列有两个16位的可编程定时/计数器T0和T1,52子系列有三个16位的可编程定时/计数器T0、T1和T2。它们既可以编程为定时器使用,通过对内部机器周期计数来实现定时功能;也可以编程为计数器使用,通过对外部输入端脉冲信号周期进行计数来实现计数功能。用来计数的特殊功能寄存器是TH0和TL0(或TH1和TL1)。每个定时/计数器用作定时器方式还是计数器方式,要通过对特殊功能寄存器TMOD的编程来选择。 每个定时/计数器都有多种工作模式,其中T0有四种工作模式;T1和T2有三种工作模式。其工作模式的设定是通过对特殊功能寄存器TMOD的编程来选择的。 每一个定时/计数器有启动、停止和溢出三种工作状态,启动和停止状态是通过对特殊功能寄存器TCON的编程来控制的;溢出状态是当定时计数时间到时产生溢出,由硬件自动将特殊功能寄存器TCON的溢出标志位置位。溢出状态可以通过查询或中断方式来处理。 定时/计数器是MCS51系列单片机的重要功能模块之一,在工业控制、检测、智能仪器等产品中使用非常广泛。这部分内容的学习目标是: (1) 理解定时/计数器T0和T1的工作原理。 (2) 掌握特殊功能寄存器TMOD、TCON、TH0和TL0(或TH1和TL1)的功能和使用,即会设定定时/计数器的工作方式: 定时器方式和计数器方式。 会设定定时/计数器的四种工作模式: 模式0~3。 会控制定时/计数器的启动和停止。会通过查询或中断方式来处理溢出。 (3) 学会定时/计数器的编程和使用。 5.2.2定时/计数器T0、T1的工作原理 MCS51系列单片机的定时/计数器T0和T1是由加法计数器、方式控制寄存器TMOD和状态控制寄存器TCON等组成,其基本结构如图5.2所示。其中,加法计数器是定时/计数器的核心,其作用是对内部机器周期或外部输入信号的周期进行计数,它是用8位的特殊功能寄存器TH0、TL0及TH1、TL1来表示, TH0和TL0用于表示定时/计数器T0加法计数器的高8位和低8位;TH1和TL1用于表示定时/计数器T1加法计数器的高8位和低8位。方式控制寄存器TMOD用于设定定时/计数器的工作方式和工作模式;状态控制寄存器TCON用于控制定时/计数器的启动、停止和溢出。 图5.2定时/计数器T0和T1的结构框图 定时/计数器有两种工作方式: 定时器方式和计数器方式。 当用作定时器时,加法计数器在每个机器周期TCY内都做加1计数,即为内部机器周期计数,由于一个机器周期包含12个振荡周期,因此其计数的速率是振荡频率的1/12。当计数值满,产生溢出(即加法计数器最高位产生进位)时,便自动将TCON的溢出标志位置“1”(如果预先设置了允许定时器中断,则同时还向CPU请求中断)。 此时,从加法计数器计数开始到产生溢出所经历的计数时间就是定时器的定时时间。 例如,定时/计数器T0的加法计数器的初值是X,其最大计数值(即满值)是M,当用作定时器时,加法计数器从计数开始到溢出所经历的计数值N为: 计数值N=最大计数值M-初值X 定时时间 =计数值N×机器周期=计数值N×振荡周期fOSC/12 这里需要注意的是,在不同的工作模式下,加法计数器的使用位数不同,因此其最大计数值(满值)是不一样。 当用作计数器时,加法计数器对单片机引脚输入端T0(P3.4)或T1(P3.5)上的外部脉冲输入信号进行计数(即检测到一个1→0的跳变时使加法计数器加1),由于识别一个从1至0的跳变至少要用到两个机器周期(即一个机器周期检测到1,下一个机器周期检测到0),因此计数的最高速率是振荡频率的1/24。当计数值满,产生溢出(即加法计数器最高位产生进位)时,便自动将TCON的溢出标志位置1(如果预先设置了允许定时器中断,则同时还向CPU请求中断)。此时,从加法计数器计数开始到产生溢出所经历的时间就是计数器的计数时间。 这里需要注意的是,在使用计数器方式时,为了能准确对每一个外部输入脉冲信号进行计数,外部输入脉冲信号的频率应小于振荡频率的1/24。 5.2.3定时/计数器的特殊功能寄存器 与定时/计数器使用相关的特殊功能寄存器有: 方式控制寄存器TMOD、状态控制寄存器TCON、定时/计数器T0(或T1)的加法计数器高8位TH0(或TH1)和低8位TL0(或TL1)。 ……
你还可能感兴趣
我要评论
|