版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务二流水灯通俗地讲,单片机的控制作用就是单片机把一些高低电平通过I/O口输出到外围电路,去控制外围电路的工作。本任务通过一个流水灯的制作,来学习单片机I/O口的输出功能。任务目的
1.通过流水灯的制作,掌握单片机I/O口的偷出功能。
2.了解单片机应用电路的制作过程。
3.进一步熟悉WAVE6000软件的使用。任务描述
8个LED灯接在89551的P0口,编写程序实现8个LED灯逐个点亮。1.硬件电路原理图单片机实验板电路原理如图3-1所示。下一页返回任务二流水灯2.流水灯参考程序ORG000H;定位伪指令,指定下一条指令的地址K1:MOVP0,#0FEH;把第1拍显示代码送P0口
LCALLDELAY;调用延时子程序
MOVP0,#0FDH;把第2拍显示代码送P0口
LCALLDELAY;调用延时子程序
MOVP0,#0FBH;把第3拍显示代码送P0口
LCALLDELAY;调用延时子程序
MOVP0,#0F7H;把第4拍显示代码送P0口
LCALLDELAY;调用延时子程序
MOVP0,#0EFH;把第5拍显示代码送P0口
LCALLDELAY;调用延时子程序
MOVP0,#0DFH;把第6拍显示代码送P0口上一页下一页返回任务二流水灯LCALLDELAY;调用延时子程序
MOVP0,#OBFH;把第7拍显示代码送PO口
LCALLDELAY;调用延时子程序
MOVP0,#07FH;把第8拍显示代码送PO口
LCALLDELAY;调用延时子程序
SJMPK1;返回,继续下一轮循环
DELAY:MOVR7,#0FFH;延时子程序
L1:MOVR6,#0FFHDJNZR6,$DJNZR7,L1RETEND;程序结束上一页下一页返回任务二流水灯3.程序仿真及烧录把这段程序在WAV6000中编辑、汇编,用软件仿真运行、调试无误,把得到bin格式或者hex格式的日标文件,通过烧录器或者下载线,保存到单片机的程序存储器中。把单片机插入实验板插座里,上电运行,分别按下两只按键,观察运行结果。上一页返回任务三BCD码相加在单片机应用系统中,通常都要求进行BCD码的运算,特别是在十进制运算的系统中,很多的系统在人机界面的输出部分往往都要用十进制显示,所以BCD码是很重要的一部分。本任务通过WAVE6000软件来观看BCD码的相加过程。任务目的
1.理解什么是BCD码。
2.理解BCD码相加的过程。任务描述
1.通过不同数据区的数据改变观察BCD码的情况。
2.通过AVE6000的窗口观察BCD码相加的情况。1.两个四位十六进制数相加程序中,31H与30H储存的是一个加数,41H与40H存储的是另一个加数,都以十六进制(即四位2进制)形式存储,其中31H是高位,30H是低位。41H和40H同样。两个加数相加后存储在52H,51H,50H。其中如有进位,则进位位存储在52H中,51H存高位,50H存低位。下一页返回任务三BCD码相加参考程序如下:ORG0000H;定位伪指令,指定下一条指令的地址,第一条指令必须放在0000HMOV30H,#78H;第一个加数的高位,具体数值可以自己修改!MOV31H,#34H;第一个加数的低位,具体数值可以自己修改!MOV40H,#56H;第二个加数的高位.具体数值可以自己修改!MOV41H,#12H;第二个加数的低位.具体数值可以自己修改!MOV50H,#0;将和值所要存储的数据区先清零。MOV51H,#0MOV52H,#0MOVA,40H;因为加减指令必有一个为ACC暂存器,所以先将
;一个加数的低位送至ACC中,用于和另一个加数的低位相加。
上一页下一页返回任务三BCD码相加ADDA,30H;将一个加数的低位和另一个加数的低位相加MOV50H,A;将和值存至和值寄存器的低位MOVA,41HADDCA,31H;将两个加数的高位相加MOV51H,A;将和值的数据存至和值高位MOVA,#0;如果有进位的话,将进位放至万位,即将进位位
Cy加至ACC既可。ADDCA,#0;ACC与0带进位位相加,就把Cv加至ACC了MOV52H,A;将进位位存至52HEND;结束伪指令
上一页下一页返回任务三BCD码相加把这段程序在WAV6000中编辑、汇编,用软件仿真运行,我们通过按F8单步执行,来观察SFR中的累加器ACC、状态寄存器PSW的内容(进位标志位Cy)的变化,与DATA窗口中30H,31H,40H,41H,50H,51H,52H儿个单元中的数据变化,来感受十六进制与十进制的数据变化情况。2.两个四位十进制数相加程序中,31H与30H储存的是一个加数,41H与40H存储的是另一个加数,都以压缩BCD码形式存储,其中31H高四位是千位,低四位是百位,30H高四位是十位,低四位是个位。41H和40H同样。两个加数相加后存储在52H,51H,50H。其中如有进位,则万位存储在52H的低四位,51H存千位与百位50H存十位与个位。上一页下一页返回任务三BCD码相加参考程序如下:ORG0000H;定位伪指令,指定下一条指令的地址,
;第一条指令必须放在000HMOV30H,#78H;第一个加数的十位与个位。具体数值可以自己修改!MOV31H,#34H;第一个加数的千位与百位。具体数值可以自己修改!MOV40H,#56H;第二个加数的十位与个位。具体数值可以自己修改!MOV41H,#12H;第二个加数的千位与百位。具体数值可以自己修改!MOV50H,#0;将和值所要存储的数据区先清零。MOV51H,#0MOV52H,#0上一页下一页返回任务三BCD码相加MOVA,40H;因为加减指令必有一个为ACC暂存器,所以先将一个加数的低位送至ACC中,用于和另一个加数的低位相加
ADDA,30H;将一个加数的低位和另一个加数的低位相加
DAA;因为相加是按十六进制相加的,所以加完后要将十六
;进制的数转化为十进制的数。
MOV50H,A;将加完并转化完的十进制数存至和值寄存器的低位
MOVA,41HADDCA,31H;将两个加数的高位相加
DAA;将高位相加后调整
MOV51H,A;将处理后的数据存至和值高位
MOVA,#0;如果有进位的话,将进位放至万位,
;加至ACC既可。
ADDCA,#0;ACC与0带进位位相加,就把Cv加至ACC了
MOV52H,A;将万位存至52HEND;结束伪指令上一页下一页返回任务三BCD码相加把这段程序在WAV6000中编辑、汇编,用软件仿真运行,我们通过按F8单步执行,来观察SFR中的累加器ACC、状态寄存器PSW的内容(进位标志位Cy)的变化,与DATA窗口中30H,31H,40H,41H,50H,51H,52H儿个单元中的数据变化,来感受十六进制与十进制的数据变化情况。上一页返回3.1指令系统概述下一页返回3.1.1指令的相关概念1.机器语言与汇编语言指令是使计算机内部执行的一种操作,提供给用户编程使用的一种命令。由构成计算机的电子器件特性所决定,计算机只能识别二进制代码。以二进制代码来描述指令功能的语言,称之为机器语言。由于机器语言不便被人们识别、记忆、理解和使用,因此给每条机器语言指令赋予助记符号来表示,这就形成了汇编语言。也就是说,汇编语言是便于人们识别、记忆、理解和使用的一种指令形式,它和机器语言指令一一对应,也是由计算机的硬件特性所决定的。3.1指令系统概述指令的描述形式有两种:机器语言形式和汇编语言形式。现在描述计算机指令系统及实际应用中主要采用汇编语言形式。采用机器语言编写的程序称之为日标程序。采用汇编语言编写的程序称之为源程序。计算机能够直接识别并执行的只有机器语言。汇编语言程序不能被计算机直接识别并执行,必须经过一个中间环节把它翻译成机器语言程序,这个中间过程叫做汇编。汇编有两种方式:机器汇编和手工汇编。机器汇编是用专门的汇编程序,在计算机上进行翻译;手工汇编是编程员把汇编语言指令逐条翻译成机器语言指令。现在主要使用机器汇编,但有时也用到手工汇编。2.指令格式汇编语言格式为:[标号]操作码助记符[目的操作数,][源操作数][;注释]上一页下一页返回3.1指令系统概述(1)标号是该语句的符号地址,可根据需要而设置。当汇编程序对汇编语言源程序进行汇编时,再以该指令所在的地址值来代替标号。在编程的过程中,适当的使用标号,使程序便于查询、修改以及转移指令的编程。标号通常用于转移指令所需的转移地址。标号一般由1一6个字符组成,但第一个字符必须是字母,其余的可以是字母也可以是其他符号或数字。标号和操作码之间用冒号’:”分开。(2)操作码和操作数(源操作数和日的操作数)是指令的核心部分。操作码使用MCS-51系列单片机所规定的助记符来表示,其功能在于告诉单片机的CPU做何种操作。(3)操作数分为日的操作数和源操作数,采用符号(如寄存器、标号等)或者常量(如立即数、地址值等)表示。操作码和日的操作数之间用空格分隔,而日的操作数和源操作数之间用逗号“,”隔开。在某些指令中可以没有操作数。上一页下一页返回3.1指令系统概述(4)注释是对指令的功能或作用的说明,但是注释不是一个指令的必要组成部分,可有可无。注释的主要作用是对程序段或者某条指令在整个程序中的作用进行解释和说明,以帮助阅读、理解和使用源程序。有无注释对源程序并无影响,但是如果使用注释的话,注释部分一定要用分号“;”隔开。例如:LOOP:MOVA,#5FH;(A)←#5FH单片机的每一条指令包含两个基本部分:操作码和操作数。操作码表明指令要执行的操作性质;操作数表明参与操作的数据或数据所存放的地址。MCS-51机器语言指令根据其指令编码长短的不同有单字节指令、双字节指令和三字节指令三种格式。(1)单字节指令。单字节指令格式由8位二进制编码表示。有两种形式:①8位全表示操作码。例如,空操作指令NOP,其机器码为:上一页下一页返回3.1指令系统概述②8位编码中包含操作码和寄存器编码。例如:MOVA,Rn这条指令的功能是把寄存器Rn(n=0,1,2,3,4,5,6,7)中的内容送到累加器A中去)其机器码为:假设n=0,则寄存器编码为Rn=000(参见指令表),则指令MOVA,R0的机器码为E8H,其中操作11101表示执行把寄存器中的数据传送到A中去的操作。000为R0寄存器编码。(2)双字节指令。双字节指令格式中,指令的编码由两个字节组成,该指令存放在存储器时需占用两个存储器单元。例如:MOVA,#DATA上一页下一页返回3.1指令系统概述这条指令的功能是将立即数DATA送到累加器A中去。假设立即数DATA=85H,则其机器码为:(3)三字节指令。三字节指令格式中第一个字节为操作码,其后两个字节为操作数。例如:MOVdirect#DATA这条指令是指立即数DATA送到地址为,direct的单元中去。假设direct=78H,DATA=80H,则MOV78H,#80H指令的机器码为:上一页下一页返回3.1指令系统概述3.1.2指令系统说明及常用符号单片机所有指令的集合称为指令系统。指令系统与计算机硬件逻辑电路有密切关系。已是表征计算机性能的一个重要指标。不同类型的单片机指令系统不同,同一系列不同型号的单片机指令系统基本相同。MCS-51单片机指令系统具有功能强、指令短、执行快等特点,共有111条指令从功能上可划分成数据传送类(28条)、算术运算类(24条)、逻辑运算类(25条)、控制转移类(17条)、位操作类(17条)等五大类。在MSS-51汇编指令系统中,约定厂一些指令格式描述中的常用符号现将这些符号的标记和含义说明如下表3-1所示。上一页返回3.2寻址方式在带有操作数的指令中,数据可能就在指令中,也有可能在寄存器或存储器中,甚至在I/O口中。所谓的寻址即是寻找指令中参与运算操作数的地址。一条指令中可能有不止一个操作数,不同的操作数可以有不同的寻址方式。寻址方式越丰富,灵活性就越大,实现功能越强。51单片机一共七种寻址方式。①立即寻址。②直接寻址。③寄存器寻址。④寄存器间接寻址。⑤变址寻址。⑥相对寻址。⑦位寻址。下面逐一介绍各种寻址方式。
1.立即寻址立即寻址方式是操作数包含在指令字节中,指令操作码后面字节的内容就是操作数本身,汇编指令中,在一个数的前面冠以“#”符号作前缀,就表示该数为立即寻址。例如:
机器码助记符注释
7470MOVA,#70H;70H->A下一页返回3.2寻址方式指令功能是将立即数70H送入累加器A,这条指令为双字节指令,操作数本身70H跟在操作码74H后面,以指令形式存放在程序存储器内。在MCS一51指令系统中还有一条立即数为双字节的指令:
机器码助记符
908200MOVDPTR,#8200H
注释
;82H->DPH,00H->DPL
这条指令存放在程序存储器中占三个存储单元请注意,在MCS-51汇编语言指令中,#dala表示8位立即数,#data16表示16位立即数,立即数前面必须有符号“#”,上述两例写成一般格式为:MOVA,#dadaMOVDPTR,#data16上一页下一页返回3.2寻址方式2.直接寻址在指令中含有操作数的直接地址,该地址指出厂参与操作的数据所在的字节地址或位地址。直接寻址方式中操作数存储的空间有三种:(1)内部数据存储器的低128个字节单元(00H~7FH)。例如MOVA,70H;(70H)->A
指令功能是把内部RAM70H单元中的内容送入累加器A。
(2)程序存储器。例如LJMP300H;300H->(PC),跳转至程序存储器300H单元
(3)特殊功能寄存器。特殊功能寄存器只能用直接寻址方式进行访问。上一页下一页返回3.2寻址方式MOVIE,#85H;立即数85H一中断允许寄存器IE。IE为特殊功能寄存器,其字节地址为A8H。一般在访问SFR时,可在指令中直接使用该寄存器的名字来代替地址。直接寻址是用于访问高128个单元的特殊功能寄存器SFR的唯一方法。另外,访问SFR可在指令中直接使用该寄存器的名字来代替地址,如MOVA,80H,可以写成MOVA,P0,因为PO口的地址为80H。3.寄存器寻址以通用寄存器的内容为操作数的寻址方式。通用寄存器指A,B、DPTR以及R0R7。寄存器寻址按所选定的工作寄存器RO~R7进行操作,指令机器码的低3位的八种组合000,001,…,110,111分别指明所用的工作寄存器R0,R1,…,R6,R7。如:MOVA,Rn(n=0~7),这8条指令对应的机器码分别为E8H-EFH。例如:INCRO;(RO)+1一R0。指令功能是对寄存器RO进行操作,使其内容加1.上一页下一页返回3.2寻址方式4.寄存间接寻址由指令指出某一个寄存器的内容作为操作数的地址,这种寻址方式称为寄存器间接寻址。这里要注意,在寄存器间接寻址方式中,存放在寄存器中的内容不是操作数,而是操作数所在的存储器单元地址,寄存器起地址指针的作用,寄存器间接寻址用符号“@”表示。寄存器间接寻址只能使用寄存器R0或R1作为地址指针,来寻址内部RAM(00H~FFH)中的数据。寄存器间接寻址也适用于访问外部RAM,此时可使用R0,R1或DPTR作为地址指针。例如:MOVA,@R0;((R0))→A指令功能是把RO所指出的内部RAM单元中的内容送累加器A。若R0内容为60H,而内部RAM60H单元中的内容是3BH,则指令MOVA,@R0的功能是将3BH这个数送到累加器A,如图3-2所示)上一页下一页返回3.2寻址方式5.变址寻址变址寻址又称为基址加变址寻址,只能对程序存储器中数据进行操作。由于程序存储器是只读的,因此变址寻址只有读操作而无写操作,在指令符号上采用MOVC的形式。这种寻址方式用于访问程序存储器中的数据表格,它把基址寄存器(DPTR或PC)和变址寄存器A的内容作为无符号数相加形成16位的地址,访问程序存储器中的数据表格。例如:MOVCA,@A+DPTR;((DPTR)+(A))->AMOVCA,@A+PC;((PC)+(A))->A
通常把PC或DPTR认为基地址寄存器,A为偏移量。A中为无符号数,指令功能是A的内容和DPTR或当前PC的内容相加得到程序存储器的有效地址,把该存储器单元中的内容送到A。假设DPTR中内容为2000H,A中内容为10H,程序存储器2010H单元中内容为64H,执行指令MOVCA,@A+DPTR后会将程序存储器2010H单元中的值64H送至累加器A中,如图3-3所示。上一页下一页返回3.2寻址方式6.相对寻址这类寻址方式是以当前PC的内容作为基地址,加上指令中给定的偏移量所得结果作为转移地址,它只适用于双字节转移指令。偏移量是带符号数,在-128~+127范围内,用补码表示。相对寻址用于访问程序存储器,常出现在相对转移指令中。在使用相对寻址时要注意以下两点:(1)当前PC值是指相对转移指令的存储地址加上该指令的字节数。例如:JZrel是一条累加器A为零就转移的双字节指令。若该指令的存储地址为2050H,则执行该指令时的当前PC值即为2052H。即当前PC值是对相对转移指令取指结束时的值。(2)偏移量rel是有符号的单字节数。以补码表示,其值的范围是-128~+127(00H~FFH),负数表示从当前地址向前转移,正数表示从当前地址向后转移。所以,相对转移指令满足条件后,转移的地址(目的地址)为:
目的地址=当前PC值+rel=指令存储地址+指令字节数+rel
相对寻址用于修改PC值,主要用于实现程序的分支转移。上一页下一页返回3.2寻址方式例如,SJMP08H;PC←PC+2+08H指令操作示意图如图3-4所示。在实际使用时偏移量往往用标号替代,由计算机计算出实际应该跳转的地址便于编写和阅读。7.位寻址指令中含有位地址,位寻址其实是一种直接寻址方式,不过其地址是位地址。位地址和字节地址的区分通过指令区分:MOVA,20H;指令中日的操作数为累加器A为8位寄存器,因此20H为字节地址。
MOVC,20H;指令中日的操作数为CY为PSI}%寄存器的其中一位,因此20H为位地址。MCS-51单片机中能够进行位寻址的区域为:片内RAM的20H~2FH为位寻址空间(00~7FH)和某些特殊功能寄存器(凡是地址能被8整除的SFR均能够进行位寻址)。上一页下一页返回3.2寻址方式下面一些例子表示儿种规定位的方法。
SETBTR1;置预先定义厂的位地址TR1(定时器上的运行标志)该位用符号代替
SETBACC.7;置累加器A中最高位
SETB88H.6;置88H单元的位6(定时器1的运行标志)SETB8EH;对位地址8E置位(定时器1的运行标志)在8051芯片上,有儿个位地址是预先以符号定义了的,可将这些符号用在操作数中,同时也能用BIT伪指令自己定义位地址符号。七种寻址方式所对应的寻址空间如表3-2所示。上一页返回3.3MCS-51指令系统MCS-51指令系统有42种助记符代表厂33种操作功能,这是因为有的功能可以有几种助记符(例如数据传送的助记符有MOV,MOVC,MOVX。指令功能助记符与操作数各种可能的寻址方式相结合,共构成111种指令。这111种指令中,如果按字节分类,单字节指令49条,双字节指令45条,三字节指令17条。若从指令执行的时间看,单机器周期(12个振荡器周期)指令64条,双机器周期指令45条,两条(乘、除)四个机器周期指令。在12MHz晶振的条件下,分别为1,2和4。由此可见MCS-51指令系统具有存储空间效率高和执行速度快的特点。MCS-51指令功能分为五大类:数据传送类、算术运算类、逻辑运算类、控制转移类和位操作类。下一页返回3.3MCS-51指令系统3.3.1数据传送类指今数据传送指令一般的操作是把源操作数传送到指令所指定的日标地址,指令执行后,源操作数不变,日的操作数被源操作数所代替。数据传送是一种最基本的操作,数据传送指令是编程时使用最频繁的指令,其性能对整个程序的执行效率起很大的作用。在MCS-51指令系统中,数据传送指令非常灵活,它可以把数据方便地传送到数据存储器和I/O口中。数据传送类指令用到的助记符有:MOV,MOVX,MOVC,XCH,XCHD,PUSH,POP。数据传送类指令见表3-3。数据传送类指令源操作数和目的操作数的寻址方式及传送路径如图3-5所示。1.访问片内RAM及SFR的一般传送指令内部RAM及SFR间一般传送指令见表3-4所示。上一页下一页返回3.3MCS-51指令系统(1)以A为日的操作数。
MOVA,Rn;A←RnMOVA,direct;A←
(direct)MOVA,@Ri;A←
(Ri)MOVA,#data;A←#data(2)以直接地址为目的操作数
MOVdirect,aMOVdirect,RnMOVdirect1,dirccl2MOVdirect,@RiMOVdirect,#data例:MOVEOH,78H
其中目标操作数地址E0H为累加器的字节地址,源操作数地址78H为内部RAM单元地址,指令的功能是把内部RAM78H单元中的数据传送到累加器ACC中。指令的机器码为85H,78H,E0H。返回上一页下一页3.3MCS-51指令系统(3)以Rn为日的操作数。
MOVRn,A;Rn←AMOVRn,direct;Rn←
(direct)MOVRn,#data;Rn#←dtla(4)以间接地址为日的操作数。
MOV@Ri,A;(Ri)←AMOV@Ri,direct;(Ri)←(direct)MOV@Ri,#data;(Ri)←#data例如:设(30H)=6FH,R1=40H,执行MOV@R1,30H后,30H单元中数据取出送人R1间接寻址的40H单元,(40H)=6FH。返回上一页下一页3.3MCS-51指令系统(5)以DPTR为目的操作数。
MOVDPTR,#data16;DPTR←#data16
例如执行MOVDPTR,#2000H后,(DPTR)=2000H.8051是一种8位机,这是唯一的一条16位立}}l数传递指令。功能:将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例:MOVDPTR,#1234H
执行完了之后DPH中的值为12H,DPL中的值为34H。如果我们分别向DPH,DPL送数,则结果也一样。如下面两条指令:MOVDPH,#35HMOVDPL,#12H
则就相当于执行了MOVDPTR,#3512H返回上一页下一页3.3MCS-51指令系统2.累加器A与外部数据存储器之间数据传送指令
MCS-51单片机CPU对片外扩展的数据存储器RAM或I/O口进行数据传送,必须采用寄存器间接寻址的方法,通过累加器A来完成。这类指令共有以下4条单字节指令,指令操作码助记符都为MOVX。该类指令有两组见表3-5所示。(1)DPTR内部指示外部数据存储器地址。①外部数据存储器内容送累加器。助记符功能
MOVXA,@DPTRA←
((DPTR))执行这条指令时,P3.7引脚上输出RD有效信号,用作外部数据存储器的读选通信号。DPTR所包含的16位地址信息由PO(低8位)和P2口(高8位)输出,选中单元的数据由P0输人到累加器,P0口作分时复用的总线。返回上一页下一页3.3MCS-51指令系统②累加器内容送外部数据存储器。助记符功能
MOVX@DPTR,A((DPTR))←A执行该指令时,P3.6引脚上输出WP有效信号,用作外部数据存储器的写选通信号。DPTR所包含的16位地址住处由P0口(低8位)和P2口(高8位)输出,累加器的内容由PO口输出,PO口作分时复用总线。(2)由Ri内容指示外部数据存储器地址。①外部数据存储器内容送累加器。助记符功能
MOVXA,@RiA←
((Ri)+(P2)),i=0,1执行该指令时,在P3.7引脚上输出RD有效信号,用作外部数据存储器的读选通信号。Ri所包含的低8位地址由P0口输出,而高8位地址由P2口输出。选中单元的数据由P0口输入到累加器。返回上一页下一页3.3MCS-51指令系统例:设外部数据存储器2097H单元中内容为80H,在执行下列指令后,则A中的内容为80H。
MOVP2,#20HMOVRO,#97HMOVXA,@R0②累加器内容送外部数据存储器。助记符功能
MOVX@Ri,A((R,)+(P2))~(A),i=0,1执行该指令时,在P3.6引脚上输出WR有效信号,用作外部数据存储器的写选通信号。P0口上分时输出由R,指定的低8位地址及输入外部数据存储器单元的内容。高8位地址由P2口输出。3.累加器A与程序存储器传送指令访问程序存储器的数据传送指令又称作查表指令,采用基址寄存器加变址寄存器间接寻址方式,把程序存储器中存放的表格数据读出,传送到累加器A。共有如下两条单字节指令,指令操作码助记符为MOVC。返回上一页下一页3.3MCS-51指令系统第一条:
助记符功能
MOVCA,@A+PcPc←(Pc)+1A←((A)+(PC))这条指令以PC作为基址寄存器,A的内容作为无符号数和PC内容(下一条指令第一字节地址)相加后得到一个16位的地址,把该地址指出的程序存储器单元的内容送到累加器A。例:(A)=30H,执行下列指令地址指令
1000H:MOVCA,@A+PC结果为程序存储器中1031H单元的内容送入A。这条指令的优点是不改变特殊功能寄存器及PC的状态,根据A的内容就可以取出表格中的常数。缺点是表格只能存放在该条查表指令后面256个单元之内,因此表格大小受到限制,而且表格只能被该段程序所使用。返回上一页下一页3.3MCS-51指令系统第二条:
助记符功能
MOVCA,@A+DPTRA←
(A)+(DPTR))这条指令以DPTR作为基址寄存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,把该地址指出的程序存储器单元的内容送到累加器A。例:(DPTR)-8100H,(A)=40H,执行下列指令
MOVCA,@A+DPTR结果为程序存储器中8140H单元的内容送人累加器A。这条指令的执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址无关。因此表格大小和位置可在64KB程序存储器中任意安排,一个表格可被各个程序块公用。返回上一页下一页3.3MCS-51指令系统4.栈操作指令在MCS-51内部RAM中可以设定一个后进先出的区域,称为堆栈。在特殊功能寄存器中有一个堆栈指针SP,它指出栈顶的位置。堆栈操作有进栈和出栈,即压入和弹出数据,常用于保存或恢复现场。进栈指令用于保存片内RAM单元(低128字节)或特殊功能寄存器SFR的内容;出栈指令用于恢复片内RAM单元(低128字节)或特殊功能寄存器SFR的内容。在指令系统中有下列两条用于数据传送的栈操作指令:(1)进栈指令。助记符功能
PUSHdirectSP←
(SP)+1(SP)←(direct)这条指令的功能是首先将栈指针SP的内容加1,然后把直接地址指出的单元内容传送到栈指针SP所指的内部RAM单元中。例:(SP)=60H,(ACC)=30H,(B)=70H,执行下列指令:PUSHACC;SP←
(SP)+1,即SP←61H61H←30HPUSHB;SP←
(SP)+1,即SP←62H62H←70H返回上一页下一页3.3MCS-51指令系统(2)出栈指令助记符功能
POPdirectdirect←
((SP))SP←
(SP)-1这条指令的功能是栈指针SP所指的内部RAM单元内容送人直接地址指出的字节单元中,栈指针SP的内容减1.例:(SP)=62H,(62H)=70H,(61H)=30H,执行下列命令
POPDPH;DPH←
((SP)),SP←(SP)-1POPDPL;DPL←
((SP)),SP←(SP)-1
结果;(DPTR)=7030H,(SP)=60H执行POPdirect指令不影响标志,但当直接地址PSW时,可以使一些标志改变。这也是通过指令强行修改标志的一种方法。例:若在外部程序存储器中2000H单元开始依次存放0~9的平方值,数据指针(DPTR)=3A00H,用查表指令取得2003H单元的数据后,要求保持DPTR中的内容不变。返回上一页下一页3.3MCS-51指令系统完成上述功能的程序如下:MOVA,#03H;(A)←03HPUSHDPH;保护DPTR高8位人栈
PUSHDPL;保护DPTR低8位人栈
MOVDPTR,#2000H;(DPTR)←2000HMOVCA,@A+DPTR;(A)←(2000H+03H)POPDPL;弹出DPTR低8位
POPDPH;弹出DPTR高8位执行结果:(A)=09H,(DPTR)=3A00H。5.字节交换指令这组指令的功能是将累加器A的内容和源操作数内容相互交换。源操作数有寄存器寻址、直接寻址和寄存器间接寻址等寻址方式。分为全字节交换和半字节交换两类见表3-6所示。返回上一页下一页3.3MCS-51指令系统(1)全字节交换指令。助记符功能
XCHA,Rn(A)←→
(Rn},n=0~7XCHA,@Ri(A)←→
((Ri))i=0,1XCHA,direct(A)←→
(direct)例:(A)=80H,(R7)=08H,执行下列指令:XCHA,R7;(A)←→
(R7)
结果:(A)=08H,(R7)=80H(2)半字节交换指令。助记符功能
XCHDA,@Ri(A3~0)((Ri)3~0)i=0,1这条指令将A的低4位和R0或R1指出的RAM单元低4位相互交换,各自的高4位不变。返回上一页下一页3.3MCS-51指令系统例:设(R0)=30H,30H=4AH,(A)=28H,则执行XCHA,@R0后,结果为(A)=4AH,(30H)=28H。执行XCHDA,@R0后,结果为(A)=2AH,(30H)=48H。3.3.2算术运算类指今在MCS-51指令系统中具有单字节的加法指令、减法指令、乘法指令、除法指令,共24条,见表3-7算术运算指令执行的结果将影响进位(Cy),辅助进位(Ac),溢出标志位(OV)。但是加1和减1指令不影响这些标志。1.加法指令加法指令分为不带进位加法指令、带进位加法指令、加一指令、十进制调整指令四种,大都以累加器A作为日的操作数。执行的结果将影响进位(Cy)、辅助进位(Ac)、溢出标志位(OV)以及奇偶校验位(P)。返回上一页下一页3.3MCS-51指令系统(1)不带进位加法指令
ADDA,Rnn=0~7ADDA,directADDA,@Rii=0,1ADDA,#data这组加法指令的功能是把所指出的字节变量加到累加器A上,其结果放在累加器中。相加过程中如果D:有进位(C7=1),则进位CY置“1”,否则清+0;,如果D3有进位则辅助进位Ac置“1”,否则清“0”;如果D6有进位而D7无进位,或者D7有进位D6无进位,则溢出标志0V置“1”,否则清“0”。源操作数有寄存器寻址,直接寻址,寄存器间接寻址和立即寻址等寻址方式。例:(A)=85H,(R0)=20H,(20H)=0AFH,执行指令
ADDA,@R0返回上一页下一页3.3MCS-51指令系统结果:(A)=34H;Cy=1,Ac=1;OV=1对于加法,溢出只能发生在两个加数符号相同的情况。在进行带符号数的加法运算时,溢出标志OV是一个重要的编程标志,利用它可以判断两个带符号数相加和是否溢出(即和大于+127或小于-128),当溢出时结果无意义。返回上一页下一页3.3MCS-51指令系统(2)带进位加法指令。
ADDCA,Rnn=0~7ADDCA,directADDCA,@Rii=0,1ADDCA,#data这组带进位加法指令的功能是把所指出的字节变量、进位标志与累回器A内容相加,结果留在累加器中。对进位标志与溢出标志的影响与ADD指令相同。例:(A)=85H,(20H)=OFFH,Cy=1,执行指令:ADDCA,20H返回上一页下一页3.3MCS-51指令系统结果:(A)=85(H);CY=1,AC=1,OV=0例:试编程计算1067H+30AOH的值,结果保存在R0(保存低8位)、(保存高8位)中。分析:先低字节作不带进位求和,再作带进位高字节求和。返回上一页下一页3.3MCS-51指令系统程序如下:MOVA,#67HADDA,#0A0HMOVR0,AMOVA,#10HADDCA,#30HMOVR1,A带进位加法多用于多字节加法中,高位字节的相加。(3)加1指令。INCA;(A)~(A)+1INCRn;(Rn}~(Rn}+1INC@Ri;((Ri))~((Ri))+1INCdirect;(direcL)~(direct)+1INCDPTR;(DPTR)~(DPTR)+1
这组加1指令的功能把所指出的变量加1,若原来为数据为0FFH,执行后为00H,不影响任何标志。操作数有寄存器寻址、直接寻址和寄存器间接寻址方式。返回上一页下一页3.3MCS-51指令系统例:(A)=0FFH,(R3)=0FH,(30H)=0F0H(R0)=40H(40H)=00H,执行下列指令
INCA;A←
(A)+1INCR3;R3←(R3)+1
INC30H;30H←(30H)+1INC@RO;(R0)←((R0))+1
结果:(A)=00H,(R3)=10H,(30H)=F1H,
(40H)=01H,不改变PSW状态。(4)十进制调整指令。
DAA;
若(A)3~0>9或(AD)=1,则(A)3~0←(A)3~0+06H
若(A)7~4>9或(CY)=1,则(A)7~4←(A)7~4+06H返回上一页下一页3.3MCS-51指令系统十进制调整指令是一条对二一十进制的加法进行调整的指令。它是一条单节指令,机器码为D4H。两个压缩BCD码按二进制相加,必须在加法指令ADD,ADDC后,经过本指令调整后才能得到正确的压缩BCD码和数,实现十进制的加法运算。例:对BCD码加法65+58->DBH,进行十进制调整。参考程序如下:MOVA,#65H;(A)←65ADDA,#58H;(A)←(A)+58DAA;十进制调整执行结果:(A)=(23)BCD,(CY)=1,即65+58=123.返回上一页下一页3.3MCS-51指令系统指令的使用条件:(1)只能紧跟在加法指令(ADD/ADDC)后进行。
(2)两个加数必须已经是BCD码。
(3)只能对累加器A中结果进行调整加6修正的依据:由CPU判CY,AC是否=1?A的高、低4位是否大于9?使用时应注意:DA指令不能对减法进行十进制调整。做减法运算时,可采用十进制补码相加,然后用DA指令进行调整。2.减法指令减法指令分为带借位减法指令、减一指令两种。
(1)带借位减法指令。SUBBA,Rnn=0~7SUBBA,directSUBBA,@Rii=0,1SUBBA,#data返回上一页下一页3.3MCS-51指令系统这组带进位减法指令的功能是从累加器中减去指定的变量和进位标志,结果在累加器中。进行减法过程中如果位7需借位,则CY置位,否则CY清“0";如果位3需借位,则Ac置位,否则Ac清“0“;如果位6需借位而位7不需借拉或者位7需借位而位6不需借位则溢出标志OV置位,否则溢出标志清“0"。在带符号数运算时,只有当符号不相同的两数相减时才会发生溢出。[例3-13」设(A)=49H,CY=1,
执行:SUBBA,#54H01001001(49H)01010100(54H)-)111110100(借位1)
结果:CY=1,AC=0,P=0,OV=0,(A)=F4HMCS-51单片机没有不带借位的减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将CY清零即可。返回上一页下一页3.3MCS-51指令系统(2)减一指令。
DECA;(A)←(A)—1DECRn;(Rn)←(Rn)—1DEC@Ri;((Ri))←((Ri})—1DECdirect;(direct)←(direct)这组指令的功能是将指定的变量减1。若原来为00H,减1后下溢为0FFH,不影响标志位。例:(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,执行指令:DECA;A←
(A)—1DECR7;R7←
(R7)—1DEC30H;30H←
(30H)—1DEC@R1;(R1)←((R1))—1
结果:(A)=0EH,(R7)=18H;(30H)=0FFH;(40H)=0FEH,不影响标志。返回上一页下一页3.3MCS-51指令系统3.乘除法指令乘除法指令是唯一两条单字节4机器周期的指令。(1)乘法指令。
MULAB;BA←AxBA和B中各存放一个8位无符号数,指令执行后,16位乘积的高8位在B中,低8位存A中。若乘积大于FFH(255),则溢出标志OV置1,否则OV清零。乘法指令执行后进位标志CY总是零,即CY=0.例:(A)=50H,(B)=0A0H,执行指令:MULAB
结果:(B)=32H,(A)=00H(即积为3200H)。CY=0,OV=1.返回上一页下一页3.3MCS-51指令系统(2)除法指令。
DIVAB;A÷B→商在A中,余数在B中A和B中各存放一个8位无符号数,A放被除数,B放除数。指令执行后,A中存放商,B中存人余数。若B=00H,则指令执行后OV=1,A与B不变。除法指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数,所得商存于累加器A中,余数存于寄存器B中,进位标志位CY和溢出标志位OV均被清零。若B中的内容为0时,溢出标志OV被置1,即OV=1,而CY仍为0.例:(A)=0FBH,(B)=12H,执行指令。
DIVAB
结果:(A)=0DH,(B)=11H,CY=0,OV=0.返回上一页下一页3.3MCS-51指令系统3.3.3逻辑运算类指今逻辑运算类指令共24条,分为逻辑与指令、逻辑或指令、逻辑异或指令和与累加器A相关的逻辑指令这类指令大都不会影响PSW中的标志位,除了A作为日的操作数影响P。逻辑操作类指令见表3-8。逻辑与指令指令功能:将两个操作数内容按位逻辑与运算并将结果送回日的操作数单元中。返回上一页下一页3.3MCS-51指令系统例:(P1)=C5H=11000101B,屏蔽P1口高4位而保留低4位。执行指令:ANLP1,#0FH
结果为:(P1)=05H=00000101B。逻辑“与”指令常用来使字节中某些位清“0",其他位保持不变。则欲清零的位用“0”与该位相与,保留不变的位用“1”与该位相与。2.逻辑或指令指令功能:将两个操作数内容按位逻辑或运算并将结果送回日的操作数单元中。返回上一页下一页3.3MCS-51指令系统例:若(A)=0AAH,(c)=0,(AC)=0.
执行指令ORLA,#OFH具体操作:(A)VOFH->A
D7D6D5D4D3D2D1D010101010(A)=AAH∨00001111#OFH10101111执行指令后结果:(A)=AFH,(C)=0,(AC)=0。逻辑“或”指令常用来使字节中某些位置“1",其他位保持不变。则欲置位的位用“1”与该位相或,保留不变的位用“0”与该位相或。返回上一页下一页3.3MCS-51指令系统3.逻辑异或指令指令功能:将两个操作数内容按位逻辑异或运算并将结果送回日的操作数单元中。例:设(A)=90H,(R3)=73H,执行指令:XRLA,R3
返回上一页下一页3.3MCS-51指令系统逻辑“异或”指令常用来使字节中某些位进行取反操作,其他位保持不变。欲某位取反该位与“1”相异或;欲某位保留则该位与“0”相异或。还可利用异或指令对某单元自身异或,以实现清零操作。4.与累加器A相关的逻辑指令以上指令操作数都是A,只有RLC和RRC指令影响标志位Cy,其他对PSW不产生影响。返回上一页下一页3.3MCS-51指令系统(1)清0与取反指令。CLRA;0一A这条指令的功能是将累加器A清“0”不影响Cy,Ac,OV等标志。CPLA;/A->A
这条指令的功能是将累加器A的每一位逻辑取反,原来为1的位变原来为0的位变为1,不影响标志。例:(A)=10101010B,执行指令:CPL=A
结果:(A)=01010101B(2)循环移位指令。①累加器内容循环左移。
BLA
这条指令的功能是把累加器ACC的内容向左循环移1位,位7循环移入位0,不影响标志。返回上一页下一页3.3MCS-51指令系统②累加器带进位左循环移位指令。RLCA这条指令的功能是将累加器ACC的内容和进位标志一起向左循环移1位ACC的位7移人进位位CY,CY入移ACC的第0位,不影响其他标志。③累加器内容循环右移指令。RRA
这条指令的功能是将累加器ACC的内容向右循环移1位,ACC的0循环移入ACC的位7,不影响标志。返回上一页下一页3.3MCS-51指令系统④累加器带进位右循环移位指令。RRCA这条指令的功能是将累加器ACC的内容和进位标志CY一起向右面循环移一位,ACC的位0移入CY,CY移入ACC的位7。对RLC、RRC指令,在CY=0时,RLC相当于乘以2操作,RRC相当于除以2操作。例:设(A)=SAH=90,且CY=0,则执行指令RLA后,(A)=B4H=180。执行指令RRA后,(A)=2DH=45。执行指令RLCA后,(A)=B4H=180。执行指令RRCA后,(A)=2DH=45。返回上一页下一页3.3MCS-51指令系统⑤累加器半字节交换指令。SWAPA这条指令的功能是将累加器ACC的高半字(ACC.7~ACC.4)和低半字节(ACC.3~ACC.0)互换。例:(A)=0C5H,执行指令
SWAPA
结果:(A)=5CH.例:把累加器A中的低4位状态,通过P1口的高4位输出,P1口的低4位状态不变。程序如下:ANLA,#0FH;屏蔽A的高4位SWAPAANLP1,#0FH;清P1口高4位ORLP1,A;P1口高4位输出A的低4位返回上一页下一页3.3MCS-51指令系统3.3.4控制转移类指今控制转移类指令都是用来改变程序计数器Pc的位,使Pc有条件地,或无条件地,或通过其他方式,从当前的位置转移到一个指定的地址单元去,从而改变程序的执行方向。控制转移指令分为4大类:无条件转移指令、条件转移指令、调用指令和返回指令见表3-9。1.无条件转移指令(1)绝对转移指令。
AJMPaddR11;PC10~0←addr11这是2K字节范围内的无条件转跳指令,把程序的执行转移到指定的地址。该指令在运行时先将PC+2,然后通过把指令中的a10~a0→
(PC10~0)得到跳转目的地址(即PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0)送入PC。返回上一页下一页3.3MCS-51指令系统地址必须与AJMP后面一条指令的第一个字节在同一个2K区域的存储器区内。如果把单片机64KB寻址区分成32页(每页2KB,则PC15-PC11(00000B-11111B)称为页面地址(即:注0页-31页),a10~a0称为页内地址。但应注意:AJMP指令的日标转移地址不是和AJMP指令地址在同一个2KB区域,而是应和AJMP指令取出后的PC地址(即:PC+2)在同一个2KB区域。例如:若AJMP指令地址为2FFEH,则PC+2=3000H,故日标转移地址必在3000H-37FFH这个2KB区域内。例:若AJMP指令地址(PC)=2300H。执行指令AJMP0FFH后,结果为:转移目的地址(PC)=20FFH,程序向前转到20FFH单元开始执行。(2)相对转移(短跳转)指令SJMPrel;PC←PC+2+rel
这是无条件转跳指令,执行时在PC加2后,把指令中补码形式的偏移量值加到PC上,并计算出转向日标地址。因此,转向的日标地址可以在这条指令前128字节到后127字节之间。即:转移日的地址=SJMP指令所在地址+2+rel。返回上一页下一页3.3MCS-51指令系统该指令使用时很简单,程序执行到该指令时就跳转到标号rel处执行。例:KRD:SJMPrel;
如果KRD标号值为0100H(即SJMP这条指令的机器码存放于0100H和0101H这两个单元中);如需要跳转到的目标地址为0123H,则指令的第二个字节(相对偏移量)应为:rel=0123H-0102H=21H(3)长跳转指令。
LJMPaddr16;PC~addr16
执行这条指令时把指令的第二和第三字节分别装人PC的高位和低位字节中,无条件地转向指定地址。转移的日标地址可以在64K程序存储器地址空间的任何地方,不影响任何标志。例:执行指令
LJMP8100H
不管这条跳转指令存放在什么地方,执行时将程序转移到8100H。这和AJMP,SJMP指令是有差别的。返回上一页下一页3.3MCS-51指令系统(4)散转指令。
JMP@A+DPTRPC←A+DPTR
这条指令的功能是把累加器中8位无符号数与数据指针DPTR中的16位数相加,将结果作为下条指令地址送入PC,不改变累加器和数据指针内容,也不影响标志。利用这条指令能实现程序的散转。例:如果累加器A中存放待处理命令编号(0~7),程序存储器中存放着标号为PMTB的转移表首址,则执行下面的程序,将根据A中命令编号转向相应的命令处理程序。返回上一页下一页3.3MCS-51指令系统
PM:MOVR1,A;(A)*3→ARLAADDA,R1MOVDPTR,#PMTB;转移表首址→DPTRJMP@A+DPTR;据A值跳转到不同入口PMTR:LJMPPMO;转向命令0处理入口
LJMPPM1;转向命令1处理入口
LJMPPM2;转向命令2处理入口
LJMPPM3;转向命令3处理入口
LJMPPM4;转向命令4返回上一页下一页3.3MCS-51指令系统处理入口
LJMPPMS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全教育课堂:预防交通事故小学主题班会课件
- 销售技巧提升及经验分享互动方案
- 交通安全讲座:全程保平安小学主题班会课件
- 办公区域大面积漏水紧急阶段物业安全管理处预案
- 产品技术参数差异的澄清联系信(6篇)
- 小学主题班会课件:日常生活中的安全与健康
- 工业电气控制系统设计维护手册
- 爱国情怀系家国,小学主题班会课件
- 施工电梯安装、拆卸安全监理实施细则
- 高级人工智能算法实战手册
- 2018温州中学提前招数学试卷
- 《风电场项目经济评价规范》(NB-T 31085-2016)
- YY/T 0969-2023一次性使用医用口罩
- 山西省吕梁市孝义市柱濮镇上令狐村煤矿环评环评可研资料环境影响
- 公司工伤预防课件
- 粮食流通统计基础业务培训课件
- 肝局灶性结节性增生超声诊断课件
- 高速铁路测量技术培训
- 【护士资格考试】吉林心脏病医院模拟检测练习题
- 书信礼仪课件
- 加油站工程工程施工组织设计方案
评论
0/150
提交评论