描述
开 本: 32开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302449201丛书名: 高等学校信息类专业精品资源共享课规划教材
本书首先以“用单片机点亮一盏灯”为实例,让初学者快速掌握单片机应用系统的开发工具,提高初学者对单片机应用系统设计与开发的认知和兴趣。在51系列单片机汇编语言及其应用程序设计、51系列单片机基本内部资源及其应用系统设计、51系列单片机常用接口及其应用系统设计、51系列单片机测控技术及其应用系统设计、51系列单片机应用系统实物设计等章节知识点的介绍过程中,均以较完整的单片机应用系统设计为实例,对单片机原理和应用技术及其应用系统设计进行深入的论述,把单片机原理及其应用技术与单片机应用系统设计有机地结合起来,使学生在系统地掌握单片机原理和应用技术的同时,切实提高其单片机应用系统设计与开发能力。
本书给出了所有实例的电路原理图及汇编语言源程序或C语言源程序,且所有实例均在Proteus 7.8和Keil μVision4软件平台上仿真通过,可直接运行。
本书既可作为高等院校相关专业的本科生及高职高专学生教材,也可作为学生实验及课程设计的配套教材,同时也可作为电子设计工程师培训教材,以及广大单片机爱好者自学使用的指导资料。
目录
第1章概述
1.1计算机、微型计算机与单片机
1.2单片机的内部组成
1.3单片机的分类和主要指标
1.3.1单片机的分类
1.3.2单片机的主要指标
1.4常用单片机系列及其特点
1.5单片机的特点
1.6单片机应用系统
1.7单片机的应用领域
课外设计作业
第2章单片机应用系统的设计与开发环境
2.1用单片机点亮一盏灯实例
2.2Proteus 7.8开发平台
2.3Keil C51的使用方法
2.4Proteus VSM 虚拟系统模型
2.5Proteus ARES的PCB设计
课外设计作业
第3章51系列单片机的基本硬件结构及其功能
3.1单片机的封装形式及其引脚识别方法
3.1.1单片机的封装形式
3.1.2单片机的引脚识别方法
3.251系列单片机的引脚及功能
3.351系列单片机的总线结构
3.4单片机中的数制
3.551系列单片机的内部结构
3.5.1运算器
3.5.2控制器
3.5.3振荡器
3.5.4CPU时序
3.5.5存储器
3.5.6单片机工作原理实例分析
3.651系列单片机的复位电路与复位状态
3.6.1复位电路
3.6.2复位状态
3.751系列单片机的低功耗方式
3.7.1方式设定
3.7.2空闲(等待、待机)工作方式
3.7.3掉电(停机)工作方式
3.851系列单片机的最小系统
课外设计作业
第4章51系列单片机汇编语言及其应用程序设计
4.151系列单片机指令系统与寻址方式
4.1.151系列单片机指令系统概述
4.1.251系列单片机的寻址方式
4.1.351系列单片机指令系统
4.251系列单片机汇编语言程序结构
4.2.1汇编语言的指令类型
4.2.2汇编语言的伪指令
4.2.3汇编语言的汇编
4.2.4汇编语言格式
4.2.5汇编语言程序结构
4.351系列单片机汇编语言程序设计
4.3.1程序设计
4.3.2程序设计语言
4.3.3汇编语言程序设计步骤与方法
4.3.4汇编语言程序设计实例
课外设计作业
第5章51系列单片机基本内部资源及其应用系统设计
5.1并行输入/输出(I/O)端口及其应用系统设计
5.1.1P0口结构、功能及操作
5.1.2P1口结构、功能及操作
5.1.3P2口结构、功能及操作
5.1.4P3口结构、功能及操作
5.1.5并行输入/输出端口应用系统设计
5.2定时/计数器及其应用系统设计
5.2.1定时/计数器的结构及其工作原理
5.2.2定时/计数器的工作方式
5.2.3定时/计数器应用系统设计
5.3中断及其应用系统设计
5.3.1中断的基本概念
5.3.2中断源
5.3.3中断控制
5.3.4中断响应
5.3.5中断应用系统设计
5.4串行口通信及其应用系统设计
5.4.1数据通信方式
5.4.2串行通信方式
5.4.3串行口的功能与结构
5.4.4串行口控制寄存器
5.4.5串行口的工作方式
5.4.6波特率的确定
5.4.7串行口的初始化
5.4.8两个单片机串行通信应用系统设计
5.4.9串行口扩展应用系统设计
课外设计作业
第6章51系列单片机常用接口及其应用系统设计
6.1LED数码管及其应用系统设计
6.1.1LED数码管的结构与分类
6.1.2LED数码管的显示方式
6.1.3LED数码管应用系统设计
6.2液晶显示器及其应用系统设计
6.2.1液晶显示器概述
6.2.2LCD液晶显示器的分类
6.2.31602字符型LCD液晶显示模块
6.2.4基于1602LCD的液晶显示应用系统设计
6.3键盘及其应用系统设计
6.3.1键盘的工作原理
6.3.2独立式键盘与矩阵式键盘
6.3.3键编码与键值
6.3.4键盘应用系统设计
6.4A/D转换器及其应用系统设计
6.4.1A/D转换器概述
6.4.2A/D转换器与单片机的接口
6.4.3A/D转换器芯片ADC0808
6.4.4基于ADC0808的A/D转换器与单片机的接口应用系统设计
6.5D/A转换器及其应用系统设计
6.5.1D/A转换器概述
6.5.2D/A转换器与单片机的接口
6.5.3D/A转换器芯片DAC0832
6.5.4基于DAC0832的D/A转换器与单片机的接口应用系统设计
课外设计作业
第7章51系列单片机测控技术及其应用系统设计
7.1智能传感器及其应用系统设计
7.1.1智能传感器概述
7.1.2智能传感器的主要功能和特点
7.1.3智能传感器的实现途径和主要形式
7.1.4数字温湿度传感器SHT1x
7.1.5基于SHT10的智能传感器应用系统设计
7.2直流电动机及其应用系统设计
7.2.1直流电动机概述
7.2.2直流电动机控制原理
7.2.3常用直流电动机的驱动电路
7.2.4PWM信号产生的方法
7.2.5基于L298N的直流电动机控制系统设计
7.3步进电动机控制系统设计
7.3.1步进电动机概述
7.3.2步进电动机的种类和主要技术指标
7.3.3四相五线步进电动机28BYJ48的驱动
7.3.4基于ULN2003A的步进电动机控制系统设计
7.4RS485多机远程通信及其应用系统设计
7.4.1RS485接口概述
7.4.2RS485接口芯片及其使用方法
7.4.3MAX487芯片及其工作原理
7.4.4单片机之间的主从式多机通信
7.4.5基于MAX487的多机远程通信系统设计
课外设计作业
第8章51系列单片机应用系统实物设计
8.1单片机应用系统的一般硬件构成
8.2单片机应用系统设计的主要内容
8.3单片机应用系统的设计过程
8.3.1系统总体设计
8.3.2硬件系统设计
8.3.3软件系统设计
8.3.4系统联机调试
8.3.5性能测试
8.3.6生成正式产品
8.4基于51系列单片机的被动红外探测系统设计
8.4.1红外探测技术概述
8.4.2红外探测原理
8.4.3YL38红外探测模块
8.4.4被动红外探测系统实物设计
8.5基于51系列单片机的超声波测距系统设计
8.5.1超声波测距技术概述
8.5.2超声波测距原理
8.5.3HCSR04超声波测距模块
8.5.4锁存器74HC373
8.5.5超声波测距系统实物设计
课外设计作业
附录AMCS51系列单片机指令一览表
参考文献
前言单片机是单片微型计算机(Single Chip Microcomputer)的简称,自20世纪70年代问世以来,由于其具有集成度高、处理功能强、可靠性好、系统结构简单、体积小、速度快、功耗低、价格低廉等特点,在武器装备、航空航天、机器人、智能仪器仪表、工业检测控制、机电一体化、家用电器等许多领域得到了广泛的应用,并对人类社会产生了巨大的影响。同时,单片机的学习、开发和应用,也造就了一大批计算机应用与智能化控制的人才。目前,单片机技术已经成为从事智能化产品开发工作的工程人员必备的技术。在工科院校,单片机原理与应用已成为非常重要的专业基础课,单片机的应用能力成为当代工科大学生一种不可或缺的技能。单片机原理与应用课程涉及的内容非常广泛,如何使学生在有限的时间内(课程教学一般为32~56学时)较好地掌握单片机的基本原理和应用技术,对单片机应用系统进行初步的设计和开发是一个非常重要的教学研究课题。传统的单片机原理与应用课程教学模式中的教学顺序一般为单片机的指令系统、汇编语言程序设计、C语言程序设计、I/O口、定时/计数器、中断系统、串行通信、I/O扩展、A/D转换、D/A转换等。在这种教学模式中,实验往往放在教学课程的中期,甚至是教学课程结束后。由于课程开始的时候,大多数学生学习目标不明确,有的甚至不知道单片机是用来做什么的,再加上学习内容枯燥乏味,所以学习兴趣不大,学习积极性不高,导致几周教学过后,学生的学习兴趣全无。这时即便是开始实验,许多学生也有了厌倦的感觉,有的干脆就放弃了。同时,目前的实验大多使用单片机实验箱,这种实验与实际的单片机应用系统设计开发在过程上有很大的差异,致使学生完全没有掌握单片机的硬件系统设计,不熟悉软件的编程、汇编及写入单片机的整个过程,当遇到实际的开发项目时,总是感到无从下手。这种课程教学模式与高校的现代实用型人才培养模式是完全相悖的,已经不能满足当前的教学需要。近几年来,为了提高教学质量,培养更多的高级应用型人才,课题组以单片机原理与应用课程为核心开展了以设计为主线、面向学生实践能力培养的课程教学改革探索与实践,建设了精品资源共享课《单片机原理与应用》,参与了教育部以设计为主线、面向学生能力培养的人才培养模式课题的实施工作,在课程教材编写的内容和方式方法、课堂教学的内容和方式方法、实验教学的内容和方式方法、考试考核的内容和方式方法、综合成绩评定的内容和方式方法、课程教学质量保障体系等一系列涉及教与学的各个方面,进行了大胆的探索与实践,并取得了较好的成效。学生的设计能力得到了大幅度提高,自信心显著增强,精神面貌焕然一新,为他们后续的课程学习和顺利走上工作岗位奠定了坚实的基础。目前高等院校单片机原理与应用课程所使用的教材,大多偏重于单片机原理和编程语言的论述,对于没有单片机应用系统开发经验的初学者很难快速理解、消化和吸收,以至于最后许多学生对单片机原理和应用技术只是概略的了解,根本不能够进行单片机应用系统的设计与开发。与此相反,许多应用于企业员工培训、以设计为主的培训教材,往往是针对具有一定单片机应用系统开发经验的人员所编著的,主要强调单片机应用系统的设计方法和技巧,对单片机的原理和应用技术很少提及。初学者只能是被动地掌握单片机应用系统的设计方法,对单片机原理和应用技术不能够系统地掌握,在单片机应用系统的设计和开发过程中,不能与单片机原理和应用技术较好地联系起来,因此影响了单片机应用系统综合开发能力的后期培养。为使单片机原理与应用系统设计的初学者,能够快速提高对单片机应用系统设计与开发的兴趣和爱好,在较短的时间内系统地掌握单片机原理和应用技术,顺利进行单片机应用系统的设计与开发,为后续的学习和工作奠定坚实的基础,特编著此书。本书的主要特点如下。(1) 为学生提供一种强调工程基础,建立在真实世界的产品和系统的“构思—设计—实现—运行”全过程的工程教育。本书首先以“用单片机点亮一盏灯”为实例,让初学者快速掌握单片机应用系统的开发工具,提高初学者对单片机应用系统设计与开发的认知和兴趣。在后续的每一个知识点的介绍过程中,在对单片机原理和应用技术进行简要论述的基础上,均以较完整的单片机应用系统设计为实例,把单片机理论和应用技术与单片机应用系统设计实践有机地结合起来,进一步对单片机原理和应用技术进行深入的论述,使学生在系统地掌握单片机原理和应用技术理论的同时,完整地掌握“构思—设计—实现—运行”全过程的工程设计,切实提高学生的单片机应用系统的设计与开发能力。(2) 以完整的单片机应用系统设计为主,为初学者提供一种得心应手的学习工具。在本书中,单片机应用系统设计实例均包含系统设计要求、系统设计分析、系统原理图设计、系统程序流程图设计、系统汇编语言源程序设计或C语言源程序设计、在Keil中对程序进行仿真调试、在Proteus中进行系统仿真调试,或在Keil和Proteus中进行系统联合仿真调试等,使初学者在没有教师指导的情况下,按照系统设计实例的操作步骤,也能够很好地进行单片机应用系统的设计,切实提高学习兴趣、学习积极性和学习成效。(3) 以单片机原理的学习和应用系统设计为主,以编程语言的学习为辅。本书按照工程设计的思想,在每一个具体的单片机应用系统设计的过程中,让学生根据系统设计的需要,进行单片机原理的学习和应用系统设计,在系统设计过程中,较好地掌握编程语言的使用和程序设计的方法,切实培养工程设计能力。(4) 在单片机原理的学习和应用系统设计的过程中,以汇编语言程序设计为主,同时兼顾C语言程序设计,使学生在快速掌握单片机的原理和应用技术的同时,把汇编语言程序设计与C语言程序设计有效地结合起来,较好地进行单片机应用系统的设计和开发。(5) 课外作业以设计性作业为主。在课程教学实例的基础上,合理地设计一系列综合性的课外设计作业,进一步提高学生单片机应用系统的设计能力,激发其兴趣,培养其爱好,提高其自信心和成就感,让学生在反反复复的设计过程中较好地掌握单片机应用系统的设计思路和方法。(6) 以仿真设计为主,以实物设计为辅,使初学者在快速掌握单片机原理及应用系统设计的基础上,通过大量的单片机应用系统的仿真设计,积累一定的单片机应用系统的设计和开发经验,同时能够基本掌握单片机应用系统实物设计的方法,通过后续的以单片机应用系统实物设计为主的综合设计训练后,可以较好地进行单片机应用系统实物的设计。本书共分8章,各章主要内容如下。第1章,概述。主要论述计算机、微型计算机与单片机相互之间的关系,单片机的结构与组成,单片机的分类和指标,常用单片机系列及其特点,单片机应用系统和应用领域等。第2章,单片机应用系统的设计与开发环境。简要论述单片机应用系统设计与开发的硬件和软件环境等,并以“用单片机点亮一盏灯”为应用实例,重点介绍Proteus和Keil C51开发平台的基本使用方法。第3章,51系列单片机的基本硬件结构及其功能。主要内容包括51系列单片机的内部结构,引脚信号和微处理器。重点介绍微处理器中的运算部件、控制部件、振荡器、CPU时序和存储器的基本结构与工作原理等。第4章,51系列单片机汇编语言及其应用程序设计。主要内容包括51系列单片机指令系统与寻址方式,51系列单片机汇编语言程序结构及汇编语言程序设计。第5章,51系列单片机基本内部资源及其应用系统设计。主要内容包括51系列单片机最基本的并行输入/输出端口、定时/计数器、中断及串行输入/输出的基本原理及其应用系统设计。第6章,51系列单片机常用接口及其应用系统设计。主要内容包括LED数码管、LCD液晶显示器、键盘、A/D转换器和D/A转换器等51系列单片机的主要接口及其应用系统设计。第7章,51系列单片机测控技术及其应用系统设计。主要内容包括智能传感器探(检)测原理及其应用系统设计,直流电动机和步进电动机的控制原理及其应用系统设计,RS485多机远程通信原理及其应用系统设计。第8章,51系列单片机应用系统实物设计。主要内容包括单片机应用系统的一般硬件构成,单片机应用系统设计的主要内容和设计过程,并以红外探测系统和超声波测距系统作为设计实例,讲述单片机应用系统实物设计的具体过程和方法。在本书的编著过程中,除了参考文献所列出的书籍、文献和资料外,编者还参阅了其他书籍、文献和网上资料,在此向所有作者表示衷心的感谢。在本书的编著过程中,得到了编者所在学校各级领导及教研室各位教师的大力支持和帮助,在此向他们表示衷心的感谢。本书给出了所有实例的电路原理图及汇编语言源程序或C语言源程序,且所有实例均在Proteus 7.8和Keil μVision4软件平台上仿真通过,可直接运行。为了快速高效地提高学生的实际产品设计开发能力,本课题组推出了“单片机原理与应用系统设计实例实物开发平台”,本教材所有实例均可通过该平台快速设计出实物。在本书的编著过程中,段代峰、徐雷霆、张敏、顾佳杰、郭振、谢法威、侯良伟、柴建宇、张超群、苏永超、邓昭伟、蒋志举、翁盘江、杨子亮等本专业多届学生先后提出了许多有利于初学者学习和使用的意见和建议,在此也向他们表示衷心的感谢。感谢清华大学出版社的编辑为本书的编写提供许多宝贵建议和大力支持。由于编者知识水平和经验的局限性,书中难免存在不足之处,敬请广大读者批评指正。Email: [email protected]。编者2016年10月
51系列单片机是具有8051内核体系结构、引脚信号和指令系统完全兼容的单片机的总称,是指51系列单片机和其他公司的8051派生产品。虽然这些单片机产品在某些方面存在差异,但它们的基本结构和功能是相同的。3.1单片机的封装形式及其引脚识别方法3.1.1单片机的封装形式
芯片的封装是采用特定的材料将芯片或模块固化在其中以防损坏的保护措施,一般必须在封装后才能交付用户使用。芯片的封装方式取决于芯片安装形式和器件集成设计。芯片的封装技术已经历了好几代的变迁,从DIP、QFP、PGA、BGA到CSP,再到MCM,技术指标一代比一代先进,包括芯片面积与封装面积之比越来越接近于1,适用频率越来越高,耐温性能越来越好,引脚数增多,引脚间距减小,质量减小,可靠性提高,使用更加方便等。单片机的封装有DIP、PLCC、PQFP等多种形式,以适应不同产品的需求。各种封装形式简要说明如下。(1) DIP(Double Inline Package),双列直插式封装。插装型封装之一,引脚从封装两侧引出。封装材料有塑料和陶瓷两种。DIP是最普及的插装型封装,应用范围包括标准逻辑IC、存储器LSI、微机电路等。DIP单片机封装如图3.1(a)所示。(2) PLCC(Plastic Leaded Chip Carrier),塑封方形引脚插入式封装,外形呈正方形,四周都有引脚,引脚向内折起,外形尺寸比DIP封装小得多,可将引脚直接插入到对应的标准插座内。PLCC封装适合用SMT表面安装技术在PCB上安装布线,具有外形尺寸小、可靠性高的优点。PLCC单片机封装如图3.1(b)所示。(3) PQFP(Plastic Quad Flat Package),塑封方形引脚贴片式封装,外形呈正方形,四周都有引脚,引脚向外侧伸展,可直接将引脚敷贴在印刷板上焊牢。此封装要用贴片机焊接。PQFP封装的芯片引脚之间距离很小,引脚很细,一般大规模或超大规模集成电路采用这种封装形式。PQFP单片机封装如图3.1(c)所示。
图3.1单片机的封装形式
3.1.2单片机的引脚识别方法对DIP封装的单片机的型号及引脚识别方法如下。对于DIP封装的51系列单片机来说,在外壳正中央印有字(型号)的一面是它的正面,在单片机外壳的正面的一侧边有一个半月形的小坑,同时还有一个圆形的小坑在旁边。这两个标志说明离圆形小坑最近的引脚为单片机的1号引脚。把单片机印有型号的一侧朝上,1号引脚放在左手边,向右依次为2、3、4、…、20引脚,单片机上边沿从右到左为21、22、23、…、40引脚。对于其他所有的DIP封装的芯片,识别方法与此类同。对于其他封装的器件,方法与DIP封装的单片机引脚识别方法类似,也可参考实际的器件使用手册来找到引脚的排列。3.251系列单片机的引脚及功能51系列单片机最常用的是40引脚DIP集成电路芯片,由于单片机是一个芯片,体积较小,为了增加其功能,许多引脚具有两个功能,其引脚排列如图3.2所示。
图3.251系列DIP封装单片机引脚排列
现对51系列单片机各个引脚及其功能进行简要说明。1. 主电源引脚VCC(40脚): 接 5V电源; VSS(20脚): 接数字电路地。2. 外接晶体引脚XTAL1(19脚): 接外部石英晶体一端。在单片机内部,它是片内振荡器的反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部时钟时,对于HMOS单片机,该引脚接地,对于CHMOS单片机,该引脚作为外部振荡信号的输入端。XTAL2(18脚): 接外部石英晶体的另一端。在单片机内部,它是片内振荡器的反相放大器的输出端。当采用外部时钟时,对于HMOS单片机,该引脚作为外部振荡信号的输入端,对于CHMOS单片机,该引脚悬空不接。3. 输入/输出引脚P0口(32~39脚): P0.0~P0.7统称为P0口,是一组8位漏极开路型双向I/O口,也是地址/数据总线复用口。在访问片外存储器或程序存储器时,P0口分时复用为低8位地址总线和双向数据总线,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节。校验时,要求外接上拉电阻。P1口(1~8脚): P1.0~P1.7统称为P1口,是一组带内部上拉电阻的8位准双向I/O口。对于52系列,P1.0与P1.1还有第二功能: P1.0可用作定时/计数器2的计数脉冲输入端T2,P1.1可用作定时/计数器2的外部控制端T2EX。P2口(21~28脚): P2.0~P2.7统称为P2口,是一组带内部上拉电阻的8位双向I/O口,一般可作为准双向I/O口使用。在接有片外存储器或扩展I/O口且寻址范围超过256B时,P2口用作高8位地址总线。P3口(10~17脚): P3.0~P3.7统称为P3口,是一组带内部上拉电阻的8位双向I/O口,除作为准双向I/O口使用外,还可以将每一位用于第二功能,而且P3口的每一条引脚均可独立定义为第一功能的输入/输出或第二功能。P3口第二功能如表3.1所示。
表3.1P3口第二功能表
引脚功能
P3.0RXD串行口输入端P3.1TXD串行口输出端P3.2INT0外部中断0请求输入端,低电平有效P3.3INT1外部中断1请求输入端,低电平有效续表
引脚功能
P3.4T0定时/计数器0计数脉冲输入端P3.5T1定时/计数器1计数脉冲输入端P3.6WR外部数据存储器写选通信号输出端,低电平有效P3.7RD外部数据存储器读选通信号输出端,低电平有效
4. 控制信号引脚RST/VPD(9脚): RST即RESET,VPD为备用电源,该引脚为单片机的上电复位或掉电保护端。当单片机振荡器工作时,该引脚上出现持续两个机器周期的高电平,就可实现复位操作,使单片机回复到初始状态。上电时,考虑到振荡器有一定的起振时间,该引脚上高电平必须持续10ms以上才能保证有效复位。当VCC发生故障,降低到低电平规定值或掉电时,该引脚可接上备用电源VPD( 5V)为内部RAM供电,以保证RAM中的数据不丢失。PSEN(29脚): 片外程序存储器读选通信号输出端,低电平有效。在从外部程序存储器读取指令或常数期间,在每个机器周期内该信号两次有效,以通过数据总线P0口读回指令或常数。在访问片外数据存储器期间,PSEN信号将不出现。ALE/PROG(30脚): 地址锁存有效信号输出端,高电平有效。在访问片外存储器期间,ALE(允许地址锁存)输出脉冲用于锁存P0端口8位复用的地址/数据总线上的8位地址(16位地址线中的低8位)。ALE信号通常连接到外部地址锁存器(如74HC373)的使能引脚上。在不访问片外程序存储器期间,ALE信号端仍以不变的频率周期性地出现正脉冲信号(振荡频率fOSC的1/6),可作为对外输出的时钟脉冲或用于定时的目的。在复位期间,ALE被强制输出高电平。对于片内含有EPROM的机型,在编程期间,该引脚用作编程脉冲PROG的输入端。EA/VPP(31脚): EA为片外程序存储器选用端。该引脚有效(低电平)时,只选用片外程序存储器,否则单片机上电或复位后选用片内程序存储器。对于片内含有EPROM的机型,在编程期间,此引脚用作2.1V编程电源VPP的输入端。3.351系列单片机的总线结构总线就是各种信号线的集合,是单片机各部件之间传送数据、地址和控制信息的公共通道。按相对于CPU与其芯片的位置,可分为片内总线和片外总线。片内总线是指在CPU内部各寄存器、算术逻辑部件ALU、控制部件及内部高速缓冲存储器之间传输数据所用的总线,即芯片内部总线。片外总线是CPU与内存RAM、ROM和输入/输出设备接口之间进行通信的数据通道。通常所说的总线(BUS)指的是片外总线。CPU通过总线实现程序存取命令、内存/外设的数据交换等。按照传递信息的类型,总线可分为数据总线DB(Data Bus)、地址总线AB(Address Bus)和控制总线CB(Control Bus)。对于51系列单片机,每种总线都包含一系列引脚,其中DIP封装引脚功能分类如图3.3所示。
图3.351系列单片机DIP封装引脚功能分类
数据总线是CPU与存储器、I/O接口、外设等部件之间传递数据的一组信号线,由P0口构成,是8位双向总线(89C2051无P0口,无总线),既可以由CPU向存储器、I/O接口、外设等部件传递数据,也可以由存储器、I/O接口、外设等部件向CPU传递数据。地址总线是CPU将地址传送给存储单元或I/O接口的一组信号线,由P2口和P0口构成,是16位单向总线,其中P2口提供地址的高8位,P0提供地址的低8位。控制总线主要用来传送控制信号和时序信号,由P3口的第二功能和控制信号引脚构成。在控制信号中,有的是CPU送往存储器和输入/输出设备接口电路的,如读/写信号、片选信号、中断响应信号等; 也有的是其他部件反馈给CPU的,如中断申请信号、复位信号、总线请求信号、设备就绪信号等。因此,控制总线的传送方向由具体控制信号而定,一般是单向的。3.4单片机中的数制所谓数制,就是利用符号和一定的规则进行计数的方法。在日常生活中,人们习惯的计数方法是十进制数,而数字电路中只有两种电平特性,即高电平和低电平,这也就决定了数字电路中使用二进制。1. 十进制十进制数大家都很熟悉,它的基本特点如下。(1) 共有10个基本数码: 0、1、2、3、4、5、6、7、8、9。(2) 逢十进一,借一当十。2. 二进制二进制数的基本特点如下。(1) 共有两个基本数码: 0、1。(2) 逢二进一,借一当二。十进制数1转换为二进制数是1B(这里用后缀B表示二进制数); 十进制数2转换为二进制数,因为已到2,则进1,所以对应的二进制数是10B; 十进制数3为11B,4为100B,5为101B。以此类推,当十进制数为255时,对应的二进制数是11111111B。从上面的过程可以看出,当二进制数转换为十进制数时,从二进制数的最右一位数起,最右边的第一个数乘以2的0次方,第二个数乘以2的1次方,以此类推,把各结果累计相加就是转换后的十进制数。如: 11010B=1×24 1×23 0×22 1×21 0×20=16 8 0 2 0=263. 十六进制二进制数太长了,书写不方便并且很容易出错,转换成十进制数又太麻烦,所以就出现了十六进制。十六进制数的基本特点如下。(1) 共有16个基本数码: 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。(2) 逢十六进一,借一当十六。十进制数的0~15表示成十六进制数分别为0~9、A、B、C、D、E、F,其中A对应十进制数10,B对应11,C对应12,D对应13,E对应14,F对应15。为了与十进制数相区分,一般在十六进制数的最后面加上后缀H,表示该数为十六进制数,如BH、46H等。但在C语言编程时是在十六进制数的最前面加上前缀0x,表示该数为十六进制数,如0xb、0x46等。这里的字母不区分大小写。4. 各进制数之间的相互转换一个4位二进制数共有16个数,正好对应十六进制的16个数码,这样一个1位十六进制数与一个4位二进制数形成一一对应的关系。而在单片机编程中使用最多的是8位二进制数,如果使用两位十六进制数来表示将变得极为方便。
表3.2十进制、二进制与十六进制0~15的对应表
十进制二进制十 六 进 制十进制二进制十 六 进 制000000810008100011910019200102101010A300113111011B401004121100C501015131101D601106141110E701117151111F
关于十进制、二进制与十六进制数之间的转换,要熟悉0~15之间的数的相互转换。十进制、二进制与十六进制0~15的对应关系如表3.2所示。表中的二进制数不足4位均在其前面补“0”。在进行单片机编程时常常会碰到其他较大的数,这时可用Windows系统自带的计算器,非常方便地进行二进制、八进制、十进制、十六进制数之间的任意转换。首先打开附件中的计算器,选择“查看”→“科学型”选项,其界面如图3.4所示。然后选择一种进制,输入数值,再单击需要转换的进制,即可得到相应进制的数。
图3.4Windows系统自带的计算器界面
3.551系列单片机的内部结构51系列单片机内部结构中包含运算器、控制器、片内存储器、中断系统、串行口、定时/计数器、并行I/O口、振荡器等功能部件,如图3.5所示。3.5.1运算器运算器是以算术逻辑单元(Arithmetic Logic Unit,ALU)为核心,再加上累加器ACC、寄存器B、暂存器TMP1和TMP2、程序状态字(Program Status Word,PSW)等部件构成的。它能实现数据的算术逻辑运算、位变量处理、数据传输等操作。1. 算术逻辑单元ALU、累加器ACC与寄存器B算术逻辑单元不仅能完成8位二进制的加、减、乘、除、加1、减1及BCD加法的十进制调整等算术运算,还能对8位变量进行逻辑“与”、“或”、“异或”、循环移位、求补、清零等逻辑运算,并具有数据传输、程序转移等功能。累加器(ACC,简称累加器A)为一个8位寄存器,它是CPU中使用最频繁的寄存器。进入ALU作算术和逻辑运算的操作数多来自于累加器A,运算结果也常送回累加器A保存。寄存器B是为ALU进行乘除法运算设置的,若不作乘除运算时,则可作为通用寄存器使用。2. 程序状态字寄存器程序状态字PSW是一个8位标志寄存器,用于存放程序运行的状态信息,以供程序查询和判别(字节地址D0H)。PSW中各位状态通常是在指令执行的过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。PSW各位定义格式如图3.6所示。
图3.551系列单片机内部结构
图3.6程序状态字寄存器各位定义格式
进位标志位CY(PSW.7): 在执行某些算术操作类、逻辑操作类指令时,可被硬件或软件置位或清零。它表示运算结果是否有进位或借位。如果在最高位有进位(加法时)或有借位(减法时),则CY=1,否则CY=0。辅助进位(或称半进位)标志位AC(PSW.6): 它表示两个8位数运算,低4位有无进/借位状况。当低4位相加(或相减)时,若D3位向D4位有进位(或借位)时,则AC=1,否则AC=0。在BCD码运算的十进制调整中要用到该标志位。用户自定义标志位F0(PSW.5): 用户可根据自己的需要对F0赋予一定的含义,通过软件置位或清零,并根据F0=1或0来决定程序的运行方式。工作寄存器组选择位RS1、RS0(PSW.4、PSW.3): 可用软件置位或清零,用于选定当前使用的4个寄存器组中的某一组。溢出标志位OV(PSW.2): 做加法或减法时,由硬件置位或清零,以指示运算结果是否溢出。OV=0反映运算结果超出了累加器的数值范围(无符号数的范围是0~255)以补码形式表示一个有符号数的范围是-128~ 127。做无符号数的加法或减法时,OV的值与进位C的值相同; 在做有符号数加法时,如最高位、次高位之一有进位,或做减法时,如最高位、次高位之一有借位,则OV被置位,即OV的值为最高位和次高位的异或(C7C8)。执行乘法指令MUL AB也会影响OV标志,积大于255时,OV=1,否则OV=0。执行除法指令时DIV AB也会影响OV标志,如B中所放除数为0时,OV=1,否则OV=1。奇偶标志位P(PSW.0): 在执行指令后,单片机根据累加器A中1的个数的奇偶性自动给标志置位或清零。若A中1的个数为奇数,则P=1,否则P=0。该标志对串行通信的数据传输非常有用,通过奇偶位校验传输的可靠性。3. 位处理位处理是51系列单片机ALU所具有的一种功能。单片机指令系统总的位处理指令集(17条位操作指令),存储器中的位地址空间,以及程序状态字寄存器PSW中的进位标志CY作为位操作“累加器”,构成了51系列单片机内的位处理机。它可对直接寻址的位(bit)变量进行位处理,如置位、清零、取反、测试转移,以及逻辑“与”、“或”等位操作,使用户在编程时可以利用指令完成原来单凭复杂的硬件逻辑所完成的功能,并可方便地设置标志。3.5.2控制器控制器即控制电路,是单片机的指挥控制器件,用于发出控制信号,指挥单片机各元器件协调工作,是单片机的神经中枢。控制电路包括定时与控制电路、程序计数器(Program Counter,PC)、指令寄存器(Instruction Register,IR)、指令译码器(Instruction Decoder,ID)、堆栈指针(Stack Pointer,SP)、数据指针寄存器(Data Pointer Register,DPTR),以及信息传送控制等部件。程序计数器(PC)是由16位(8 8)寄存器构成的计数器。要单片机执行一个程序,就必须把该程序按顺序预先装入存储器ROM的某个区域。单片机动作时应按顺序一条条取出指令来加以执行。因此,必须有一个电路能找出指令所在的单元地址,该电路就是程序计数器(PC)。当单片机开始执行程序时,给PC装入第一条指令所在的地址,它每取出一条指令(如为多字节指令,则每取出一个指令字节),PC的内容就自动加1,以指向下一条指令的地址,使指令能顺序执行。只有当程序遇到转移指令、子程序调用指令,或中断时,PC才转到所需要的地方去。CPU指定的地址,从ROM相应单元中取出指令字节放在指令寄存器IR中寄存,然后指令寄存器中的指令代码被指令译码器ID译成各种形式的控制信号,这些信号与单片机时钟振荡器产生的时钟脉冲在定时与控制电路中相结合,形成按一定时间节拍变化的电平和时钟,即所谓控制信息,在CPU内部协调寄存器之间的数据传输、运算等操作。指令寄存器IR存放当前从主存储器读出的正在执行的一条指令。当执行一条指令时,先把它从内存取到数据寄存器(Data Register,DR)中,然后再传送至IR。计算机执行一条指定的指令时,必须首先分析这条指令的操作码是什么,以决定操作的性质和方法,然后才能控制计算机其他各部件协同完成指令表达的功能。这个分析工作由译码器来完成。指令由操作码和地址码组成。操作码表示要执行的操作性质,即执行什么操作,或做什么,地址码是操作码执行时的操作对象的地址。为了执行任何给定的指令,必须对操作码进行测试,以便识别所要求的操作。指令译码器就是做这项工作的。指令寄存器中操作码字段的输出就是指令译码器的输入。它先以主振频率为基准发出CPU的时序,对指令进行译码。操作码一经译码后,即可向操作控制器发出具体操作的特定信号,完成一系列定时控制的微操作,用来协调单片机内部各功能部件之间的数据传送、数据运算等操作,并对外发出地址锁存ALE、外部程序存储器选通PSEN,以及通过P3.7和P3.6发出数据存取信号,并且接受处理外接的复位和外部程序存储器访问控制EA信号。3.5.3振荡器单片机的定时控制功能是由片内的时钟电路来完成的,而片内时钟的产生方式有两种: 内部时钟方式和外部时钟方式。1. 内部时钟方式
内部时钟方式是采用单片机内部振荡器来工作的,其内部包含了一个高增益的单级反相放大器,引脚XTAL1和XTAL2分别为片外反相放大器的输入端口和输出端口,其工作频率为0~33MHz。对于Intel 8051,工作频率为1.2~12MHz。当单片机工作于内部时钟方式时,只需在XTAL1引脚和XTAL2引脚连接一个晶体振荡器或陶瓷振荡器,并接两个电容后接地即可,如图3.7所示。
图3.7单片机外接晶体的接法
使用时,对于电容的选择有一定的要求,当外接晶体振荡器时,电容值一般选择C1=C2=30±10pF; 当外接陶瓷振荡器时,电容值一般选择C1=C2=40±10pF。在实际电路设计时,应该注意保证外接的振荡器和电容尽可能靠近单片机的XTAL1和XTAL2引脚,这样可以减少寄生电容的影响,使振荡器能够稳定可靠地为单片机CPU提供时钟信号。2. 外部时钟方式外部时钟方式是采用外部振荡器产生时钟信号,直接提供给单片机使用。对于不同结构的单片机,外部时钟信号接入的方式按不同工艺制造的单片机芯片,其接法各不相同,如表3.3所示。
表3.3单片机外部时钟接法
芯 片 类 型XTAL1接法XTAL2接法
MOS型接地接片外振荡脉冲输入端(带上拉电阻)CMOS型接片外振荡脉冲输入端(带上拉电阻)悬浮
对于普通的8051系列单片机,外部时钟信号由XTAL2引脚引入后直接送到单片机内部的时钟发生器,而引脚XTAL1则应直接接地,要注意,由于XTAL2引脚的逻辑电平不是TTL信号,因此建议外接一个上拉电阻。对于CMOS型的80C51、80C52、AT89S52等单片机,与普通的8051不同的是其内部时钟发生器的信号取自于反相放大器的输入端。因此,外部的时钟信号应该接到单片机的XTAL1引脚,而XTAL2引脚则悬空即可。外部时钟信号的频率应该满足不同单片机的工作频率要求,如普通的8051频率应该低于12MHz,对于AT89S52则为0~33MHz。如果采用其他的型号,则应具体参考该单片机的数据手册中的说明。3.5.4CPU时序计算机在执行指令时,是将一条指令分解为若干个基本的微操作,这些微操作所对应的脉冲信号在时间上的先后次序称为计算机时序。51系列单片机的时序由4种周期构成,即振荡周期、状态周期、机器周期和指令周期,各种周期的关系如图3.8所示。
图3.8各种周期的关系
(1) 振荡周期: 振荡脉冲的周期。(2) 状态周期: 两个振荡周期为一个状态周期,也称为时钟周期,用S表示。两个振荡周期作为两个节拍分别称为节拍1和节拍2。在状态周期的前半周期P1有效时,通常完成算术逻辑运算操作; 在后半周期P2有效时,一般进行内部寄存器之间的传输。(3) 机器周期: 一个机器周期包括6个状态周期,用S1、S2、…、S6表示,共12个节拍,一次可表示为S1P1、S1P2、S2P1、…、S6P1、S6P2。(4) 指令周期: 执行一条指令所占用的全部时间,它以机器周期为单位。51系列单片机除乘法、除法指令是4周期指令外,其余都是单周期指令和双周期指令。若用12MHz晶振,则单周期指令和双周期指令的指令周期时间分别为1μs和2μs,乘法和除法指令为4μs。各周期指令的CPU时序如图3.9所示。
图3.9各周期指令的CPU时序
从图3.9中可知,CPU在固定时刻执行某种内部操作,都是在S1P2和S2P1期间由CPU取指令,将指令码读入指令寄存器,同时程序计数器PC加1。双字节单周期指令在同一机器周期的S4P2再读第二字节,只是第一个ALE信号有效时读的是操作码,第二个ALE信号有效时读的是操作数。单字节单周期指令在S4P2虽也读操作码,但既是单字节指令,读出的还是原指令,故读后丢弃不用,PC也不加1。两种指令在S6P2结束时都会完成操作。如果是单字节双周期指令,则在两个机器周期内将4次读操作码,不过后3次读后都丢弃不用。3.5.5存储器多数单片机系统(包括51系列单片机)的存储器组织方式与通用微机系统不同,其程序存储器地址空间和数据存储器地址空间是相互独立的。51系列单片机存储器从物理结构上可分为片内、片外程序存储器(8031和8032没有片内程序存储器)与片内、片外数据存储器4个部分; 从功能上可分为程序存储器、片内数据存储器、特殊功能存储器、位地址空间和片外数据存储器5个部分; 其寻址空间可划分为程序存储器、片内数据存储器和片外数据存储器3个独立的地址空间。1. 程序存储器1) 编址与访问计算机在执行任务时,是按照事先编制好的程序命令一条条顺序执行的。程序存储器就是用来存放这些已编好的程序和表格常数,它由ROM或EPROM组成。计算机为了有序的工作,设置了一个专用寄存器——程序计数器PC,用以存放将要执行的指令地址。每取出指令的一个字节后,其内容就加1,指向下一个字节地址,使计算机从程序存储器取指令并加以执行,从而完成某程序操作。由于普通的51系列单片机的程序计数器为16位,因此可寻址的程序存储器的地址空间为64KB。51系列单片机在物理配置上有片内、片外程序存储器,但作为一个编址空间,其编址规律为先片内,后片外,片内、片外连续,两者一般不重叠。程序存储器编址方法如图3.10所示。
图3.10程序存储器编址方法
单片机执行指令时,是从片内程序存储器取指令,还是从片外程序存储器取指令,这首先由单片机EA引脚电平的高低来决定。EA=1时,先执行片内程序存储器的程序,当PC的内容超过片内程序存储器地址的最大值(51子系列为0FFFH,52子系列为1FFFH)时,将自动去执行片外程序存储器的程序。EA=0时,CPU则从片外程序存储器中取指令。对于片内无程序存储器的51系列单片机,EA引脚应接低电平。对于片内有程序存储器的单片机,如果EA引脚接低电平,将强行执行片外程序存储器的程序。此时在片外程序存储器中存放调试程序,以使单片机工作在调试状态。注意: 片外程序存储器的存放调试程序的部分,其编址与片内程序存储器的编址是可以重叠的,借EA的换接可实现分别访问。现在以8051位内核的单片机大都带有内部的FLASH程序存储器,如AT89C51或AT89S51均自带4KB的FLASH程序存储器,还有的单片机带有20KB甚至更大容量的程序存储器。2) 程序的入口地址程序地址空间原则上可由用户任意安排,但复位和中断源的程序入口地址在51系列单片机中是固定的,用户不能更改。这些入口地址如表3.4所示。
表3.451系列单片机复位和中断入口地址
操作入 口 地 址
复位0000H外部中断00003H定时/计数器0溢出000BH外部中断10013H定时/计数器1溢出001BH串行口中断0023H定时/计数器2溢出或T2EX端负跳变(52子系列)002BH
复位后,CPU从0000H地址开始执行程序。响应某个中断时,其地址为中断服务程序入口地址。表中的各个入口地址互相离得很近,只隔几个单元,容纳不下稍长的程序段。所以,其中实际存放的往往是一条无条件转移指令,使其分别跳转到用户程序真正的起始地址,或所对应的中断服务程序真正的入口地址。2. 数据存储器1) 编址与访问51系列单片机片内、片外数据存储器是两个独立的地址空间,应分别单独编址。其编址方法如图3.11所示。
图3.11数据存储器编址方法
片内数据存储器除RAM块外,还有特殊功能寄存器(SFR)块。对于51子系列,前者有128个字节,其编址为00H~7FH,后者也占128个字节,其编址为80H~FFH,两者连续而不重叠。对于52子系列,前者有256个字节,其编址为00H~FFH,后者占128个字节,其编址为80H~FFH,后者与前者高128个字节的编址是重叠的,由于访问所用的指令不同,因而并不会引起混乱。片外数据存储器一般是16位编址。如果只扩展少量片外数据存储器,且容量不超过256个字节,也可按8位编址,自00H开始,最大可至FFH。在这种情况下,地址空间与片内数据存储器重叠,但访问片内、片外用不同的指令,也不会引起混乱。片外数据存储器按16位编址时,其地址空间与片内存储器重叠,但也不会引起混乱,访问程序存储器是用PSEN信号选通,而访问片外数据存储器时,由RD信号(读)和WR信号(写)选通。2) 片内数据存储器51子系列单片机内RAM配置图如图3.12所示。由图可见,片内数据存储器共分为工作寄存器区、位寻址区、数据缓冲区3个区域。
图3.1251系列单片机片内RAM配置图
(1) 工作寄存器区。00H~1FH单元为工作寄存器区。工作寄存器也称为通用寄存器,用于临时寄存8位信息。工作寄存器分成4组,每组都有8个寄存器,用R0~R7来表示。程序中每次只有一组,其他各组不工作。使用哪一组寄存器工作由程序状态字PSW.3(RS0)和PSW.4(RS1)两位来选择,其对应关系如表3.5所示。通过软件设置RS0和RS1两位的状态,就可任意选一组工作寄存器工作。这个特点使51系列单片机具有快速现场保护功能,对提高程序效率和响应中断的速度是很有利的。
表3.5工作寄存器组的选择表
PSW.4(RS1)PSW.3(RS0)当前使用的工作寄存器组R0~R7000组(00H~07H)011组(08H~0FH)102组(10H~17H)113组(18H~1FH)
(2) 位寻址区。20H~2FH单元是位寻址区。这16个单元(共计128位)的每一位都赋予一个位地址,位地址范围为00H~7FH。位寻址区的每一位都可当作软件触发器,由程序直接进行位处理。通常可以把各种程序状态标志、位控制变量存放于位寻址区。(3) 数据缓冲区。30H~7FH单元是数据缓冲区,也即用户RAM区,共80个单元。由于工作寄存器区、位寻址区、数据缓冲区统一编址,使用同样的指令访问,因此这3个区的单元既有自己独特的功能,又可统一调度使用。前两个区未使用的单元也可作为一般的用户RAM单元,使容量较小的片内RAM得以充分利用。52子系列片内RAM有256个单元,前两个区的单元数与地址都和51子系列的一致,用户RAM区却为30H~FFH,有208个单元。3) 堆栈和堆栈指针堆栈是按先进后出或后进先出的规则进行读/写的特殊RAM区域。51系列单片机的堆栈区是不固定的,原则上可设置在内部RAM的任意区域内。实际应用中,要根据对片内RAM各功能区的使用情况而灵活的设置,应避开工作寄存器区、位寻址区和用户实际使用的数据区,一般设在2FH地址单元以后的区域。栈顶的位置由专门设置的堆栈指针寄存器SP指出。51系列单片机的SP是8位寄存器,堆栈属向上生长型的(即栈顶地址总是大于栈底地址,堆栈从栈底地址单元开始,向高地址端延伸),如图3.13所示。
图3.1351系列单片机堆栈
当数据压入堆栈时,SP的内容自动加1,作为本次进栈的指针,然后再存入数据。SP的值随着数据的存入而增加。当数据从堆栈弹出之后,SP的值随之减少。复位时,SP的初值为07H,堆栈实际上从08H开始堆放信息,即堆栈初始位置位于工作寄存器区内。为此,用户在初始化程序中要给SP赋初值以规定堆栈的初始位置(即栈底位置)。4) 特殊功能寄存器特殊功能寄存器(Special Function Registers,SFR)又称为专用寄存器,专用于控制、管理片内算术逻辑部件、并行I/O口、串行I/O口、定时/计数器、中断系统等功能模块的工作。用户在编程时可以置数设定,却不能移作它用。在51子系列单片机中,各专用寄存器(PC例外)与片内RAM统一编址,且作为直接寻址字节,可直接寻址。特殊功能寄存器的名称、表示符、地址如表3.6所示。
表3.6特殊功能寄存器的名称、表示符、地址一览表
专用寄存器名称符号地址位地址与位名称D7D6D5D4D3D2D1D0
P0口P080H8786858483828180堆栈指针SP81H数据指针DPTR低字节DPL82H数据指针DPTR高字节DPH83H定时/计数器控制TCON88HTF1TR1TF0TR0IE1IT1IE0IT0定时/计数器方式TMOD89HGATEC/M1M0GATEC/M1M0定时/计数器0低字节TL08AH定时/计数器1低字节TL18BH定时/计数器0低字节TH08CH定时/计数器1高字节TH18DHP1口P190H9796959493929190电源控制PCON97HSMOD———GF1GF0PDIDL串行控制SCON98HSM0SM1SM2RENTB8RB8TIRI串行数据缓存器SBUF99HP2口P2A0HA7A6A5A4A3A2A1A0中断允许控制IEA8HEA—ET2ESET1EX1ET0EX0P3口P3B0HB7B6B5B4B3B2B1B0中断优先级控制IPB8H——PT2PSPT1PX1PT0PX0定时/计数器2控制T2CON*C8HTF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2定时/计数器2模式T2MOD*C9H捕获/自动重装低8位RLDL*CAH捕获/自动重装高8位RLDH*CBH续表
专用寄存器名称符号地址位地址与位名称D7D6D5D4D3D2D1D0
定时/计数2重装低字节TL2*CCH定时/计数2重装高字节TH2*CDH程序状态字PSWD0HCYACF0RS1RS0OV—P累加器AE0HE7E6E5E4E3E2E1E0B寄存器BF0HF7F6F5F4F3F2F1F0注: 表中带*的寄存器都与定时/计数器2有关,只在52子系列芯片中存在; RLDH、RLDL也可写作RCAP2H、RCAP2L,分别称为定时/计数器2高字节、低字节寄存器。
除PC外,51子系列有18个专用寄存器,其中3个为双字节寄存器,共占用21个字节; 52子系列有21个专用寄存器,其中5个双字节寄存器,共占用26个字节; 其中有12个专用寄存器可以位寻址,其字节地址的低半字节都为0H或8H(即可位寻址的特殊功能寄存器字节地址具有能被8整除的特征),共有可寻址位12 × 8-3(未定义)= 93位。在表3.5中也表示出了这些位的位地址与位名称。(1) 程序计数器(Program Counter,PC)。程序计数器(PC)是控制器中最基本的寄存器,不属于SFR存储器块,是一个独立的16位计数器,专门用于存放CPU将要执行的指令地址(即下一条指令的地址),寻址范围为64KB。PC有自动加1功能,不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序执行的顺序。(2) 累加器(Accumulator,A)。累加器(A)是8位寄存器,又称为ACC,是一个最常用的专用寄存器。在算术/逻辑运算中用于存放操作数或结果。(3) 寄存器B。寄存器B是8位寄存器,是专门为乘除法指令设计的,也作通用寄存器用。(4) 工作寄存器。内部RAM的工作寄存器区00H~1FH共32个字节被均匀地分成4个组(区),每个组(区)有8个寄存器,分别用R0~R7表示,称为工作寄存器或通用寄存器,其中,R0、R1还经常用于间接寻址的地址指针。在程序中通过程序状态字寄存器(PSW)第3、4位可设置工作寄存器区。(5) 数据指针(Data Pointer,DPTR)。数据指针(DPTR)是16位的专用寄存器,即可作为16位寄存器使用,也可作为两个独立的8位寄存器DPH(高8位)、DPL(低8位)使用。DPTR主要用作16位寻址寄存器,访问程序存储器和片外数据寄存器,如“MOV DPTR,#2000H”。(6) 堆栈指针(Stack Pointer,SP)。堆栈是内部RAM的一段区域,是一个特殊的存储区,用来暂存数据和地址。堆栈共有两种操作: 进栈和出栈。堆栈存取数据的原则是“先进后出”或“后进先出”。堆栈指针(SP)是一个8位寄存器,用于指示堆栈的栈顶,它决定了堆栈在内部RAM中的物理位置。51系列单片机的堆栈地址向大的方向变化(与微机堆栈地址向小的方向变化相反)。堆栈主要是为子程序调用和中断操作而设立的,主要有两个作用: 保护断点和保护现场。所谓保护断点,就是在调用子程序或调用中断服务程序时,先把主程序的断点地址保护起来,为程序正确返回作准备。所谓保护现场,就是在执行子程序或中断服务程序时,会用到单片机的一些相同的寄存器,预先将这些寄存器的内容压入堆栈,保护这些寄存器的内容,保证返回主程序时按照原来的状态继续执行。系统复位后,SP初值为07H,使得堆栈事实上由08H单元开始,占用1~3工作寄存器区,实际应用中通常根据需要在主程序开始处对堆栈指针SP进行初始化,一般SP设置为60H。(7) I/O口专用寄存器(P0、P1、P2、P3)。8051片内有4个8位并行I/O接口P0、P1、P2和P3,在SFR中相应有4个I/O口寄存器P0、P1、P2和P3。(8) 定时/计数器(TL0、TH0、TL1和TH1)。51系列单片机中有两个16位的定时/计数器T0和T1,它们由4个8位寄存器(TL0、TH0、TL1和TH1)组成,两个16位定时/计数器是完全独立的。可以单独对这4个寄存器进行寻址,但不能把T0和T1当作16位寄存器来使用。(9) 串行数据缓存器SBUF。串行数据缓存器SBUF用于存放需要发送和接收的数据,它由两个独立寄存器组成(发送缓存器和接收缓存器),要发送和接收的操作其实都是对串行数据缓存器SBUF进行的。(10) 其他控制寄存器。除上述外,还有IP、IE、TCON、SCON和PCON等几个寄存器,主要用于中断、定时/计数和串行口的控制。特殊寄存器SFR的字节寻址问题的几点说明如下。(1) 在SFR块的地址空间80FH~FFH中,仅有21个(51子系列)或26个(52子系列)字节作为特殊功能寄存器离散分布在这128个字节范围内。其余字节无定义,但用户不能对这些字节进行读/写操作。若对其进行访问,则将得到一个不确定的随机数,因而是没有意义的。(2) 程序计数器PC不占据RAM单元,它在物理上是独立的,是不可寻址的寄存器。(3) 对专用寄存器只能使用直接寻址方式,书写时既可使用寄存器符号,也可使用寄存器地址。3.5.6单片机工作原理实例分析单片机通过执行程序实现用户所要求的功能,执行不同的程序就能完成不同的任务。因此,单片机的工作过程实际上就是执行程序的过程。单片机执行程序也就是逐条执行指令,通常一条指令的执行分为3个阶段: 取指令、分析指令和执行指令。(1) 取指令: 根据程序计数器PC的值从ROM读出下一条要执行的指令,送到指令寄存器IR(当执行一条指令时,先把它从内存取到数据寄存器DR中,然后再传送至IR)。(2) 分析指令: 将IR中的指令操作码取出进行译码,分析指令要求实现的操作性质。(3) 执行指令: 取出操作数,按照操作码的性质对操作数进行操作。单片机执行程序的过程实质上就是对每条指令重复上述操作的过程。例如,Y=5 10的求解过程。本实例汇编语言源程序指令代码如下:
MOVA, #05H
ADDA, #0AH
SJMP$
本实例汇编语言源程序实现的功能为: 首先把5(05H)存放于累加器A,然后把10(#0AH)与累加器A的值5(05H)相加,并把两数据之和15(0FH)存放于累加器A中,累加器A的值即为两数据之和。汇编语言源程序指令代码编译后的程序存储地址及机器代码如下:
2000H7405H
2002H240AH
2004H0FEH
在本实例中,计算机把汇编语言源程序的指令代码汇编成机器代码。单片机把汇编后的机器代码存放于程序存储器以地址2000H开始的区域中。CPU工作原理如图3.14所示。CPU由运算器和控制器构成,其中运算器由算术逻辑单元ALU、累加器A、暂存器TMP1和程序状态字PSW构成; 控制器包括程序计数器PC、地址寄存器AR、数据寄存器DR、指令寄存器IR、指令译码器ID、时序部件及微操作控制部件。
图3.14CPU工作原理分析
取指令过程如下。(1) 程序计数器PC的内容(2000H)送到地址寄存器AR。(2) 程序计数器PC的内容自动加1(变为2001H)。(3) 地址寄存器AR的内容(2000H)通过内部地址总线送到存储器,经存储器中的地址译码电路选中地址为2000H的存储单元。(4) CPU使读控制线有效。(5) 在读命令的控制下,被选中存储单元的内容(74H)送到内部数据总线上。(6) 该内容通过数据总线被送到指令寄存器IR(74H)。至此,取指令完成。下面进入译码分析和执行指令阶段。由于指令寄存器IR中的内容是74H(操作码),经指令译码器ID译码后,单片机就会知道该指令是要将一个立即数送到累加器A中,而该数是此代码的下一个存储单元。所以,执行该指令就是要把数据(05H)从存储器中取出,送到累加器A,因此执行指令实质上就是要到存储器中取第二个字节。执行指令过程如下。(1) 程序计数器PC的内容(2001H)送到地址寄存器AR。(2) 程序计数器PC的内容自动加1(变为2002H)。(3) 地址寄存器AR的内容(2001H)通过内部地址总线送到存储器,经存储器中的地址译码电路选中地址为2001H的存储单元。(4) CPU使读控制线有效。(5) 在读命令的控制下,被选中存储单元的内容(05H)送到内部数据总线上。(6) 取得的数据被送到累加器A(05H)。至此,一条指令执行完毕。此时PC=2002H,单片机又进入下一个取指令阶段(“ADD A, #0AH”的操作码24H),然后分析执行这一指令,取得的数据(0AH)与累加器A的数据(05H)相加,相加后的数据(15H)被送到累加器A(15H)。这样一直重复下去,直到遇到循环等待指令(“SJMP $”的操作码80FEH,双字节指令,无条件相对转移指令)才停止。3.651系列单片机的复位电路与复位状态3.6.1复位电路
51系列单片机的第9脚(RST)为复位引脚。系统上电后,时钟电路开始工作,只要RST引脚上出现大于两个机器周期时间的高电平即可引起单片机执行复位操作。单片机的外部复位电路有上电自动复位和按键手动复位两种。所谓上电自动复位,是指计算机加电瞬间,要在RST引脚产生两个机器周期(即24个时钟周期)以上的高电平(如单片机的时钟频率为12MHz,则复位脉冲宽度应在2μs以上),使单片机进入复位状态。按键手动复位是指用户按下“复位”按键,使单片机进入复位状态。
图3.15复位电路
上电自动复位电路是最简单的复位电路,由电容和电阻串联构成,如图3.15(a)所示。上电瞬间,由于电容两端电压不能突变,RST引脚端电压VRST为VCC。随着对电容的充电,RST引脚的电压呈指数规律下降,如图3.15(b)所示。经过时间t1后,VRST降为高电平所需电压的下限3.6V。随着对电容充电的进行,经一定时间后(约10ms),VRST最后将接近0V,单片机开始工作。为了确保单片机复位,t1必须大于两个机器周期的时间。t1可以通过t1=RC来粗略地计算。上电自动复位电路中,时间常数RC越大,上电时保持高电平的时间越长。当振荡频率为12MHz时,典型值C=10μF、R=8.2kΩ; 当振荡频率为6MHz时,C=22μF、R=1kΩ。上电复位和按键复位组合电路,如图3.15(c)所示。R2的阻值一般很小,当然也可以直接短接。当按下复位按键后,电容迅速通过R2放电,放电结束时VRST为(R1×VCC)/(R1 R2),由于R1远大于R2,VRST非常接近VCC,使RST引脚为高电平。松开复位按键后,过程与上电复位相同。电容量和电阻值的参考值是C=22μF、R1=1kΩ、R2=200Ω。以上两种电路是最基本的复位电路,51系列单片机多采用上电复位和按键复位组合电路。在单片机应用系统中,有些外围芯片也需要复位。如果这些芯片的复位电平与单片机一致,则可以与单片机复位引脚相连,提供一个同步的复位信号。3.6.2复位状态当单片机的RST引脚被加上大于两个机器周期时间的高电平之后,单片机进入复位方式,复位之后,单片机的内部各个寄存器进入复位状态,即初始化状态,其数值如表3.7所示。
表3.751系列单片机复位状态表
寄存器复 位 状 态寄存器复 位 状 态
PC0000HTCON00HA00HT2CON00HB00HTH000HPSW00HTL000HSP07HTH100HDPTR0000HTL100HP0~P3FFHTMOD00HIE00HIP00H
各个寄存器初始化状态及其对应的功能简要说明如下。PC=0000H: 程序的初始入口地址为0000H。PSW=00H: 由于RS1(PSW.4)=0,RS0(PSW.3)=0,复位后单片机选择工作寄存器0组。SP=07H: 复位后堆栈在片内RAM的08H单元处建立。TH1、TL1、TH0、TL0: 它们的内容为00H,定时/计数器的初值为0。TMOD=00H: 复位后定时/计数器T0、T1定时器方式为0,非门控方式。TCON=00H: 复位后定时/计数器T0、T1停止工作,外部中断0、1为电平触发方式。T2CON=00H: 复位后定时/计数器T2停止工作。SCON=00H: 复位后串行口工作在移位寄存器方式,且禁止串行口接收。IE=00H: 复位后屏蔽所有中断。IP=00H: 复位后所有中断源都设置为低优先级。P0~P3: 锁存器都是全1状态,说明复位后4个并行接口设置为数据入口。3.751系列单片机的低功耗方式51系列单片机采用两种半导体工艺生产。一种是HMOS工艺,即高密度短沟道MOS工艺; 另一种是CHMOS工艺,即互补金属氧化物MOS工艺。CHMOS是CMOS和HMOS的结合,除保持了高速度和高密度的特点外,还具有CMOS低功耗的特点。在便携式、手提式或野外作业仪器设备上,低功耗是非常有意义的,因此,在这些产品中必须使用CHMOS的单片机芯片。采用CHMOS工艺的单片机不仅运行时耗电少,而且还提供两种节电工作方式,即空闲(等待、待机)工作方式和掉电(停机)工作方式,以进一步降低功耗。实现这两种工作方式的内部控制电路如图3.16所示。
图3.16空闲和掉电工作方式的内部控制电路
由图可知,若IDL=0,则进入空闲工作方式。在这种方式下,振荡器仍继续工作,但IDL=0封锁了CPU的时钟信号,而中断、串行口和定时器却在时钟的控制下正常工作。若PD=0,则进入掉电工作方式,振荡器被冻结。IDL和PD信号由电源控制寄存器PCON中IDL和PD触发器的Q输出端提供。3.7.1方式设定空闲工作方式和掉电工作方式通过电源控制寄存器PCON(地址为87H)的相应位进行设置。电源控制寄存器PCON(字节地址87H)的格式如表3.8所示。
表3.8电源控制寄存器PCON位定义
D7D6D5D4D3D2D1D0SMOD———GF1GF0PDIDL
其中各位说明如下。SMOD: 波特率倍频位。当串行端口工作于方式1、方式2、方式3,使用定时器作为波特率产生器时,若其为1,则波特率加倍。GF1、GF0: 一般用途标志位,用户可自行设定或清除这两个标志。通常使用这两个标志位来说明中断是在正常操作还是在待机期间发生的。PD: 掉电方式控制位。此位置1时,进入掉电工作方式; 此位为0时,结束掉电工作方式。IDL: 空闲方式控制位。此位置1时,进入空闲工作方式; 此位为0时,结束空闲工作方式。如果PD和IDL两位都被置1,则PD无效。3.7.2空闲(等待、待机)工作方式可通过置位PCON寄存器的IDL位来进入空闲工作方式。在空闲工作方式下,内部时钟不向CPU提供,只供给中断、串行口、定时器部分。CPU的内部状态维持,即包括堆栈指针SP、程序计数器PC、程序状态字PSW、累加器ACC的所有内容保持不变,片内RAM和端口状态也保持不变,所有中断和外围功能仍然有效。进入空闲工作方式后,有两种方法可以使系统退出空闲工作方式。一种方法是任何中断请求被响应都可以由硬件将PCON.0(IDL)清为“0”而终止空闲工作方式。当执行完中断服务程序返回到主程序时,在主程序中,下一条要执行的指令将是原先使IDL置位指令后面的那条指令。PCON中的通用标志GF1和GF2可以用来指明中断是在正常操作还是在空闲工作方式期间发生的。另一种退出空闲工作方式的方法是硬件复位。RST端的复位信号直接将PCON.0(IDL)清为“0”,从而退出空闲状态。CPU则从空闲工作方式的下一条指令重新执行程序。3.7.3掉电(停机)工作方式可通过置位PCON寄存器的PD位来进入掉电工作方式。在掉电工作方式下,内部振荡器停止工作,由于没有振荡时钟,所有的功能部件都将停止工作,但内部RAM区和特殊功能寄存器的内容被保留。退出掉电工作方式的唯一方法是由硬件复位。复位后将所有特殊功能寄存器的内容初始化,但不改变片内RAM的数据。在掉电工作方式下,VCC可以降到2V,但在进入掉电方式之前,VCC不能降低。在准备退出掉电方式之前,必须恢复正常的工作电压值,并维持一段时间(约10ms),使振荡器重新启动并稳定后,方可退出掉电方式。3.851系列单片机的最小系统单片机的最小系统是单片机能够工作的最小硬件组合。对于8051系列单片机,其电路的最小系统大致相同,主要包括电源、晶体振荡电路、复位电路等,如图3.17所示。
图3.17单片机的最小系统
在这里,外接晶振通过两个30pF的电容接地,同时采用了手动加上电复位电路,电容量和电阻值的参考值是C3=22μF、R1=200Ω、R2=1kΩ。该电路可以实现复位及程序运行的基本功能,对于其他一些兼容型号的单片机同样使用。如前所述的“用单片机点亮一盏灯”的单片机应用系统设计实例,就是以该最小系统为硬件设计基础,在P1.0引脚连接“一盏LED灯”。在后续的单片机应用系统设计实例中,均以该最小系统为硬件设计基础,并根据系统设计的需要,在此基础上进行相应的硬件扩充。课外设计作业查找相关资料,进一步理解和掌握51系列单片机的硬件结构,为后续单片机应用系统的设计奠定较好的基础。
评论
还没有评论。