您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > MCS-51单片机指令系统与编程
1第二章MCS—51单片机指令系统与编程单片机系统的设计包括硬件设计与软件编程两部分。在硬件电路设计合理的的条件下,还要在编制程序正确的基础上,单片机才能按照设计者的要求来完成各种工作。本章在第一章MCS—51单片机硬件的结构基础上,主要介绍MCS—51指令系统与编程。第一节指令系统概述一、指令概念指令是指挥计算机工作的命令,是计算机软件的基本单元。指令有两种表达形式。1.机器码指令用二进制代码(或十六进制数)表示的指令称为机器码指令或目标代码指令。这种形式的指令能够直接被计算机硬件识别执行,但不便于记忆。例如指令MOVA,#00H执行的操作是将立即数00H送到累加器A中,它的机器码指令为74H00H。2.汇编语言指令为了便于记忆,利于程序的编写和阅读,用助记符来表示每一条指令的功能,称作汇编语言指令。该指令不能被计算机硬件直接识别和执行,必须通过汇编把它翻译成机器码指令才能被计算机执行。如上面的指令MOVA,#00H即为汇编语言指令。计算机的所有指令被称为计算机的指令系统,对于不同型号的计算机,其指令系统也是不同的,在很大度上决定了其相应的使用功能。二、指令格式汇编语言的指令格式由以下几部分组成:[标号]:操作码助记符[目的操作数],[源操作数];[注释]标号:是该指令所在的符号地址,由字母打头的字母数字串组成,可以根据需要设置。例如;CD76QB4WABDB745为允许格式46A896A+BC5-BCE05C为不允许格式操作码助记符:规定了指令操作功能,它是由助记符表示的字符串。操作数:指参加操作的对象,此为指令的核心。对于操作数段的组成有的指令可以没有,也可以只有一个操作数,如:CPLA;只有一个操作数RETI;没有操作数。注释:为了用户阅读程序方便,在程序后加注的中文或者英文的说明。当用机器语言表示的指令格式以8位二进制数(或字节)为基数时,可分为单字节、双字节和三字节指令,其相应格式如下:单字节:双字节:三字节:三、符号说明MCS—51单片机的111条指令按照功能可分成如下五大类:(1)数据传送类指令29条操作码定时器/计数器2自动重装高字节定时器/计数器2低字节定时器/计数器2高字节程序状态字累加器B寄存器操作码定时器/计数器2自动重装高字节定时器/计数器2低字节定时器/计数器2高字节程序状态字累加器B寄存器操作码数据或寻址方式数据或寻址方式数据或寻址方式2(2)算术传送类指令24条(3)位操作类指令12条(4)逻辑运算类指令24条(5)控制转移类指令22条在MCS—51指令系统中,对常用符号进行说明如下:(1)#data——8位立即数(2)#data16——16位立即数(3)Rn——工作寄存器,R0~R7,n为0~7。(4)Ri——工作寄存器,0或1,i=0或1。(5)@Ri——寄存器Ri间接寻址8位存储单元00H~FFH(6)direct——8位直接寻址,可以是特殊功能寄存器SFR的80H~FFH或内部存储单元00H~7FH。(7)addr11——11位目的地址。用于AJMP和ACALL指令,均在2KB地址内转移或调用。(8)addr16——16位目的地址。用于LJMP和LCALL指令,可在64KB地址内转移或调用。(9)rel——带符号的8位偏移地址,主要应用于所有的条件转移指令和SJMP。其范围是相对于下一条指令的第一字节地址-128~+127字节。(10)bit——位地址。片内RAM中的可寻址位和专用寄存器中的可寻址位。(11)DPTR——数据指针,可用于16位的地址寄存器。(12)@——间接寄存器或者是基址寄存器的前缀。如:@DPTR,@Ri,@A+PC,@A+DPTR(A)——累加器ACC。(14)B——通用寄存器,常用于乘法MUL和除法DIV的指令。(15)Cy——进位标志位或者布尔处理器中的累加器。第二节寻址方式计算机传送数据,执行算术操作,逻辑操作等等都要涉及到操作数。一条指令的运行,先从操作数所在地址寻找到本指令有关的操作数,这就是寻址。计算机的指令系统各不相同,其相应的寻址方式也不尽相同。MCS—51系列单片机的指令系统有立即寻址,寄存器寻址,间接寻址,直接寻址,变址寻址,相对寻址,位寻址等七种寻址方式。一、立即寻址立即寻址是指操作数就跟在操作码后面,立即参与指令所规定的操作,该操作数称为立即数。为了方便辨识,在它的前面加#号。例如:MOVA,#20H;将立即数20H传送到A中,如图2—1所示:立即数20H图2-1MOVA,#20H指令示意图二、直接寻址直接给出操作数所在的存储器地址,供寻址取数或存放的寻址方式称为直接寻址。在MCS—51系列单片机中,可访问三种地址空间:(1)特殊功能寄存器SFR:直接寻址是唯一的访问形式;(2)内部数据RAM128个字节单元;A3(3)221个位地址空间。例1:MOVA,70H;把70单元内容送入累加器A中,如图2—2所示。直接地址70H70H图2-2MOVA,70H指令执行图三、寄存器寻址寄存器寻址是指定某一可寻址的寄存器的内容为操作数,对选定的8个工作寄存器R7~R0、累加器ACC、通用寄存器B、数据指针DPTR和Cy(布尔处理机的累加器,也编址为一个寄存器)中的数进行操作寻址的方式。一般来说,对于四个工作寄存器组的编码如下:第0组00H~07H第2组10H~17H第1组08H~0FH第3组18H~1FH例2:INCA;将寄存器A中的内容加1送回累加器A。ADDA,R2;将工作寄存器R2中的内容取出,与累加器A中的内容相加,其和送回累加器A。MOVR3,A;将累加器A中的内容传送到工作寄存器R3。四、间接寻址间接寻址又称为寄存器间址,是将指定寄存器的内容作为该操作数的地址,再从该地址找到操作数的寻址方式。其实,寄存器寻址真正定义是可访问数据存储器的某一单元。在MCS—51单片机中可用来间接寻址的寄存器有:工作寄存器区的R0、R1,堆栈指针SP和16位的数据指针DPTR,在使用时为了容易辨识,在寄存器前面加@来表示。通常用间接地址寄存器的情况如下:(1)如果访问片内RAM或片外低256B(00H~FFH)空间时,可以用R0或R1作为间址寄存器。(2)如果访问片外64KBRAM空间时,可以用DPTR作为间址寄存器。(3)如果执行PUSH或POP的指令时,可以用SP作为间址寄存器。例3:MOVA,@R0;将R0的内容作为地址的存储单元中的内容传送至累加器A中,如图2—3所示。图2-3MOVA,@R0指令执行图MOVX@DPTR,A;将累加器A中的内容传送到外RAMDPTR所示的存储单元中。五、变址寻址该寻址方式用于访问程序存储器。它只能用于读取,不能存放,它主要应用于查表性质的访问。A7EH60H7EHA(运行后)ROA(运行前50H)60HHH内RAM4变址寻址的概念是将指令中指定的变址寄存器的内容加上基址寄存器的内容形成操作数地址的寻址方式。在该寻址方式中,以程序计数器PC或数据指针DPTR作为基址寄存器,用累加器A作为变址寄存器。例4:MOVCA,@A+DPTR把累加器A的内容与DPTR内容相加得到一个新地址,并通过该地址得到的操作数送入累加器A中,如图2—4所示。图2-4MOVCA,@A+DPTR指令执行图MOVA,@A+PCA为偏移量寄存器,PC为变址寄存器,A中内容为无符号数和PC相加,得到新的操作数地址,并通过该地址所得操作数送入累加器A中。六、相对寻址相对寻址是将给定的相对偏移量rel与当前的PC值相加所得到真正的程序转移地址。它与变址方式不同,相对偏移rel是一个带符号的八位二进制数,必须用补码形式表示其范围-128~+127。该寻址方式常用于相对跳转指令。例5:SJMP08H该指令是相对于当前PC值进行偏移量为08H的短跳转,如图2—5所示。假设该指令存放于3000H起起始的单元,由于SJMP为双字节指令,故PC当前值为3000H+2=3002H,在加上偏移量08H,得到转移的目标地址为3002+08H=300AH,所以执行完该条指令后,程序就跳转到300AH了。JC80H该指令为若C=0时,则PC值不变,若C=1时,则将现行的PC为基地址加上80H得到转向地址。如果指令存放在1005H,与JC为双字节指令,所以PC当前值为1005H+2=1007H,在加上偏移量-80H(这里80H必须以补码形式给出0,执行完该指令后,程序就此转到0F87H。如图2—5所示。2000H50H7EH7EHA(运行前)DPTRROM+2050HA(运行后)300AH3000H3001H3002HROM……rel=08(偏移量)PC=3002H(当前值)+=300AH转移目标地址5图2-5SJMP08H指令执行图七、位寻址位寻址是对片内数据RAM中的128位和特殊功能寄存器的93位进行操作。该寻址方式同直接寻址方式的形式和执行过程基本相同,但是参与操作的数据是1位不是8位。例6:MOV20H,A;将累加器A中内容送到内RAM20H单元中。MOV20H,C;将进位位Cy内容送到位地址20H指示的位中。MCS—51型单片机的寻址方式与作用域的关系示于表2—1:表2-1寻址方式与作用域序号寻址方式所用变量所用空间1立即寻址程序存储器2直接寻址片内RAM低128B和特殊功能寄存器SFR3寄存器寻址R0~R7,A,B,CY,DPTR所涉及寄存器4间接寻址@R0、@R1、SP片内RAM@R0、@R1、@DPTR片外RAM5变址寻址DPTR+APC+A程序存储器6相对寻址PC+rel(-128~+127)程序存储器7位寻址片内RAM的20H~2FHB地址中的所有位和特殊功能寄存器SFR中字节地址能被8整除单元的位第三节MCS—51指令系统MCS—51型单片机的指令系统共有111条指令。如果按指令字节长度分,有单字节指令49条,双字节指令47条,三字节指令15条。若按指令执行的时间分,可分为单机器周期指令64条,双机器周期指令条,伪机器周期指令2条。另外按指令的功能分为五类,可分为数据传送类有29条,算术指令24条,逻辑指令24条,转移指令22条,布尔指令12条。本节中将着重讲解这五类指令的功能。一传送指令传送指令是MCS—51型单片机指令系统中数量最多使用最多的一类指令,它主要用于数据的保存和交换等场合。若按其操作方式又可以把它们分为三种:数据传送、数据交换和栈操作。数据传送操作又可分为内部数据存储器各部分之间及其与累加器A之间的数据传送;程序存储器送数到累加器A的传送操作,这三类操作码的助计符用MOV、MOVX、MOC表示。1、片内RAM之间的数据传送指令格式:MOV〈目的字节〉,〈源字节〉功能:传送字节变量说明:把源字节的内容传给目的字节,而源字节的内容不变,也不影响标志位。但当执6行结果改变累加器A的值时,会使奇偶标志变化。(1)如果目的字节是累加器A,有四条传送指令。MOVA,Rn;A←RnMOVA,derect;A←(derect)MOVA,#data;A←#dataMOVA,@Ri;A←(Ri)例7:MOVA,R0;把寄存器R0中的数据传给A,即A←R0。MOVA,20H;把直接地址20H存储单元中的数据传给A,即A←(20H)。MOVA,#20H;把立即数20H传给A,即A←20HMOVA,@R0;以R0中的数为地址的存储单元中的内容传送给A,即A←(R0)(2)如果目的字节是Rn,则有三条传送指令MOVRn,#data;Rn←data。MOVRn,A;Rn←AMOVRn,direct;Rn←direct例8:MOVR6,#60H;把立即数60H传给R6即R6←60HMOVR0,A;把A的内容传送给R0,即R0←AMOVR2,40H;把40H单元的内容传给R2,即R2←(40H)(3)如果目的字节是直接地址,则有5条指令。MOVdirect,#data;(direct)←dataMOVdirect,A;(direct)←AMOVdirect,Rn;(direct)←RnMOVdirect,direct1;(direct)←(direct1)M
本文标题:MCS-51单片机指令系统与编程
链接地址:https://www.777doc.com/doc-4560620 .html