汽车电子技术与单片机第3章_第1页
汽车电子技术与单片机第3章_第2页
汽车电子技术与单片机第3章_第3页
汽车电子技术与单片机第3章_第4页
汽车电子技术与单片机第3章_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章MCS-51单片机系统程序设计第一节MCS-51指令系统概述第二节MCS-51单片机指令详解第三节MCS-51单片机系统程序设计实例第一节MCS-51指令系统概述一、概述MCS-51指令系统是一种简明易掌握、效率较高的指令系统。MCS-51的根本指令共111条,其中单字节指令49条,双字节指令45条,三字节指令17条。从指令的执行时间来看,单机器周期指令64条,双机器周期指令45条,只有乘、除两条指令的执行时间为4个机器周期。指令的表示方法称之为指令格式,其内容包括指令的长度和指令内部信息的安排等。一条指令通常由两局部组成,即操作码和操作数。下一页返回第一节MCS-51指令系统概述通常在MCS-51指令系统中,有一字节、二字节和三字节等不同长度的指令。一字节指令只有一个字节,操作码和操作数信息同在其中。二字节指令包括两个字节,其中一个字节为操作码,第二个字节是操作数。三字节指令中,操作码占一个字节,操作数占两个字节,其中操作数既可能是数据,也可能是地址。二、寻址方式MCS-51共有5种寻址方式,现介绍如下:上一页下一页返回第一节MCS-51指令系统概述1.立即寻址操作数就写在指令中,和操作码一起放在程序存储器中。把“#〞号放在立即数前面,以表示该寻址方式为立即寻址,如#20H。2.存放器寻址操作数放在存放中,在指令中直接以存放器的名字来表示操作数的地址。例如MOVA,R0就属于存放器寻址,即将RO存放器的内容送到累加器A中。3.直接寻址操作数放在单片机的内部RAM某单元中,在指令中直接写出该单元的地址。如前例的ADDA,70H中的70H。上一页下一页返回第一节MCS-51指令系统概述4.存放器间接寻址存放器间接寻址方式可用于访问内部RAM或外部数据存储器。访问内部RAM或外部数据存储器的低256个字节时,可采用R0或R1作为间接存放器。这类指令为单字节指令,其最低位是表示采用R0还是R1作为间接存放器。这种寻址方式的示意图如图3-1所示。访问外部数据存储器的低256字节时,只要把MOV改为MOVX就行了。访问外部数据存储器,还可用数据指针DPTR作为间址存放器,DPTR是16位存放器,故它可对整个外部数据存储器空间〔64K〕寻址。在执行PUSH和POP指令时,也采用存放器间接寻址,这是堆栈指针SP用作间接存放器。上一页下一页返回第一节MCS-51指令系统概述5.基址存放器加变址存放器间接寻址这种寻址方式用于访问程序存放器的一个单元,该单元的地址是基址存放器〔DPTR或PC〕的内容与变地址存放器A的内容之和。这种寻址方式对查表访问特别有用。寻址方式的示意图如图3-2所示。三、指令执行过程和指令符号意义单片机执行程序的过程,实际上就是执行我们所编制程序的过程,即执行逐条指令的过程。计算机每执行一条指令都可分为三个阶段进行,即取指令——分析指令——执行指令。上一页下一页返回第一节MCS-51指令系统概述取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令存放器。分析指令阶段的任务是:将指令存放器中的指令操作码读出后进行译码,分析其指令性质,如指令要求操作数,那么寻找操作数地址。计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令或循环等到指令。一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先都已通过写入器固化在片内或片外程序存储器中,因而一开机即可执行指令。上一页下一页返回第一节MCS-51指令系统概述指令中操作数的描述符号:Rn——工作存放器R0~R7Ri——间接寻址存放器R0、R1Direct——直接地址,包括内部128BRAM单元地址、26个SFR地址。#data——8位常数#data16——16位常数addr16——16位目的地址addr11——11位目的地址rel——8位带符号的偏移地址DPTR——16位外部数据指针存放器上一页下一页返回第一节MCS-51指令系统概述bit——可直接位寻址的位A——累加器AB——存放器BC——进、借位标志位,或位累加器@——间接存放器或基址存放器的前缀/——指定位求反〔x〕——x中的内容〔〔x〕〕——x中的地址中的内容——当前指令存放的地址上一页返回第二节MCS-51单片机指令详解一、数据传输指令1.累加器相关的数据传输指令以下指令的功能是把源操作数的内容送入累加器A,源操作数有存放器寻址、直接寻址、间接寻址和立即寻址等方式。2.内部RAM单元之间的数据传输指令下一页返回第二节MCS-51单片机指令详解内部RAM单元之间的数据传输可以使用直接寻址、存放器寻址以及存放器间接寻址方式。3.外部存储器数据传输指令外部RAM传输指令通常使用间接寻址的方式,主要可以分为以Ri进行间接寻址和使用16位的DPTR进行的间接寻址。针对外部RAM的操作只能通过累加器A来完成,MCS-51系统中没有专门的存储器读写指令,实际上这些传输指令就是读写指令,为了区分是外部存放器,特别是指令助记符上增加了“X〞代表外部之意。具体的指令如下:上一页下一页返回第二节MCS-51单片机指令详解采用Ri的指令有:采用DPTR的指令有:上一页下一页返回第二节MCS-51单片机指令详解4.数据交换指令数据交换主要是在内部RAM单元与累加器A之间进行,有整字节交换、半字节交换和累加器上下半字节交换指令。源操作数有存放器寻址、直接寻址和存放器间接寻址等方式,例如:上一页下一页返回第二节MCS-51单片机指令详解5.堆栈指令在MCS-51内部RAM中可以设定一个后进先出LIFO的区域作为一个堆栈。在特殊功能存放器中有一个堆栈指针SP,它指出栈顶的位置,在指令系统中有两条用于数据操作的栈操作指令。首先是入栈指令,这条指令的功能是首先将栈指针SP加1,然后把直接地址指出的内容送到栈指针SP指示的内部RAM单元中。还有对应的出栈指令,出栈指令是将当前堆栈指针存放器SP所指示的单元的内容传送到该指令指定的直接寻址单元中去,然后SP中的内容减1.堆栈操作实际上是通过堆栈指示器SP进行的读写操作,是以SP为间址存放器的间接寻址方式。因为SP是唯一的,所以在指令中把通过SP的间接寻址的操作数项隐含了,只表示出直接寻址的操作数项。上一页下一页返回第二节MCS-51单片机指令详解二、算术运算指令1.加法指令在加法指令中,又分位普通加法和带进位的加法。这组加法指令的功能是把所指出的字节变量与累加器A的内容相加,其结果放在累加器A中。如果位7有进位输出,那么置“1〞进位标志Cy,否那么对Cy清“0〞,如果位3有进位输出,置“1〞辅助进位标志Ac,否那么对Ac清“0〞;如果位6有进位输出而位7没有进位,或者位7有进位输出而位6没有进位,那么置“1〞溢出标志OV,否那么对OV清“0〞。源操作数有存放器寻址、直接寻址、存放器间接寻址和立即寻址等方式。带进位的加法,除了与上述的运算相似外,还增加了进位标制Cy参加运算;上一页下一页返回第二节MCS-51单片机指令详解上一页下一页返回第二节MCS-51单片机指令详解2.减法指令通常的减法运算都带有借位,这与带进位的加法十分类似:上一页下一页返回第二节MCS-51单片机指令详解3.增1减1指令这些指令可以实现对相应的操作数的增1和减1操作,这种操作不会影响PSW的状态,具体指令如下:以上为自增1运算,只需将INC更改为DEC,那么可以实现减1运算,但增1运算中还有INCDPTR,实现DPTR增1,而减1中却没有这条指令。上一页下一页返回第二节MCS-51单片机指令详解4.乘除指令MULABDIVABMUL为乘法指令,其功能是把累加器A和存放器B中的无符号8位整数相乘,其16位积得低位字节在累加器A中,高位字节在B中。如果积大于255,那么置位溢出标志位OV,否那么对OV清“0〞。进位标志位总是清“0〞。DIV为除法指令,该指令的功能是把累加器A中8位无符号整数除以B中的8位无符号整数,所得的商〔为整数〕存放在累加器A中,余数在存放器B中,清“0〞Cy和溢出标志位OV。如果B得内容为“0〞〔除数为“0〞〕,那么结果A,B中的内容不定,并置位溢出标志位OV。上一页下一页返回第二节MCS-51单片机指令详解5.十进制调整指令DAA这条指令对累加器A由前两个变量〔压缩的BCD码〕相加的结果进行十进制调整使A中的结果为二进制码数。三、逻辑运算指令逻辑运算指令包括与、或、异或、循环、累加器清零与求反指令。这些指令中的操作数都是8位,它们在执行时,不影响标志位。上一页下一页返回第二节MCS-51单片机指令详解1.与〔AND〕逻辑运算指令逻辑运算都是按位进行的,逻辑与运算用符号∧表示。以上这几条指令运算结果存放在A中,下面这两条指令的运算结果那么存放在直接地址的地址单元中:上一页下一页返回第二节MCS-51单片机指令详解2.或〔OR〕逻辑运算指令逻辑或运算用符号∨表示。以上几条指令运算结果存放在A中,下面这两条指令的运算结果那么存放在直接寻址的地址单元中:上一页下一页返回第二节MCS-51单片机指令详解3.异或逻辑运算指令逻辑异或运算的规那么是,两运算数相同时为假〔0〕,两运算数相异时为真〔1〕,这种运算用符号表示。以上这几条指令运算结果存放在A中,下面这两条指令的运算结果那么存放在直接地址的地址单元中:上一页下一页返回第二节MCS-51单片机指令详解4.累加器清零和求反指令四、控制转移指令控制转移指令包括无条件转移指令、条件转移指定、比较转移指令、循环转移指令及调用与返回指令。1.无条件转移指令这里又分为长转移、短转移、绝对转移和变址寻址转移4种方式。长转移指令执行时可以把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向指定地址。转移的目标地址可以在64K程序存储器地址空间的任何地方。指令格式如下:上一页下一页返回第二节MCS-51单片机指令详解对于短转移指令,在执行时在PC加2之后,把指令的有符号的偏移量rel加到PC上,并计算出转向地址。因此转向的目标地址可以在这条指令前128字节到后127字节之间。指令格式如下:绝对转移指令是2KB范围内的无条件跳转指令。AJMP把MCS-51的64K程序存储器空间划分为32个区,每个区为2K字节,转移目标地址必须与AJMP下一条指令的第一个字节在同一2KB范围内,否那么,将引起混乱,如果AJMP正好落在区底的两个单元内,程序就转移到下一个区中去了,这时不会出现问题。上一页下一页返回第二节MCS-51单片机指令详解执行该指令时,先将PC加2,然后把addr11送入PC的低11位,PC高位不变,程序转移到指定的地方。指令格式如下:变址寻址转移指令的功能是把累加器中8位元符号数与数据指针DPTR的16位数相加,结果作为下条指令地址送入PC,不改变累加器和数据指针DPTR内容,也不影响标志。指令格式如下:上一页下一页返回第二节MCS-51单片机指令详解2.条件转移指令条件转移指令又可以分为判零转移、数值比较转移和减1转移三种。判零转移是有条件的相对转移指令,指令如下:上一页下一页返回第二节MCS-51单片机指令详解数值比较转移指令的功能是比较前面两个操作数的大小,如果他们的值不相等那么转移,在PC加到下一条指令的起始地址后,通过把指令最后一个字节的有符号的相对偏移量加到PC上,并计算出转向地址。如果第一操作数〔无符号数〕小于第二操作数〔无符号整数〕,那么置进位标志位Cy,否那么对Cy清“0〞,不影响任何一个操作数的内容。指令格式如下:上一页下一页返回第二节MCS-51单片机指令详解这组指令将源操作数(Rn,direct)减1,结果回送到源操作数存放器或存储器中去。如果结果不为0那么转移。源操作数有存放器寻址和直接寻址。允许程序员把内部RAM单元用作程序循环计数器。指令格式如下:DJNZRn,relDJNZdirect,rel3.子程序调用和返回指令子程序结构是一种重要的程序结构。在一个程序中经常遇到反复屡次执行程序段的情况,如果重复书写这个程序段,会使程序变得冗长而杂乱,因而采用了功能较为重复的子程序。上一页下一页返回第二节MCS-51单片机指令详解调用和返回构成了子程序调用的完整过程。为了实现这一过程,必须有子程序调用指令和返回指令。返回指令那么应该是子程序的最后一条指令。执行完这条指令之后,程序返回主程序断点处继续执行。上一页下一页返回第二节MCS-51单片机指令详解还有子程序返回指令RET和RETI,分别放置了在子程序和中断效劳程序的最后。4、空操作指令这条语句什么也不做,消耗一个机器周期的时间,通常用于程序的延时。上一页下一页返回第二节MCS-51单片机指令详解五、位操作指令1.数据位传送指令这组指令的功能是把由源操作数指出的位变量送到目的操作数指定的单元中去。其中一个操作数必须为进位标志,另一个可以是任何直接寻址位。不影响其他存放器或标志。指令格式如下:上一页下一页返回第二节MCS-51单片机指令详解2.修改变量指令这组指令将操作数指出的位清“0〞、取反、置“1〞,不影响其他标志。上一页下一页返回第二节MCS-51单片机指令详解3.位变量的逻辑运算实际上位运算全部是逻辑运算,共有与、或、非三种指令。这里仅以与运算为例来说明,或运算符位ORL,非运算已在上文中替代。上一页下一页返回第二节MCS-51单片机指令详解4.条件转移类指令与前文介绍的条件转移指令类似,位运算也可以进行条件转移。上一页返回第三节MCS-51单片机系统程序设计实例一、汇编语言程序的根本结构各种计算机的汇编语言的语法规那么根本相同,且具有相同的语句格式。先以MCS-51汇编语言作具体说明。MCS-51汇编语言的语句格式表示如下:下一页返回第三节MCS-51单片机系统程序设计实例其中,方括号括起来的是可选局部,可有可无,视需要而定。标号是指令的符号的地址,有了标号,程序中的其他语句才能访问该语句。标号的规那么:标号由1~8个ASCII字符组成,但头一个字符必须是字母,其余可以是字母,数字或其他特定字符。不能使用本汇编语言已定义了符号作为符号,如指令助记符、伪指令助记符以及存放器的符号名称。标号后必须跟以冒号〔:〕同一标号在一个程序中只能定义一次,不能重复定义。上一页下一页返回第三节MCS-51单片机系统程序设计实例一条语句可以有标号,也可以没有标号,标号的有无取决于本程序中的其他语句是否需要访问这条语句操作码用于规定语句执行的操作内容。操作码是以指令助记符或伪指令助记符表示的,操作码是汇编指令格式中唯一不能空缺的局部。操作数用于给指令和操作提示数据或地址。注释不属于语句的功能局部,它只是对语句的解释说明。分界符用于把语句格式中的各局部隔开,以便于汇编语言程序区分,包括空格,冒号,分号或逗号等多种符号,在MCS-51中,冒号〔:〕用于标号之后;空格〔〕用于操作码和操作数之间;逗号〔,〕用于操作数之间;分号〔;〕用于注释之前。上一页下一页返回第三节MCS-51单片机系统程序设计实例汇编语言程序的结构形式主要分为三种:顺序结构,分支结构和循环结构。顺序结构是最简单的程序结构,在顺序结构中既无分支,循环,也不调用子程序,程序执行时一条一条地按顺序执行指令。分支结构使用条件转移指令实现,即根据条件对程序的执行进行判断,满足条件那么进行程序转移,否那么程序顺序执行。循环结构那么在程序的某个区段进行反复的运行,直到满足某种条件结束,而有的程序那么完全不能跳出的死循环,将会无休止地运行下去。上一页下一页返回第三节MCS-51单片机系统程序设计实例二、简单程序设计简单程序设计指的就是按照顺序来执行程序,程序中可以包含某种算法。[实例]求解多项式y=2a-b。假设操作数a放在存放器R3,操作数b放在存放器R4;结果分别放在存放器R5和R6.上一页下一页返回第三节MCS-51单片机系统程序设计实例上一页下一页返回第三节MCS-51单片机系统程序设计实例三、分支和循环程序在许多情况下,需要根据不同的条件转向不同的处理程序,这种结构的程序称为分支程序。MCS-51单片机设置的条件转移指令、比较转移指令和位转移指令可以实现程序的分支。图3-3为分支程序框图。[实例]设a存放在累加器R2中,b存放在存放器R3中,要求按下式计算y值,并将结果y存于累加器A中。上一页下一页返回第三节MCS-51单片机系统程序设计实例上一页下一页返回第三节MCS-51单片机系统程序设计实例循环程序是指一段反复执行的程序。图3-4为循环程序框图。[实例]将内部数据存储器38H~6FH单元的内容传送到外部数据存储器以1000H开始的连续单元中去。38H~6FH单元向外传数据,需传送56次。将R6作为循环计数存放器,有如下的流程图:上一页下一页返回第三节MCS-51单片机系统程序设计实例四、查表程序查表就是根据自变量x的值,在表总查找y,使y=f〔x〕。x和y可以使各种类型的数据。表的结构也是多种多样的。表格可以放在程序存储器中,也可以存放在数据存储器中。在单片机应用系统中,这类程序使用频繁。利用它能防止进行复杂的运算或转换过程,故它广泛应用于显示、打印字符的转换以及数据补偿、计算、转换等程序中。一般情况下,对自变量x是有变化规律的数据,可以根据这一规律形成地址,对应的y那么存放于该地址单元中;对x是没有变化规律的数据,在表中存放x及其对应的y值。上一页下一页

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论