单片机原理及应用
2006-6
大连理工大学出版社
黄河,郭纪林 主编
254
MCS—51系列单片机的出现,确立了单片机作为微控制器(MCU)的地位,引起了微型计算机领域的新变革。在品种众多的单片机中,MCS—51 系列单片机以其结构的完整、特殊功能寄存器的规范以及指令系统的通俗易懂等特色,成为单片机的主流机型。 作为典型嵌入式系统的单片机,在我国大规模应用已有十余年的历史。在全国高等工科院校中已普遍开设了单片机及其相关课程。单片机已成为电子系统设计中应用最普遍的一个部分。除了单独设置课程外,在许多实践环节如课程设计、毕业设计、课题论文中,单片机系统中也都得到了最广泛的应用。近年来,在各高校还大力推行各种电子设计竞赛。采用单片机系统来解决各类电子技术问题已成趋势。因此,更好地解决高等工科院校单片机及其相关课程教材具有十分重要的意义。 本书以MCS—51 系列单片机为主线,从培养实用能力的角度出发,采用教、学、练为一体的教学模式,通过大量的应用实例,指导读者在实践中掌握单片机实用技术所需的基础知识和基本技能。本书还详细介绍了目前国内外使用较为广泛的调试软件Keil 在系统设计中的应用。本书在编写过程中将应用实例穿插在基础理论中讲解,力求读者将理论与实践相结合。 本书的作者都是多年从事单片机教学和设计的双师型教师,他们既有丰富的理论知识,又有一定的实戏经验,深刻地体会到一本好的教材对于教学和工程实际的重要性。因此,本书的作者是将该教材在教学和实践中使用多年后再出版,同时借鉴了市场上大量的相关教材,做了很大的修改,希望能做到既满足普通高校老师的教,又能适合学生的学,同时为社会上的培训学员也提供一份易学好懂的实用教材,总之全书具有较强的系统性、先进性和实用性。内容安排由浅入深,采用大量实例辅助概念及功能进行讲解,图文并茂,语言精练,通俗易懂。在每一章的开始都有内容介绍,章后有小结,并且附有典型实例,供读者复习和自测。本书可作为高等本科院校电子信息技术、计算机与通信技术、机电一体与自动化等专业的单片机课程教材和相关工程技术人员的单片机技术参考用书。 本教材由东华理工学院黄河、南昌大学郭纪林任主编,东华理工学院徐猛华、东华理工学院黄永忠、东华理工学院张兰任副主编。具体编写分工如下:第1 、3 、9 章由黄河编写;第2 、6 、8 章由徐猛华编写;第4 、5 、7 章由黄永忠编写。全书由郭纪林、张兰统稿定稿。大连水产学院职业技术学院的李明老师审阅了全部书稿。 尽管我们在探索《 单片机原理及应用》 教材特色建设的突破方面作出了许多努力,但是由于作者的水平有限,教材中难免存在疏漏之处,恳请各相关教学单位和读者在使用本教材的过程中给予关注,并将意见和建议及时反馈给我们,以便下次修仃时改进。
第1章 单片机基础知识 1.1 单片机的特点 1.2 单片机的发展 1.3 单片机的应用 1.4 微机中的数据 小结 习题第2章 MCS-51单片机系统结构 2.1 MCS-51单片机总体结构 2.2 MCS-51单片机存储器组织 2.3 MCS-51单片机时钟电路与时序 2.4 MCS-51单片机的工作方式与复位状态 小结 习题第3章 MCS-51单片机指令系统 3.1 概述 3.2 指令的寻址方式 3.3 MCS-51单片机指令系统分类 3.4 MCS-51单片机指令汇总表 小结 习题第4章 MCS-51汇编语言程序设计 4.1 伪指令 4.2 程序设计的方法 4.3 程序设计举例 小结 例题第5章 MCS-51单片机内部模块 5.1 输入/输出并行端口 5.2 中断系统 5.3 定时器/计数器 5.4 串行接口 小结 习题第6章 MCS-51单片机系统扩展技术 6.1 MCS-51单片机系统扩展原理 6.2 存储器扩展 6.3 并行接口扩展 6.4 串行通信接口扩展 6.5 D/A转换接口 6.6 A/D转换接口第7章 单片机系统的基本I/O设备接口 7.1 键盘接口 7.2 显示器LED接口 7.3 微型打印机接口 7.4 液晶显示器LCD接口 小结 习题第8章 单片机应用系统的研制 8.1 单片机应用系统的设计步骤 8.2 单片机开发系统 8.3 单片机应用系统开发实例 小结第9章 单片机实验 9.1 单片机实验系统介绍 9.2 软件实验 9.3 硬件实验 小结
(1)低128单元。在指令中直接以单元地址形式给出(00H~7FH)。 (2)专用寄存器。专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。应当指出,直接寻址是访问专用寄存器的惟一方法。 3.寄存器寻址 寄存器寻址是指操作数放在指令中给出的工作寄存器中。指定了寄存器就能得到操作数。在寄存器寻址方式的指令中以符号名称来表示寄存器。例如指令: MOVA,Rl 将R1中的内容送到A中 寄存器寻址方式的寻址范围包括: (1)专用寄存器。专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出,如累加器A、寄存器B及数据指针DPTR等。例如: MOVA,DPL等价于MOVA,82H (2)寄存器寻址的主要对象是通用寄存器,通用寄存器共有4组。通用寄存器共有32个,寄存器寻址只能使用当前寄存器组。因此,指令中的寄存器名称只能是R0~R7。在使用本指令前,有时需通过对PSW中的RS1、RS0位的状态设置,来进行对当前寄存器组的选择。 4.寄存器间接寻址 从一个问题谈起:某程序要求从片内RAM的30H单元开始,取20个数,分别送人累加器A。也就是从30H、3lH、32H、33H、……、43H单元中取出数据,依次送人A中。就目前掌握的方法而言,要从30H单元取数,就用指令“MOVA,30H”;下一个数在31H单元中,只能用“MOV A,31H”。因此取20个数,就要用20条指令才能完成。这个例子中只有20个数。如果要送200个数,就要写上200条指令。用这种方法未免太笨了,所以应当避免用这样的方法。出现这种情况的原因是,到目前为止我们只会把地址的具体数值写在指令中。 这样就要寻找解决问题的思路。直接寻址解决了把操作数直接写在指令中(立即寻址)而带来的问题——调用过程中参数要能够发生变化。这种寻址方式把操作数放在一个内存单元中,然后把这个内存单元的地址写在指令中,绕了一个弯解决了问题。这里遇到的问题是由把内存地址的具体数值直接放在指令中而造成的,所以要解决这个问题,就要设法把这个具体的数值去掉。一种想法就是把代表地址的数值不放在指令中,而是放入另外一个内存单元中,就有可能解决问题。 寄存器间接寻址就是为了解决这一类问题而提出的。