《第3章_单片机指系统.ppt》由会员分享,可在线阅读,更多相关《第3章_单片机指系统.ppt(87页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、MCS-51 单片机原理及应用单片机原理及应用第3章 MCS-51单片机指令系统 MCS-51单片机指令系统指令是指挥计算机工作的命令,一种计算机所能执行的指令集合称之为该种计算机的指令系统。程序是将指令有效地组合成能够完成特定任务的指令序列。指令格式l指令格式指令的表达方式称为指令格式标号:标号:操作码操作码 目的操作数目的操作数 ,源操作数,源操作数 ;注释;注释n标号:指令的符号地址。标号是用户设定的符号,表示该语句所在的地址。标号必须由以字母开头的l8个ASCll字符组成,这些字符不能使用在该汇编语言中已经定义过了的符号。n操作码:操作码是由英文缩写组成的字符串,它规定了指令的操作功能
2、,是指令格式中唯一不能空缺的部分。n操作数:操作数用于给指令的操作提供数据或地址。操作数可以是空白也可能只有一项或二项,还可以有三项。各操作数之间必须用逗号分隔,操作数与操作码之间须用空格分隔。在两个操作数的指令中,把左边的操作数称为目的操作数,而右边操作数称之为源操作数。n注释:注释是对语句或程序段功能的说明。注释要用分号“;”开头,注释的长度不限,但每行开头仍须使用分号“;”,注释也可空缺。MOVA,directRLAMOVR1,ARLARLAADDA,R1MOVdirect,A;取数设为D0;D02;(R1)2D0;2D02;4D02;8D0+2D0;存数10D0MMUL1:数据的表达形
3、式汇编语言中的数据一般采用以下几种表达方式:二进制数形式,末尾用字母B标识,如0101001B。十进制数形式,末尾用字母D标识或不用任何标识,如:96D,78D。十六进制数形式,末尾用字母H标识,在表示时,如果以字母开头,则须在其前面添加“0”,如:0F5H。ASCll码形式,用单引号括起来标识,如GOD,288。指令中常用符号nRn(n=07)当前工作寄存器组R0R7;ni(i=0,l)当前工作寄存器组的R0或RI;nACC代表累加器A的直接地址EOH;n间接寻方式中间址寄存器标志符号;ndata8位立即数;ndatal616位立即数;ndirect8位片内RAM单元(包括SFR的地址或符号
4、)的直接地址;naddr1111位目的地址;naddr1616位目的地址,只限于在LCALL和LJMP指令中使用;nRel8位带符号补码数;nBit片内RAM或SFR中的直接寻址位;nC代表PSW中的进位标志位,称为累加位;n加在位地址前面,表示对该位的状态取反;n(X)表示寄存器X或单元X中的数据;n(X)表示将寄存器X或X存储单元的数作为地址的这个地址单元中的数据。指令分类l指令分类n按指令长度分:单字节指令、双字节指令、三字节指令。n按指令执行时间分:1机器周期指令、2机器周期指令、4机器周期指令。n按指令的功能分:数据传送指令(28条)、算术运算类指令(24条)、逻辑运算与移位类指令(
5、25条)、控制转移类指令(17条)、位操作类指令(17条)。寻址方式寻址方式就是根据指令中给出的地址,寻找操作数的方法和途径寻址方式立即寻址方式直接寻址方式寄存器寻址方式寄存器间接寻址方式基址加变寻址方式位寻址方式相对寻址方式MCS-51系列单片机的寻址方式1立即寻址方式立即寻址方式所谓立即寻址就是操作数在指令中直接给出。立即寻址方式的操作数称立即数,立即数只能是源操作数,不能作为目的操作数。立即数有8位立即数和16位立即数。使用时在立即数前加使用时在立即数前加“#”标志标志。例:MOVA,#20HMOVDPTR,#20D8H2直接寻址方式直接寻址方式直接寻址就是操作数直接以单元地址的形式给出
6、。直接地址以存贮单元形式出现。例如指令:MOVA,20H3寄存器寻址方式寄存器寻址方式 寄存器寻址就是操作数在寄存器中。寄存器包括8个工作寄存器RO一R7,累加器A,寄存器B,数据指针DPTR和布尔处理器的位累加器C。例如指令:MOVA,R24寄存器间接寻址方式寄存器间接寻址方式 MOV A,RiMOVXA,DPTR例如:(R1)80H、(80H)=33H,则执行指令MOVA,Ri后,累加器A的内容为33H而不是80H。寄存器间接寻址是以寄存器中的内容为地址取得操作数的方法。寄存器间接寻址中时,寄存器中存放的是操作数的地址。寄存器间接寻址使用的寄存器为Ri和DPTR,使用时寄存器前面加“标志。
7、即以下形式:5基址加变址寻址方式基址加变址寻址方式 基址加变址寻址就是以DPTR或PC为基址寄存器,以A为变址寄存器,以两者内容相加形成16位地址作为操作数地址。例如指令:MOVCA,A+DPTR6位寻址方式位寻址方式 位寻址方式就是以位为操作数。MCS-51单片机有相当强的位处理功能,可以对位进行直接操作。例如指令:MOVC,4AH位寻址范围1)内部RAM的位寻址区2)可供位寻址的11个专用寄存器7相对寻址方式相对寻址方式 相对寻址是在相对转移指令中,根据地址相对当前PC的偏移量得到操作数的方式。例如:JZrel偏移量rel是一带符号8位二进数的补码数,范围为-128+127。实际书写程序时
8、先用地址标号代替,在汇编为机器指令时再计算出来如:JCLOOP MOV 2FH,#40H MOV A,R0 MOV DPTR,#2020H MOV 45H,P0 MOV A,R1 MOVC A,A+PC JC LOOP 立即寻址,寄存器间接寻址,16位立即寻址,直接寻址。寄存器寻址。基址加变址寻址,相对寻址。指出下列每一条指令的寻址方式判断下列指令是否正确,若不正确请指出错误:MOVA,DPTR MOVDPTR,#03H MOV#80H,R7 MOVB,C不正确。A是8位寄存器,DPTR为16位寄存器,不匹配。正确。不正确。#80H为立即数,不能作为目的地址。不正确。B为8位字节寄存器,C为1
9、位位累加器,不匹配。MCS-51单片机指令系统对于任何一种计算机,只有理解其指令系统才能清楚该计算机的功能。学习和使用单片机的一个重要环节就是理解和熟练掌握它的指令系统。数据传输类指令l单片机片内数据传输功能内部RAM数据传送指令l指令格式:MOV,l功能:把源操作数所表示的数据传送到目的地址指定的存贮单元之中,而不改变源操作数。即该类指令是“复制”,不是“搬家”。通用指令通用指令1)以累加器以累加器A为目的地址的指令为目的地址的指令MOVA,Rn;A(Rn)MOVA,direct;A(direct)MOVA,Ri;A(Ri)MOVA,#data;Adata这组指令的功能是把源操作数指定的内容
10、传送到累加器指令的功能是把源操作数指定的内容传送到累加器A。源操作数可以采用寄存器寻址方式、直接寻址、寄存器寻址和立即寻址4种方式。传送之后,源操作数所指定的内容不变。例如:(A)=5CH,(R0)=10H,(R5)=47H,(10H)=D5H,(70H)=F2H,执行以下每条指令后,累加器A中的内容分别为:MOVA,R5;(A)47HMOVA,70H;(A)FZHMOVA,RO;(A)D5HMOVA,78H;(A)78H2)以以Rn为目的地址的指令为目的地址的指令MOVRn,A;Rn(A)MOVRn,direct;Rn(direct)MOVRn,#data;Rndata这组指令的功能是把源操
11、作数指定的内容传送到寄存器指令的功能是把源操作数指定的内容传送到寄存器Rn。源操作数可以采用寄存器寻址、直接寻址和立即寻址3种方式。传送之后,源操作数所指定的内容不变。例如:若(A)=78H,(R5)=47H,(70H)=F2H,执行以下每条指令后,R5中的内容分别为:MOVR5,A;(R5)78HMOVR5,70H;(R5)FZHMOVR5,A3H:(R5)A3HMOVdirect,A;direct(A)MOVdirect,Rn;direct(Rn)MOVdirect,direct;direct(direct)MOVdirect,Ri;direct(Ri)MOVdirect,#data;di
12、rectdata这组指令的功能是把源操作数指定的内容传送到由直接地址指令的功能是把源操作数指定的内容传送到由直接地址确定的片内存储单元中确定的片内存储单元中。源操作数可以采用寄存器寻址方式、直接寻址、立即寻址寄存器间接寻址等方式。传送之后,源操作数所指定的内容不变。例:MOV50H,R3;50H(R3),若(R3)=18H,则执行指令后(50H)=18H。MOVTMOD,B;TMOD(B),若(B)=60H,则执行指令后(TMOD)=60H。3)以直接地址为目的地址的指令以直接地址为目的地址的指令MOVRi,A;(Ri)(A)MOVRi,direct;(Ri)(direct)MOVRi,#da
13、ta;(Ri)data4)以寄存器间接地址为目的的地址的指令以寄存器间接地址为目的的地址的指令这组指令的功能是把源操作数指定的内容传送到由指令的功能是把源操作数指定的内容传送到由RO和和R1确定的内容为地址的存储元中确定的内容为地址的存储元中。源操作数可以采用寄存器寻址方式、直接寻址和立即寻址方式。这里的传送是复制过程,传送之后,源操作数所指定的内容不变。例如:若A=70H,R1=30H,(40H)=50H,写出执行的结果。MOVR1,A;(30H)70HMOVR1,40H;(30H)=50HMOVDPTR,#data16;DPTRdata16;DPLdata70;DPHdata1585)16
14、位数据传送指令位数据传送指令这是唯一的一条16位立即数的传送指令,其功能是把16位常数送入DPTR中,高8位DPH,低8位送DPL。例如,MOVDPTR,1234H;(DPH)12H,(DPL)34H。习习题题:设RAM40H单元的内容为80H,80H单元内容为47H,P1口的输入状态为0FFH,试判断下列程序执行结果。MOVR0,#40HMOVA,R0MOVR1,AMOVB,R1MOVR1,P1MOVP2,P1解执行结果为:(A)?,(B)?,(R0)?,(R1)?,(P1)?,(P2)?,(80H)?。;例设RAM40H单元的内容为80H,80H单元内容为47H,P1口的输入状态为0FFH
15、,试判断下列程序执行结果。MOVR0,#40HMOVA,R0MOVR1,AMOVB,R1MOVR1,P1MOVP2,P1解执行结果为:(A)80H,(B)47H,(R0)40H,(R1)80H,(P1)0FFH,(P2)0FFH,(80H)0FFH。;R040H;A(40H)80H;R180H;B(80H)47H;(80H)0FFH;P20FFH6访问外部RAM的指令对片外数据存贮器的访问必须通过累加器对片外数据存贮器的访问必须通过累加器A进行进行 MOVXA,DPTR;A(DPTR)MOVXA,Ri;A(Ri)MOVXDPTR,A;(DPTR)(A)MOVXRi,A;(Ri)(A)以上4条指
16、令中源操作数的寻址方式为寄存器间接寻址。参与间接寻址的寄存器只有Ri和DPTR两种(3个)。DPTR为16位寄数器,寻址范围为000H0FFFFH共64KB空间。而Ri是8位寄数器,只能寻址000FFH低256个单元。例如,若(R0)=12H,(0012H)=56H,则执行指令“MOVX A,R0”以后,就把片外数据存储器0012H单元中的数据56H送入累加器A中。若(DPTR)=3020H,(A)=48H,则执行指令“MOVX DPTR,A”以后,就将48H送入了片外数据存储器地址为3020H的存储单元。解MOVDPTR,#2000HMOVXA,DPTRMOV20H,AMOVDPTR,#20
17、00HMOVXA,DPTRMOVR0,#0FAHMOVXR0,A例3-6将片外数据存贮器2000H单元的内容传送到片内的20H单元中;将片外数据存贮器2000H单元的内容传送到片外0FAH单元。7 程序存贮器向累加器程序存贮器向累加器A A传送指令传送指令 MOVCA,A+PC;A(A)+(PC)MOVCA,A+DPTR;A(A)+(DPTR)说明:程序存贮器只能读出,不能写入,ROM片内、片外是统一编址,该指令既可访问片内,又可访问片外程序存贮器。该类指令主要用于查表,又称查表指令。应用时,一般以PC或DPTR确定表格的首址,查表时,根据A中不同的内容查找到表格中的相应项,故此时称PC或DP
18、TR为基址寄存器,A为变址寄存器,寻址方式为基址加变址寻址。使用DPTR作基址寄存器比较灵活,且不易出错。建议尽可能使用MOVCA,DPTR指令。1)字节交换指令字节交换指令XCHXCHA,Rn;(A)(Rn)XCHA,direct;(A)(direct)XCHA,Ri;(A)(Ri)8 数据交换指令数据交换指令例:设(A)=08H,(R7)=0DCH,执行指令XCHA,R7结果为:(A)=0DCH,(R7)=08H功能:将累加器A中内容与源操作数互换。例:(A)=80H,(R0)=30H,(30H)=0FH,执行指令XCHDA,R结果为:(A)=8FH,(30H)=00H2)半字节交换半字节
19、交换XCHDXCHDA,Ri;(A)低4位(Ri)低4位功能:累加器A中内容与源操作数低4位交换,高4位不变。数据写入堆栈称入栈入栈,数据从堆栈中读出称出栈出栈。栈操作的原则是后进先出后进先出堆栈操作9堆栈操作指令 PUSHdirect;SP(SP)+1,(SP)(direct)功能:将堆栈指针加1后,片内RAM单元内容送进栈顶单元,原RAM单元内容不变。说明:PUSH指令常用于保护CPU现场。栈操作是字节指令,每次只能压入或弹出1个字节的内容。如PUSHDPTR是错误的,但可以用以下两条指令完成DPTR的入栈。PUSHDPHPUSHDPL1)入栈指令入栈指令PUSH9堆栈操作指令POPdir
20、ect;direct(SP),SP(SP)-1功能:将(SP)内容传送给片内RAM单元,SP内容减1。说明:栈操作要注意后进西先出的原则。POP指令常用于恢复CPU现场2)出栈指令出栈指令POP例试用栈操作指令完成P0和P1内容的互换。解PUSHP0PUSHP1POPP0POPP1算术运算类指令l在NCS-51指令系统中,算术指令都是针对8位无符号数的。l算术运算包括加、减、乘、除四则混合运算和属于加减类型的增1、减1以及十进制调整指令。l算术运算操作会影响程序状态字寄存器PSW中的进位和借位标志C、辅助进位(借位)标志AC、溢出标志位OV和奇偶标志位P等。1不带进位加法指令ADDA,Rn;A
21、(A)+(Rn)ADDA,direct;A(A)+(direct)ADDA,#data;A(A)+dataADDA,Ri;A(A)+(Ri)不带进位加法指令不带进位加法指令ADD 这组指令把源操作数指定的内容加到累加器A,并将相加的结果保存在A中。这组指令影响PSW中标志位如下:进位标志C:和的最高位(位7)有进位,C=1;否则C=0。辅助进位AC:和的位3有进位,AC=1;否则AC=0。溢出标志位OV:和的位7位6只有一个有进位时,OV=1;奇偶标志位:当A中1的个数为奇数时,P=1;为偶数时,P=0。2.带进位加法指令带进位加法指令ADCCADDCA,Rn;A(A)+(Rn)+(C)ADD
22、CA,direct;A(A)+(direct)+(C)ADDCA,#data;A(A)+data+(C)ADDCA,Ri;A(A)+(Ri)+(C)功能:该操作与ADD类似,只是PSW中的进位位C参与运算。带进位加法指令通常用于多字节或多个数加法运算。解 MOV A,30H ADD A,40H ;低字节相加 MOV 50H,A MOV A,31H ADDC A,41H ;高字节相加 MOV 51H,A ADDC A,#00H ;取高相加产生的进位 MOV 52H,A说明:多字节数求和,从低字节开始,最低字节相加用ADD指令,高字节相加用ADDC指令。N字节数相加,结果可能为N+1字节数。为单独
23、取得进位的值,例 两字节无符号数相加,被加数放在内部RAM30H,31H单元(低位放在前),加数放在内部RAM40H、41H单元。计算两数的和,放在50H52H单元中。3.增量指令增量指令INCINC A ;A (A)+1INC Rn ;Rn (Rn)+1INC direct ;direct (direct)+1INC Ri ;(R)i(Ri)+1INC DPTR ;DPTR (DPTR)+1功能:对A,Rn,内部RAM单元及数据指针DPTR进行加1操作,除INCA影响P标志外,不影响其他标志位。说明:若原为0FFH,执行该指令后,将变为00H,但不影响进位位C。4.十进制调整指令十进制调整指
24、令DA A 功能:由加法指令完成的BCD码相加时所获得的结果进行调整。说明:在指令系统中,没有专门的十进制(BCD码)的加法运算指令,只能使用ADD,ADDC命令,但有时会产生错误。例如:(a)5+38(b)7+6=1301010111+)0011+)011010001101其中(a)的运算结果是正确的,(b)的运算结果是错误的。为了消除错误,要对运算结果进行DAA调整,调整为正确的压缩BCD码形式(相加结果低相加结果低4位大于位大于9产生进位产生进位AC,则加则加6;高高4位大于位大于9产生进位产生进位CY则加则加60)。例 在20H、21H中分别存放压缩BCD码55和72,试将两数相加,并
25、计算出结果。解MOV A,20H 01010101 55 ADD A,21H +01110010 72 DA A,11000111 C7 高位大于9结果(A)=27,C=1 +01100000 60 加60 100100111 127 如果不使用DAA指令,则结果为0C7H,是错误的。5 带进位减法指令带进位减法指令SUBBSUBBA,Rn;A(A)(Rn)(C)SUBBA,direct;A(A)(direct)(C)SUBBA,Ri;A(A)(Ri)(C)SUBBA,#data;A(A)data(C)功能:指令功能是以A中数为被减数,减去操作数,再减去进位,差存在A中。影响PSW中的C,AC
26、,OV,和P位。说明:MCS-51指令系统中,无不带进位(实为借位)的减法指令。若进行不带借的减法运算,要在运算前使用ADDA,#00H或CLRC等指令将进位标志清0。减法指令中,无BCD码调整。例 两个双字节数相减,被减数放在30H,31H,减数放在40H,41H中,差放入50H、51H。解 ADD A,#00H ;将进位位清0 MOV A,30H SUBB A,40H ;低字节相减 MOV 50H,A MOV A,31H SUBB A,41H ;高字节相减 MOV 51H,A说明:多字节相减,从低字节开始,最低字节相减时,应先将进位位清0。6 减减1指令指令DEC DECA;A(A)-1D
27、ECRn;Rn(Rn)-1DECdirect;direct(direct)-1DECRi;(Ri)(Ri)-1功能:减1运算说明:与加1指令INC命令类似,但无DPTR减1指令。若原为00H,执行该指令后,将变为0FFH。例 如(A)=10H,(R5)=00H,(30H)=2FH,(R0)=40H,(40H)=0FFH。则执行以下指令:DECA,DECR5,DEC30H,DECR0结果为:(A)0FH,(R5)=0FFH,(30H)=2EH,(40H)=0FEH,(P)=07 7 乘法指令乘法指令MULMUL MUL AB功能:累加器A和寄存器B中的两个无符号8位数相乘,所得16位乘积的低8位
28、放在A中,高8位入在B中。说明:乘法指令影响PSW的状态。执行MUL指令后,C被清0,OV与结果有关,若OV=0,表示乘积小于255(0FFH),只在A中,(B)0;若OV=1,则乘积大于255,(B)0。例如:(A)=20H,(B)=0A0H,执行指令MULAB结果:(A)00H,(B)=14H,即积为1400H,(C)=0,(OV)=18 8 除法指令除法指令DIV DIV DIVAB功能:两8位无符号数相除,被除数置于累加器A中,除数置于寄存器B中。指令执行后,商存于A中,余数存于B中。说明:该指令执行后,C清0,若除数为0(即寄存器B内数据为0),(OV)=1,表明除0没有意义;若除数
29、不为0,则(OV)=0。例:(A)=0FBH,(B)=12H,则DIVAB结果:(A)=0DH,(B)=11H,(C)=0,(OV)=09 逻辑运算及移位指令逻辑运算及移位指令 1.逻辑与指令逻辑与指令ANL ANLA,Rn;A(A)(Rn)ANLA,direct;A(A)(direct)ANLA,Ri;A(A)(Ri)ANLA,#data;A(A)dataANLdirect,A;direct(A)(direct)ANLdirect,#data;direct(direct)data1 逻辑运算指令逻辑运算指令说明:逻辑运算是按位进行的,对进位标志位C不产生影响。该指令用于屏蔽某些位。例 将R1
30、中的低4位清0,高4位不变。解 MOVA,#11110000BANLA,R1MOVR1,A01111010)1110011001100010结果为:(A)=62H例:设(A)=7AH,(20H)=0E6H,执行指令ANLA,20H2.逻辑或指令逻辑或指令ORL ORLA,Rn;A(A)(Rn)ORLA,direct;A(A)(direct)ORLA,Ri;A(A)(Ri)ORLA,#data;A(A)dataORLdirect,A;direct(A)(direct)ORLdirect,#data;direct(direct)data例将片外RAM2000H单元的0、1位置1,2、3位清0,其它
31、位不变。解MOVDPTR,#2000HMOVXA,DPTRORLA,#00000011BANLA,#11110011BMOVDPTR,A3.逻辑异或指令逻辑异或指令XRL XRLA,Rn;A(A)(Rn)XRLA,direct;A(A)(direct)XRLA,Ri;A(A)(Ri)XRLA,#data;A(A)dataXRLdirect,A,;direct(direct)(A)XRLdirect,#data;direct(direct)data说明:若与0进行异或运算,结果保持不变;若与1进行异或运算,结果取反;自身异或等效于清0。例如XRLA,A结果为:(A)0 1111011001010
32、10110100011例 将20H单元内容1、3、5、7位保持不变,0、2、4、6位取反。解XRL20H,#01010101B 若(20H)=11110110 则执行指令:结果为(20H)=10100011B4.累加器清累加器清0指令指令 CLR CLRACPLA 5.累加器取反指令累加器取反指令 CPL例如(A)0E6H执行CPLA,结果为:(A)=19H说明:1)取反即为逻辑非运算。6 移位指令移位指令 循环左移循环左移 RLA;An+1An,A0A7循环右移循环右移 RRA;AnAn+1,A7A0进位循环左移进位循环左移 RLCA;An+1An,A0C,CA7带进位循环右移带进位循环右移
33、 RRCA;AnAn+1,A7C,CA0移移位位指指令令例3分析下列程序段实现的功能:MOVA,directRLAMOVR1,ARLARLAADDA,R1MOVdirect,A解各指令实现的功能依次如程序右边注译,可知该程序实现的功能是将存贮单元的数乘以10。;取数设为D0;D02;(R1)2D0;2D02;4D02;8D0+2D0;存数10D0例将20H单元存放的无符号数除2。解ADDA,#0;C清零MOVA,20HRRCAMOV20H,A控制转移类指令控制转移类指令 程序的顺序执行是由PC自动加1实现的,要改变程序的执行顺序,实现分支转向,必须通过强迫改变PC值的方法来实现,这就是控制转移
34、类指令的基本功能。控制转移类指令可以控制程序根据不同情况执行不同的程序段,令单片机应用系统做出相应的动作。控制转移类指令使单片机具有“智能化”功能。5151单单片片机机有有1717条条控控制制转转移移指指令令,包包括括无无条条件件转转移移指指令、条件转移指令及子程序调用返回指令。令、条件转移指令及子程序调用返回指令。1 无条件转移指无条件转移指 今今1.长转移指令长转移指令LJMP LJMPaddr16;PCaddr16功能:指令执行后将16位地址(addr16)传送给PC,从而实现程序转移到新的地址开始运行。说明:该指令可实现64KB范围的任意转移。AJMPaddr11;PC(PC)+2,P
35、C100addr11功能:addr11的11位数取代该指令执行后程序指针PC的低11位PC100,程序根据PC值转移运行。说明:addr11为11位无符号数,程序转移最大范围为2KB。LJMP,STMP,AJMP功能相同,只是转移范围不同。3.短转移指令短转移指令AJMP SJMPrel;PC(PC)+2+rel功能:执行指令后,程序从当前位置向前或向后跳转rel个单元运行。说明:该指令中寻址方式称相对寻址。编编程程时时rel 用用目目的的地地址址标标号号代替。代替。rel为8位带符号补码数,因此所能实现的程序转移是双向的,若rel为正数,则向前转移,若rel为负数向后转移。转转移移相相对对范
36、范围图是围图是-128127H共共256个单元;个单元;注 译 中 的“PC (PC)+2+rel”是 这 样 得 来 的:注 译 中“(PC)”是该指令执行前的值,前面的“PC”是指指令执行后的值。因“SJMPrel”指令存放在ROM中占用2个字节单元(为双字节指令),故程序从指令执行后“当前位置”向前或向后跳转rel个单元,也就是从指令执行前的位置向前或向后跳转2rel个单元。2.短转移指令短转移指令SJMPJMPA+DPTR;PC(A)+(DPTR)功能:由A及DPTR的内容决定程序转移的目的地址。说明:DPTR为基址寄存器,A为变址寄存器,为基址加变址寻址方式。把DPTR值固定,赋与A
37、不同的值,则可实现程序的多分支转移(散转)。4.变址转移指令变址转移指令JMP 条件转移指令条件转移指令 1.测试转移指令测试转移指令 1)累加器累加器A判判0转移指令转移指令JZrel;若(A)=0,转移,PC(PC)+2rel;若(A)0,顺序执行。JNZrel;若(A)0,转移,PC(PC)+2rel 2)进位位测试转移指令进位位测试转移指令JCrel;若(C)=1,转移,PC(PC)+2relJNCrel;若(C)=0,转移,PC(PC)+2rel 所谓条件转移就是程序的转移是有条件的,当指令中规定的条则满足时,程序转移,否则程序不转移,仍顺序执行。3)位单元测试转移指令位单元测试转移
38、指令JBbit,rel;若(bit)=1,转移,PC(PC)+3relJNBbit,rel;若(bit)=0,转移,PC(PC)+3relJBCbit,rel;若(bit)=1,转移,PC(PC)+3rel;同时将bit位清零。功能:根据测试条件决定程序是否转移执行。说明:若条件满足程序转移执行;若条件不满足,顺序执行。位单元测试转移指令为三字节指令,故执行该类指令,若条件满足转移时,PC(PC)+3+rel。其它测试转移指令为双字节指令,条件满足转移时,PC(PC)+2+rel。解MOVR0,#DATA2;赋首址MOVDPTR,#DATA1LOOP1:MOVXA,DPTR;取数JZLOOP2
39、;判断是否为0MOVR0,A;不为0存数INCR0;准备取下一个数INCDPTRSJMPLOOP1;重复取数过程LOOP2:RET;为0结束例3将外部RAM的一个数据块(首址为DATA1)传送到内部RAM中(首址DATA2),遇到传送的数据为零时停止。格式为:格式为:CJNE,relCJNEA,direct,rel;累加器A与direct单元不等转移。CJNEA,#data,rel;累加器A与立即数data不等转移CJNERn,#data,rel;寄存器Rn与立即数data不等转移CJNERi,#data,rel;间接寻址的片内RAM单元与立即数data不等转移2.比较不相等转移指令比较不相等
40、转移指令CJNE 说明:数据比较转移指令多位三字节指令。利用该类指令不但可以实现程序的转移功能,也可以用以比较两数值的大小。指令执行后进位位C的状态相当反映了被比较数与比较数相减有无借位。解MOVR0,#DATALOOP1:CJNER0,#64H,LOOP2SJMPLOOP3LOOP2:INCR0SJMPLOOP1LOOP3:MOVA,R0例找出片内RAM的DATA为首址的数据块中第一个等于100的数,并将其地址存入A中。DJNZRn,relDJNZdirect,rel 功能:寄存器Rn或direct单元内容减1,如果结果为零,则程序顺序执行;如果还没有减到0,则程序转移。说明:这两条指令主要
41、用于控制程序循环,又称循环指令。预先赋值Rn或RAM单元,以控制循环次数。3.减减1不为不为0转移指令转移指令DJNZ 解分析:这是一个重复操作过程,可以使用循环指令。30H7FH共50H个单元,循环次数为50H。程序如下:MOVR7,#50HMOVR0,#30HNEXT:MOVR0,#0INCR0DJNZR7,NEXT例将内部RAM的30H7FH单元清0。解MOVDPTR,#2000H;数据传送的源地址PUSHDPL;保存源地址PUSHDPHMOVDPTR,#3000H;数据传送的目的地址MOVR2,DPL;保存目的地址MOVR3,DPHLOOP:POPDPH;取源地址POPDPLMOVXA
42、,DPTR;从源地址单元取数INLDPTR;下一个单元源地址PUSHDPL;保存源地址PUSHDPHMOVDPL,R2;取目的地址MOVDPH,R3MOVXDPTR,A;将数据存入目的地址INCDPTR;下一个目的地址MOVR2,DPL;保存目的地址MOVR3,DPHDJNZ30H,LOOP;判断数据传送是否结束例把从2000H开始的片外RAM单元中的数据传送到从3000H开始单元中,数据个数存放在片内RAM30H单元中。子程序调用返回指令子程序调用返回指令1.1.长调用指令长调用指令LCALLLCALL LCALL addr162.2.绝对调用指令绝对调用指令ACALLACALL ACALL
43、 addr113.3.返回指令返回指令 RET RETI ;中断服务子程序返回指令 空操作指令空操作指令NOPNOP ;PC (PC)+1 位操作指令位操作指令 MOVC,bit;C(bit)MOVbit,C;bit(C)例将20H位的内容送至50H位,并要求不改变C的状态。解MOV10H,C;保护C内容MOVC,20HMOV50H,CMOVC,10H;恢复C内容1位传送指令MOV说明:多数位操作指令由C参与,C称位累加器。位操作指令寻址方式为位寻址。位置位位置位/复位复位指指令令1.位置位(置位置位(置1)命令)命令SETBSETBC;C1SETBbit;bit12.位复位(清位复位(清0)
44、命令)命令CLRC;C0CLRbit;bit0说明:位置位/复位命令可以方便改变位空间的单个位的内容,十分灵活。例如许多运算要先将C清零,我们用以用ADDA,#0来清零,也可以直接用CLRC指令。位运算指令位运算指令1.逻辑与指令逻辑与指令ANLANLC,bit;C(C)(bit)ANLC,/bit;C(C)(/bit)2.逻辑或指令逻辑或指令ORLORLC,bit;C(C)(bit)ORLC,/bit;C(C)(/bit)3.逻辑非(求反)指令逻辑非(求反)指令CPLCPLbit;bit(/bit)程序如下:MOVC,P0.1ANLC,/P0.0ORLC,/P0.2MOVP1.7,C例编程实
45、现逻辑功能。P1.7P0.0P0.1+P0.2MCS-51单片机指令系统小结单片机指令系统小结 MCS-51单片机指令系统组成MCS-51汇编语言有42种操作码助记符来描述33种操作功能。功能助记符与不同寻址方式组合,得到111条指令,分为5大类:1)数据传送类指令29条2)运算类指令24条3)逻辑运算及移位类指令24条4)位操作类指令17条5)控制转移类指令17条另外,MCS-51指令根据书写格式,可分为单操作数、双操作数、三操作数和无操作数;按照长度不同,分为单字节、双字节和三字节指令;根据执行时间的长短,分为单周期、双周期和四周期指令。指令执行时指令执行时间间 单片机的工作是在时钟脉冲的
46、触发下进行的,时钟脉冲由晶体振荡脉冲二分频形成。一个时钟周期等于两个振荡周期。MCS-51单片机在工作时,CPU在每六个连续时钟周期内的每一时刻重复进行着固定的动作,CPU就是通过这些机械的动作读取、分析、执行指令的,每6个时钟周期称为机器周期。一个机器周期等于6个时钟周期,12个振荡周期。每一条指令的运行需要一定的时间,称指令周期。不同指令的执行需要时间不同,MCS-51指令中包括单机器周期指令、双机器周期指令和四机器周期指令。它们的指令周期分别是一个、两个和四个机器周期。解查表可知MOVCA,A+DPTR指令为双机器周期指令,共需要26224个振荡周期,即所需时间为:241/(12MHz)
47、2s。例3某MCS-51单片机系统的振荡器频率fOSC为12MHz,试问执行MOVCA,A+DPTR指令需要多少时间?指令运行对程序状态字的影响指令运行对程序状态字的影响 指令标志指令标志CACOVPCACOVPADDCLRC0ADDCCPLSUBBANLC,bitMUL0ANlC,/bitDIV0ORLC,bitDAORLC,/bitRRCMOVC,bitRLCCJNESETBC1寻址方式应用范围寻址方式应用范围寻址方式操作数寻址区域立即寻址#data,#data16ROM直接寻址direct片内RAM寄存器寻址Rn,A,DPTR寄存器寄存器间接寻址Ri,SPRi,DPTR片内RAM片外RA
48、M位寻址C,bit位空间基址加变址寻址A+PC,A+DPTRROM相对寻址PC+relROM内部内部RAM寻址寻址方式方式寻址方式低128单元 高128单元(SFR)通用寄存器区位寻址区用户RAM区00H1FH20H2FH30H7FH80H0FFH寄存器寻址位寻址(部分单元)直接寻址 间接寻址寄存器间接寻址方式低地址单元(256个)00H0FFH高地址单元(65 280个)0100H0FFFFH以Ri作间址寄存器以DPTR作间址寄存器 外部外部RAM寻址方式寻址方式2.指令应用范围小结指令应用范围小结1)外部RAM单元只能通过4条MOVX指令与累加器A进行数据 传输:MOVX A,Ri MOV
49、X A,DPTR MOVX Ri,A MOVX DPTR,A 2)对于程序寄存器ROM的操作有两种,一种是通过查表指令,将ROM单元的内容传送到累加器A中,指令有2条:MOVC A,A+DPTR MOVC A,A+PC 另一种操作是通过转移类指令改变PC的值,从而改变程序运行的方向。3)其它类操作指令只能针对内部RAM,RAM是应用最频繁的存贮单元。同时内部RAM中不同的部分所适应的寻址方式也有所不同,位寻址只能在位地址空间进行,算术运算只能在累加器A中进行,逻辑运算也只能在特定的单元内进行。0000H07FFH0800H0FFFH1000H17FFH1800H1FFFH2000H27FFH2800H2FFFH3000H37FFH3800H3FFFH4000H47FFH4800H4FFFH5000H57FFH5800H5FFFH6000H67FFH6800H6FFFH7000H77FFH7800H7FFFH8000H87FFH8800H8FFFH9000H97FFH9800H9FFFHA000HA7FFHA800HAFFFHB000HB7FFHB800HBFFFHC000HC7FFHC800HCFFFHD000HD7FFHD800HDFFFHE000HE7FFHE800HEFFFHF000HF7FFHF800HFFFFH程序存储器空间32个2K地址范围
限制150内