您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 汽车电子技术与单片机第3章
第三章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单元用作程序循环计数器。指令格式如下:DJNZR
本文标题:汽车电子技术与单片机第3章
链接地址:https://www.777doc.com/doc-72572 .html