单片机应用及控制技术第4章80C51单片机指

上传人:人*** 文档编号:569856259 上传时间:2024-07-31 格式:PPT 页数:70 大小:535.50KB
返回 下载 相关 举报
单片机应用及控制技术第4章80C51单片机指_第1页
第1页 / 共70页
单片机应用及控制技术第4章80C51单片机指_第2页
第2页 / 共70页
单片机应用及控制技术第4章80C51单片机指_第3页
第3页 / 共70页
单片机应用及控制技术第4章80C51单片机指_第4页
第4页 / 共70页
单片机应用及控制技术第4章80C51单片机指_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《单片机应用及控制技术第4章80C51单片机指》由会员分享,可在线阅读,更多相关《单片机应用及控制技术第4章80C51单片机指(70页珍藏版)》请在金锄头文库上搜索。

1、第4章80C51单片机指令系统上海电子信息职业技术学院上海电子信息职业技术学院何永艳主编何永艳主编4.1位及位操作指令位及位操作指令图2.1 用单片机控制单个LED的电路原理图接在P1.0上的二极管要么亮,要么不亮,只有两种状态,我们可以用0和1来代替这两种状态,规定亮为1,不亮为0。二极管的亮和灭只是一种物理现象,可告诉单片机时,二极管的亮和灭就代表数字了。实际上这就是一个二进制位,因此把一根线(P1.0)称之为一“位”,用BIT表示。4.1.1位寻址区位寻址区位地址位地址:00H:00H7FH 7FH 分布在分布在:20H:20H2FH2FH单元单元这些可位寻址的空间,可通过执行指令直接对

2、某一位进行操作,这些可位寻址的空间,可通过执行指令直接对某一位进行操作,如置如置1、清、清0或判或判1、判、判0等,可用作软件标志位或用于位(布等,可用作软件标志位或用于位(布尔)处理。尔)处理。这是一般微机所不具备的,这种位寻址能力是这是一般微机所不具备的,这种位寻址能力是8051所独有的。所独有的。20H2FH:既可以字节操作,又可以位操作,但是要用不同:既可以字节操作,又可以位操作,但是要用不同的指令来区分;的指令来区分;位地址位地址3AH的另一种表达形式为的另一种表达形式为27H.2mov20h,asetb00hsetb20.04.1.2可以位寻址的特殊功能寄存器可以位寻址的特殊功能寄

3、存器80C51中有一些SFR是可以进行位寻址的,这些SFR的特点是其字节地址均可被8整除,1.累加器累加器ACC(E0H)累加器ACC是8051最常用、最繁忙的8位特殊功能寄存器,许多指令的操作数取自于ACC,许多运算结果也存放于ACC中。在指令系统中采用A作为累加器ACC的助记符。2.寄存器寄存器B(F0H)在乘、除指令中,用到了8位B寄存器。乘法指令的两个操作数分别取自A和B,乘积存于B、A两个8位寄存器中。除法指令中,A中存放被除数,B中放除数,商存放于A中,B中存放余数。在其它指令中,B可作为一般通用寄存器或一个RAM单元使用3.程序状态寄存器程序状态寄存器PSW(D0H)PSW是一个

4、8位特殊功能寄存器,它的各位包含了程序执行后的状态信息,供程序查询或判别之用。1)CY(PSW.7)进位标志位。2)AC(PSW.6)半进位标志位,也称辅助进位标志。3)F0、F1(PSW.5,PSW.1)用户标志位。4)RSO和RSl(PSW.4和PSW.5)工作寄存器组选择控制位。5)OV(PSW.2)溢出标志位。6)P(PSW.0)奇偶检验标志位。4.1.3位操作指令位操作指令1.位传送指令MOVC,BITMOVBIT,C这组指令的功能是实现位累加器(CY)和其它位地址之间的数据传递。如:MOVP1.0,CY;将CY中的状态送到P1.0引脚上去(如果是做算术运算,就可以通过观察知道现在C

5、Y是多少)。MOVCY,P1.0;将P1.0的状态送给CY。2.位修正指令1)位清0指令CLRC;使CY=0CLRbit;使指令的位地址等于0。如:CLRP1.0;即使P1.0变为02)位置1指令SETBC;使CY=1SETBbit;使指定的位地址等于1。如:SETBP1.0;使P.0变为13)位取反指令CPLC;使CY等于原来的相反的值,由1变为0,由0变为1。CPLbit;使指定位的值等于原来相反的值,由0变为1,由1变为0。如:CPLP1.0;如图2.1所示,如果原来灯是亮的,则执行本指令后灯灭,反之原来灯是灭的,执行本指令后灯亮。3.位逻辑运算指令1)位“与”指令ANLC,bit;CY

6、与指定的位地址的值相与,结果送回CYANLC,/bit;先将指定的位地址中的值取出后取反,再和CY相与,结果送回CY,但注意,指定的位地址中的值本身并不发生变化。可用下列程序验证图2.1的程序:ORG0000HAJMPSTARTORG0030HSTART:MOVSP,#5FH ;指出堆栈首地址MOVP1,#0FFH;P1口的8位初始状态全为1SETBC;C置1ANLC,/P1.0;(C)=0MOVP1.0,C;(P1.0)0,结果应当是P1.0上的灯亮END2)位“或”指令ORLC,bit;CY与指定的位地址的值相或,结果送回CYORLC,/bit;先将指定的位地址中的值取出后取反,再和CY相

7、或,结果送回CY,但注意,指定的位地址中的值本身并不发生变化。4.位条件转移指令1)判CY转移指令JCrelJNCrel2)判位变量转移指令JBbit,relJNBbit,rel3)判位变量且清0转移指令JBCbit,rel这组指令的功能是分别判进位CY或直接寻址位是1还是0,条件符合则转移;否则继续执行程序。当直接位地址是端口的某一位时,作“读改写”操作。一般采用标号来表示待转移的位置。用开关控制LED的电路如图4.1所示。接通电源,LED灭,当开关往上拨时,LED亮,开关往下拨LED即灭。图图4.1用开关控制用开关控制LED的电路原理图的电路原理图4.1.4用开关控制用开关控制LED源程序

8、文件如下:ORG0040H;该源程序从0040H地址开始存放。SETBP1.7;P1.7作为输入口,应先写入“1”。L2:JBP1.7,L1;判P1.7等于“1”即开关往上拨了吗?是的,转向标号为L1的指令执行;否则继续往下执行程序。CLRP1.0;P1.7等于“0”即开关往下拨时,P1.0等于“0”,即LED灭。AJMPL2;循环上去再判别P1.7的状态。L1:SETBP1.0;P1.7等于“1”即开关往上拨时,P1.0等于“1”,即LED亮。AJMPL2;循环上去再判别P1.7的状态。END;程序结束。4.1.5用位操作指令实现交流电机控制用位操作指令实现交流电机控制1.用位操作指令实现电

9、机控制的特点程序设计简单:将电气控制图转化为逻辑图,以指令的形式实现。串联使用“ANLC,bit”指令,并联使用“ORLC,bit”指令,类似于PLC的写法。容易除错:所使用的指令少,因而便于除错速度较快:程序较短,占用的字节较少,所有执行速度比较快。效率高:使用的位操作指令采用直接寻址方式,执行效率较高2.电动机起动与停止的基本控制1)控制功能(1)接上电源时,电动机无动作。(2)按下起动按钮SB2时,电动机开始运转。(3)超载时,热继电器FR跳脱,电动机停止运转,此时需将FR复位后,按下按钮SB2才有效图4.2电动机起停电气控制图(4)按下停止按钮SB1时,电动机立刻停止运转(5)输入/输

10、出口的控制2)电气控制图电动机起动与停止的电气控制图如图4.2所示。3)单片机引脚功能分配(1)P1.0:接起动按钮SB2,当按钮按下时P1.0=1(2)P1.1:接停止按钮SB1,当按钮按下时P1.1=0(3)P1.2:接热继电器FR的常闭触点,当电机超载时FR断开,P1.2=0(4)P2.0:接交流接触器KM的线圈,当线圈KM有电时,P2.0=0图4.2 电动机起停电气控制图3.程序设计此电气控制图的等效逻辑电路如图4.3所示,源程序如下。ORG0000HCLRP2.0;先把P2.0口初始化为“0”START:MOVC,P1.0;暂存输入信号P1.0ORLC,/P2.0;P1.0和/P2.

11、0的内容相或,结果暂存C中ANLC,/P1.1;或完的结果C与/P1.1相与,结果暂存C中ANLC,/P1.2 ;再次把与完的结果C与/P1.2相与,结果暂存C中MOVP2.0,C;把最终的结果存放到P2.0AJMPSTART;不断循环,采集输入信号,及时在P2.0上更新结果END4.2数据传送指令及应用数据传送指令及应用上一节中让P1.0的LED亮灭,用位操作的方法实现,那能不能在P1口上接8个LED让它们同时亮灭呢。如图4.4所示,如果根据以前所学的知识,8个LED亮,就要用8条位操作指令实现,如表4.3所示。而如果用数据传送指令只需一条即可实现,方便简单很多。图4.48个LED亮灭电路原

12、理图4.2.18个个LED亮灭亮灭表4.38个LED亮的指令对照表一根线可以表示0和1,两根线可以表达00,01,10,11四种状态,也就是可以表于0到3,而三根可以表达07,单片机中通常用8根线(P1.0P1.7)放在一起,表示一个8位的并行口P1,同时计数,就可以表达0255一共256种状态。这8根线或者8位就称之为一个字节(BYTE)。4.2.2内部内部RAM数据传送指令数据传送指令MOVP1,#0FFH;指令功能指令功能:把数据0FFH送给P1,P1中的值是0FFH,即把111111118位二进制数分别送入到P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,P1.6,P1.7

13、8根线上,也就是让8个LED亮。传送指令通用格式为:MOV,1.立即数传送指令(5条)1)8位立即数传送指令位立即数传送指令MOVA,#data;dataA,(A)=dataMOVdirect,#data ;datadirect,(direct)=dataMOVRn,#data;dataRn,(Rn)=data(n=07)MOVRi,#data;data(Ri),(Ri)=data(i=01)说明:说明:箭头左边是要传送的数,箭头右边是送达的目的地。等号左边是地址或寄存器,等号右边是一个具体的数。A,Rn代表寄存器名;direct代表地;()代表寄存器或地址中地内容。(4)(Ri)代表以Ri中

14、的内容为地址,再去找这地址中的数。这4条指令均是立即寻址方式。2)16位立即数传送指令位立即数传送指令MOVDPTR,#data16;data16DPTR,(DPTR)=data1680C51是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的地址数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。如:MOVDPTR,#1234H;则执行完了之后DPH中的值为12H,DPL中的值为34H。反之,如果我们分别向DPH,DPL送数,则结果也一样。如:MOVDPH,#35HMOVDPL,#12H;则就相当于执行了MOVDPTR,#3512H。2.内部内部RAM单元之间的数

15、据传送指令单元之间的数据传送指令内部内部RAM单元之间的数据传送指令共有单元之间的数据传送指令共有5条:条:MOVdirect2,direct1;(direct2)=(direct1),直接寻址方式MOVdirect,Rn;(direct)=(Rn),寄存器寻址方式MOVRn,direct;(Rn)=(direct),直接寻址方式MOVdirect,Ri ;(direct)=(Ri),寄存器间接寻址方式MOVRi,direct ;(Ri)=(direct),直接寻址方式3.通过累加器的数据传送指令通过累加器的数据传送指令与累加器有关的数据传送指令共有与累加器有关的数据传送指令共有6条条:MOV

16、A,Rn;(A)=(Rn)MOVRn,A;(Rn)=(A)MOVA,direct;(A)=(direct)MOVdirect,A;(direct)=(A)MOVA,Ri;(A)=(Ri)MOVRi,A;(Ri)=(A)这6条指令用于实现累加器与不同寻址方式的内部RAM单元之间的数据传送。4.2.3外部外部RAM数据传送指令数据传送指令单片机有内部RAM数据传送指令了,为什么还要有外部RAM数据传送指令呢?因为当单片机的内部RAM不够用时,就要扩充RAM空间,而80C51单片机能扩展64K的外部RAM,即从0000HFFFFH。那么,CPU是如何区分内外、部RAM的?已知的内部RAM的操作码是M

17、OV,而外部RAM的操作码则是MOVX,CPU就是根据不同的指令来自动区分读写内、外部RAM的。内部RAM间可以直接进行数据的传递,而外部RAM单元只能使用间接寻址方法,可以分别使用DPTR和Ri作间址寄存器。1.使用Ri进行间接寻址MOVXA,Ri;(Ri)A,(A)=(Ri)MOVXRi,A;(A)(Ri),(Ri)=(A)2.使用DPTR进行间接寻址MOVXA,DPTR;(DPTR)A,(A)=(DPTR)MOVXDPTR,A;(A)(DPTR),(DPTR)=(A)要读写或写入外部RAM,还必须知道外部RAM的地址,如果外部RAM的地址是8位的,一般使用Ri进行间接寻址,如果外部RAM

18、的地址是16位的,则只能使用DPTR进行间接寻址。所以不同的应用场合就要使用不同的读写指令。【例4.5】按下列要求分别写出传送数据1.将内部RAM中20H单元中的内容送入外部RAM中30H单元中MOVA,20HMOVR0,#30HMOVXR0,A4.2.4程序存储器数据传送指令程序存储器数据传送指令MOVCA,A+PC;(A)+(PC)A,(A)=(A)+(PC)MOVCA,A+DPTR;(A)+(DPTR)A,(A)=(A)+(DPTR)本组指令也被称为查表指令,常用来查一个已做好在ROM中的表格.此条指令的寻址方式是变址寻址【例4.6】有一个数在R0中,要求用查表的方法确定它的平方值(此数

19、的取值范围是05)MOVDPTR,#TABLEMOVA,R0MOVCA,A+DPTR.TABLE:DB0,1,4,9,16,25如(R0)=2,则执行指令MOVCA,A+DPTR后,(A)+(DPTR)=TABLE+2,查表得44.2.5堆栈指令堆栈指令PUSHdirect;SP(SP)+1,(SP)(direct)POPdirect;(direct)(SP),SP(SP)-1第一条为压入指令,就是将direct中的内容送入堆栈中,第二条为弹出指令,就是将堆栈中的内容送回到direct中。2.2.6交换指令交换指令内外部RAM数据传送指令属复制性质,例MOVA,30H;如30H单元地址中的数为

20、57H,则执行完此条指令后A中的内容即为30H地址单元中的57H这个数,而30H单元地址中的数是不变的。而数据交换指令与内外部RAM数据传送指令不同,执行完指令后会修改两个操作数中的内容。同时数据交换主要是内部RAM单元与累加器A之间进行,有整字节和半字节两种交换。1.整字节交换指令字节单元与累加器A进行8位数据交换,共有3条指令:1)XCHA,Rn;(A)(Rn),n=07,即累加器A与寄存器Rn中的数据实现互换。2)XCHA,Ri;(A)(Ri),i=0、1,3)XCHA,direct;(A)(direct)2.半字节交换指令字节单元与累加器A进行低4位的半字节数据交换,只有一条指令:XC

21、HDA,Ri;A30(Ri)30高4位不变,i=0、1。3.累加器高低四位互换SWAPA;A74A30十六进制数和十进制数的BCD码都是以4位二进制数表示,因此XCHD和SWAP指令主要用于实现十六进制数或十进制数的低位交换:4.3控制转移类指令及应用控制转移类指令及应用【例4.11】如图4.4所示,现在让这8个LED循环点亮,先让LED1亮1S,再让LED2亮1S,依次下去,循环工作。(晶振频率为6MHZ)4.3.18个个LED循环点亮循环点亮源程序如下ORG0040HSTART:MOVA,#00000001LOOP: MOVP1,A;先让LED1亮,之后轮流亮LCALLDEL1S;亮一段时

22、间(调用延时1S子程序)RLA;换另一个LEDAJMPLOOP;不断循环;以下是延时1S子程序DEL1S:MOVR5,#4D2:MOVR7,#250D1:MOVR6,#250DJNZR6,$DJNZR7,D1DJNZR5,D2RETEND4.3.2控制转移类指令控制转移类指令1.无条件转移指令不规定转移条件的程序转移称为无条件转移。80C51共有4条无条件转移指令。1)长转移指令LJMPaddr162)短转移指令AJMPaddr113)相对转移指令 SJMPrel4)间接转移指令(散转指令)JMPA+DPTR2.条件转移指令条件转移指令是指当某种条件满足时转移才进行,条件不满足时程序就顺序执行

23、。1)判A转移指令(2条)JZrel;若(A)=0,则转移若(A)0,则程序顺序执行JNZrel;若(A)0,则转移若(A)=0,则程序顺序执行2)减1非0转移指令(2条)DJNZRn,rel;若(Rn)=0,则程序顺序执行;若(Rn)0,则转移DJNZdirect,rel;若(direct)=0,则程序顺序执行;若(direct)0,则转移3)比较转移指令(4条)CJNEA,direct,rel;若(A)=(direct),则程序顺序执行;若(A)(direct),则转移,且若(A)(direct),Cy=0若(A)(direct),Cy=1CJNEA,#data,rel;若(A)=data

24、,则程序顺序执行;若(A)(direct),则转移,且若(A)(direct),Cy=0若(A)(direct),Cy=1CJNERn,#data,rel;若(Rn)=data,则程序顺序执行;若(Rn)data,则转移,且若(Rn)data,Cy=0若(Rn)data,Cy=1CJNERi,#data,rel;若(Ri)=data,则程序顺序执行;若(Ri)data,则转移,且若(Ri)data,Cy=0若(Ri)data,Cy=13.子程序调用和返回指令子程序调用和返回指令8个个LED循环点亮循环点亮源程序如下:源程序如下:ORG0040HSTART:MOVA,#00000001LOOP:

25、 MOVP1,A;先让;先让LED1亮,之后轮流亮亮,之后轮流亮LCALLDEL1S;亮一段时间(调用延时;亮一段时间(调用延时1S子程序)子程序)RLA;换另一个;换另一个LEDAJMPLOOP;不断循环;不断循环;以下是延时;以下是延时1S子程序子程序DEL1S:MOVR5,#4D2:MOVR7,#250D1:MOVR6,#250DJNZR6,$DJNZR7,D1DJNZR5,D2RETEND1)子程序调用指令LCALLaddr16;长调用指令ACALLaddr11;短调用指令上面两条指令都是在主程序中调用子程序,两者有一定的区别,但在初学时,可以不加以区分,而且可以用LCALL标号、AC

26、ALL标号来理解,即调用子程序。2)返回指令返回指令有子程序返回和中断返回两种:RET;子程序返回子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了,即执行RET指令RETI;中断返回如果子程序执行的过程中,还要再次调用其他的子程序,这种现象称为子程序的嵌套。在进入子程序之前,将要使用的累加器和寄存器中的内容预先转移到安全的地方保存起来,这叫现场保护;当子程序执行完即将返回主程序之前,还要将这些内容先取出来,送回到累加器和原来的工作寄存器中,这个过程叫恢复现场。保护现场和恢复现场通常使用堆栈,4.空操作指令NOPNOP为单机周指令,在时间上占用一个机器周期,空操作,就是什么

27、事也不干,停一个周期,一般用作短时间的延时即作为时间“微调”。4.3.3延时程序设计延时程序设计通过指令实现定时的程序叫软件定时程序。软件定时程序是典型的循环程序,它通过执行一个具有固定延时时间的循环程序来实现延时,因此也把定时程序称为延时程序.循环程序一般包括以下几个部分:(1)循环初值。(2)循环体。(3)循环修改。(4)循环控制。循环程序可以缩短程序,减少程序所占的内存空间。1.单循环定时程序单循环定时程序下面是一个最简单的单循环定时程序MOVR5,#250;置循环次数(指令为1个机器周期)LOOP:DJNZR5,LOOP;循环体,2机周2502us/机周1000us1msRET;(指令

28、为2个机器周期)总的定时时间总的机器周期数机周时间,上述子程序实际延时1000us(21)2us1006us1ms可见,单循环定时程序的时间延时比较小。2.较长时间的定时程序较长时间的定时程序为了延长定时时间,通常采用多重循环的方法,如:这个程序总的机器周期数为:11120225020220+2110063所以总的定时时间为100632us=20126us20ms适当选择外循环次数可以编制延时10ms,100ms等延时子程序。3.提高定时精度提高定时精度单片机是按照严格的固定时序执行指令的,因此,定时程序的延时时间总是执行循环程序段所需时间的整数倍。对循环程序段通过增减NOP指令的办法,对时间

29、进行微调,以提高定时精度。4.一个基本的延时程序满足不同的定时要求一个基本的延时程序满足不同的定时要求如果一个系统中有多个定时需要,则可以设计一个基本的延时程序,使其延迟时间为各定时时间的最大公约数,然后就可以以此基本程序作为子程序,通过调用的方法实现所需要的不同定时。4.4逻辑运算指令及应用逻辑运算指令及应用【例4.16】如图4.5所示,要求实现:1.S0单独按下,红灯亮,其余灯灭;2.S1单独按下,绿灯亮,其余灯灭;3.其余情况,黄灯亮。图4.5 用开关控制红绿灯4.4.1用开关控制红绿灯用开关控制红绿灯源程序如下:SGNL:ANLP1,#11100011B;红绿黄灯灭ORLP1,#000

30、00011B;置P1.0、P1.1P1.5P1.7保持状态不变SL0: JNBP1.0#00000011B;P1.0=0,S0未按下,转判S1JNBP1.1,RED;P1.0=1,S0按下;且P1.1=0,S1未按下,转红灯亮YELW:SETBP1.4;黄灯亮CLRP1.3;绿灯灭CLRP1.2;红灯灭SJMPSL0;转循环SL1: JNBP1.1,YELW;P1.0=0,S0未按下;且P1.1=0,S1未按下,转黄灯亮GREN:SETBP1.3;绿灯亮CLRP1.4;黄灯灭CLRP1.2;红灯灭SJMPSL0;转循环RED: SETBP1.2;红灯亮图4.5用开关控制红绿灯CLRP1.3;绿

31、灯灭CLRP1.4;黄灯灭SJMPSL0;转循环END;结束4.4.2逻辑运算类指令逻辑运算类指令1.逻辑“与”运算指令ANLA,Rn;(A)(Rn)AANLA,Ri;(A)(Ri)AANLA,#data;(A)dataAANLA,direct;(A)(direct)AANLdirect,A;(direct)(A)directANLdirect,#data;(direct)datadirect逻辑“与”运算也称逻辑乘,运算结果是“有0出0,全1出1”。“与”运算通常用于将1个字节中的指定位清0,其余位保持不变。如:ANLA,#00H;累加器A中内容清0ANLA,#0FFH;累加器A中内容不变2

32、.逻辑“或”运算指令ORLA,Rn;(A)(Rn)AORLA,Ri;(A)(Ri)ORLA,#data;(A)dataAORLA,direct;(A)(direct)AORLdirect,A;(direct)(A)directORLdirect,#data;(direct)datadirect逻辑“或”运算也称逻辑加,运算结果是“有1出1,全0出0”。“或”运算通常用于将1个字节中的指定位置1,其余位保持不变。如:ORLA,#00H;累加器A中内容不变ORLA,#0FFH;累加器A中内容置13.逻辑“异或”运算指令(6条)XRLA,Rn;(A)(Rn)AXRLA,Ri;(A)(Ri)AXRLA

33、,#data;(A)dataAXRLA,direct;(A)(direct)AXRLdirect,A;(direct)(A)directXRLdirect,#data;(direct)datadirect逻辑“异或”运算用符号“”表示,运算结果是“相同出0,相异出1”。“异或”运算通常用于将1个字节中的指定位取反,其余位保持不变。如:XRLA,#00H;累加器A中内容不变XRLA,#0FFH;累加器A中内容取反4.清零和取反指令CLRA;0A累加器A清零。效果同MOVA,#00H是一样的,只不过它是单周期指令,而MOVA,#00H是双周期指令。CPLA;(A)A将累加器A逐位取反。相当于数字电

34、路中的“非”逻辑。5.循环移位指令RLA ;循环左移,每次执行一次此指令,就将累加器A的值逻辑左移RLCA;带Cy循环左移,如(CY)=0,执行指令后相当于(A)乘2后送回到ARRA ;循环右移RRCA;带Cy循环右移,如(CY)=0,执行指令后相当于(A)除2后送回到A4.5算术运算类指令算术运算类指令算术运算类指令有24条,也是单片机中极为重要的指令系统。1.不带进位位的加法指令ADDA,#DATAADDA,directADDA,RnADDA,Ri指令分析如下:将A中的值与其后面的值相加,最终结果送回到A中。2.带进位位的加法指令ADDCA,RnADDCA,directADDCA,RiAD

35、DCA,#data指令分析如下:将A中的值和其后面的值相加,并且加上进位位C中的值。3.带借位的减法指令SUBBA,RnSUBBA,directSUBBA,RiSUBBA,#data指令分析如下:将A中的值和其后面的值相减,同时减去进位位C中的值。4.乘法指令MULAB此指令的功能是将A和B中的两个8位无符号数相乘,最终结果用1个16位数来表达,其中高8位放在B中,低8位放在A中。在乘积大于FFFFFH(65535)时,0V置1(溢出),否则OV为0,而CY总是0。5.除法指令DIVAB此指令的功能是将A中的8位无符号数除了B中的8位无符号数(A/B)。除了以后,商放在A中,余数放在B中。CY

36、和OV都是0。如果在做除法前B中的值是00H,也就是除数为0,那么0V=1。6.加1指令INCAINCRnINCdirectINCRiINCDPTR用途很简单,就是将后面目标中的值加1。7.减1指令DECADECRNDECdirectDECRi指令分析如下:既然加1指令可以用于计数、定时、地址等加1,那么有加必有减,所以减1指令的功能与加1指令类似。8.十进制加法调整指令十进制调整指令是一条专用指令,用于对BCD码十进制数加法运算的结果进行修正。该指令一般紧跟在加法指令后面DAA;对十进制加法进行调整。练习【例4.24】编写单字节BCD数的减法程序.(60H)-(61H)=(62H)解:要实现

37、单字节BCD数的减法应当设法将减法变为加法后再使用DAA指令调整。具体操作是:先用模(991)H即9AH减去减数,得到其补码,再与被减数进行加法操作,然后再用DAA调整。要注意的预先送入的数据必须是BCD数,千万不能送入一般的十六进制数。源程序如下:CLRCMOVA,#9AHSUBBA,61H;对(61H)内的BCD码求十进制补码ADDA,60HDAA;对和数(其实是差值)进行调整MOV62H,ASJMP$END【例4.25】多字节数减法。43H40H4个字节的内容减去53H50H4个字节的内容,把结果存放在以40H开始的4个单元地址中。解:多字节数相减时,要从地位开始减,而且最低位在进行减法

38、操作时,要先对CY的内容清0。因为只有带CY的减法指令,所有最低位相减时,一定是没有再低位向它的一个借位,所有要清0。子程序如下:LOOP:MOV R0,#40H;指向被减数最低位MOVR1,#5OH;指向减数最低位MOVR2,#04H;字节数CLRCLOOP1:MOVA,R0SUBBA,R1;完成一个字节的减法运算MOVR0,AINCR0INCR1DJNZR2,LOOP1RET【例4.27】已知某数大于100,小于256,存在R3中,编程将其转换为3位BCD码。依次存放在R3、R2、R1中。解:先将要转换的二进制数除以100,商数就是百位数,余数部分再除以10,商数和余数分别为十位数和各位数。子程序如下:MOVA,R3;读被除数MOVB,#100;置除数100DIVAB;除以100,百位数放A,十位数放BMOVR3,A;百位数存放到R3中MOVA,B;取余数放A中MOVB,#10;置除数10DIV AB;除以10,十位数放A,个位数放BMOV R2,A;百位数放R2MOVR1,B;个位数放R1RET

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号