首页 单片机原理及接口技术指令系统讲义

单片机原理及接口技术指令系统讲义

举报
开通vip

单片机原理及接口技术指令系统讲义单片机原理及接口技术指令系统3.1单片机指令系统概述    指令是指挥计算机工作的命令,一种计算机所能执行的指令集合称之为该种计算机的指令系统。指令机器指令0010010000001010B(二进制数表示)240A(十六进制数表示)汇编指令ADDA,#0AH3.1.1汇编语言3.1.2指令格式  指令的表示形式称指令格式。编写程序时必须严格按指令格式书写。  MCS-51指令由操作码和操作数组成。汇编语言指令格式如下:操作码助记符〔操作数1〕〔,操作数2〕〔,操作数3〕1.操作码助记符2.操作数3.2寻址方式   ...

单片机原理及接口技术指令系统讲义
单片机原理及接口技术指令系统3.1单片机指令系统概述    指令是指挥计算机工作的命令,一种计算机所能执行的指令集合称之为该种计算机的指令系统。指令机器指令0010010000001010B(二进制数 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示)240A(十六进制数表示)汇编指令ADDA,#0AH3.1.1汇编语言3.1.2指令格式  指令的表示形式称指令格式。编写程序时必须严格按指令格式书写。  MCS-51指令由操作码和操作数组成。汇编语言指令格式如下:操作码助记符〔操作数1〕〔,操作数2〕〔,操作数3〕1.操作码助记符2.操作数3.2寻址方式    指令中,操作数可能是具体的数据,也可能是具体的存放数据的地址或符号,无论何种情况,都可由操作数取得参与指令运行的二进制数据。这个过程叫作寻址。寻指方式立即寻址方式直接寻址方式寄存器寻址方式寄存器间接寻址方式基址加变寻址方式位寻址方式相对寻址方式3.2.1立即寻址方式  所谓立即寻址就是操作数在指令中直接给出。立即寻址方式的操作数称立即数,立即数只能是源操作数,不能作为目的操作数。立即数有8位立即数和16位立即数。使用时在立即数前加“#”标志。例:MOV A,#20H  MOV DPTR,#20D8H3.2.2 直接寻址方式  直接寻址就是操作数直接以单元地址的形式给出。直接地址以存贮单元形式出现。 例如指令:MOVA,20H3.2.3 寄存器寻址方式  寄存器寻址就是操作数在寄存器中。  例如指令:MOVA,R23.2.4 寄存器间接寻址方式 寄存器间接寻址使用的寄存器为Ri和DPTR,使用时寄存器前面加“@“标志。MOVA,@Ri;MOVXA,@DPTR例如:(R1)=80H、(80H)=33H,则执行指令MOVA,@Ri后,累加器A的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 为33H而不是80H。 寄存器间接寻址是以寄存器中的内容为地址取得操作数的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 。和寄存器寻址相比,寄存器寻址时,寄存器中存放的是操作数,而寄存器间接寻址中时,寄存器中存放的是操作数的地址。3.2.5 基址加变址寻址方式 基址加变址寻址就是以DPTR或PC为基址寄存器,以A为变址寄存器,以两者内容相加形成16位地址作为操作数地址。例如指令:MOVCA,@A+DPTR3.2.6 位寻址方式  位寻址方式就是以位为操作数。MCS-51单片机有相当强的位处理功能,可以对位进行直接操作。例如指令:    MOVC,4AH位寻址范围:1)内部RAM的位寻址区2)可供位寻址的11个专用寄存器3.2.7 相对寻址方式  相对寻址是在相对转移指令中,根据地址相对当前PC的偏移量得到操作数的方式。如:     JZrel  偏移量rel是一带符号8位二进数的补码数,范围为-128~+127。实际书写程序时往往先用地址标号代替,在汇编为机器指令时再计算出来。 〔例3-1〕指出下列每一条指令的寻址方式。①MOV2FH,#40H②MOVA,@R0③MOVDPTR,#2020H④MOV45H,P0⑤MOVA,R1⑥MOVCA,@A+PC⑦JCLOOP①中的源操作数为立即寻址,目的操作数为直接寻址。②中的源操作数为寄存器间接寻址,目的操作数为寄存器寻址。③中的源操作数为16位立即寻址,目的操作数为寄存器寻址。④中的源操作数和目的操作数都是直接寻址。⑤中的源操作数和目的操作数都为寄存器寻址。⑥中的源操作数为基址加变址寻址,目的操作数为寄存器寻址。⑦中的操作数为相对寻址。〔例3-2〕判断下列指令是否正确,若不正确请指出错误:①MOVA,DPTR②MOVDPTR,#03H③MOV#80H,R7④MOVB,C〔解〕①不正确。A是8位寄存器,DPTR为16位寄存器,不匹配。②正确。③不正确。#80H为立即数,不能作为目的地址。④不正确。B为8位字节寄存器,C为1位位累加器,不匹配。3.3数据传送指令 1.通用传送指令MOV 指令格式:MOV<目的操作数>,<源操作数>  功能:把源操作数所表示的数据传送到目的地址指定的存贮单元之中,而不改变源操作数。即该指令是“复制”,不是“搬家”。3.3.1内部RAM数据传送指令2)以Rn为目的地址的指令MOVRn,A;Rn←(A)MOVRn,direct;Rn←(direct)MOVRn,#data;Rn←data1)以累加器A为目的地址的指令MOVA,Rn ;A←(Rn)MOVA,direct ;A←(direct)MOVA,@Ri ;A←((Ri))MOVA,#data ;A←data4)以寄存器间接地址为目的的地址的指令MOV@Ri,A;(Ri)←(A)MOV@Ri,direct ;(Ri)←(direct)MOV@Ri,#data ;(Ri)←data3)以直接地址为目的地址的指令MOVdirect,A  ;direct←(A)MOVdirect,Rn;direct←(Rn)MOVdirect,direct  ;direct←(direct)MOVdirect,@Ri ;direct←((Ri))MOVdirect,#data ;direct←data5)16位数据传送指令MOVDPTR,#data16;DPTR←data16;DPL←data7~0;DPH←data15~8〔例3-3〕设RAM40H单元的内容为80H,80H单元内容为47H,P1口的输入状态为0FFH,试判断下列程序执行结果。MOVR0,#40HMOVA,@R0MOVR1,AMOVB,@R1MOV@R1,P1MOVP2,P1〔解〕执行结果为:(A)=80H,(B)=47H,(R0)=40H,(R1)=80H,(P1)=0FFH,(P2)=0FFH,(80H)=0FFH。;R0←40H;A←(40H)=80H;R1←80H;B←(80H)=47H;(80H)←0FFH;P2←0FFH1)字节交换指令XCHXCHA,Rn;(A)←→(Rn)XCHA,direct;(A)←→(direct)XCHA,@Ri;(A)←→((Ri))2.数据交换指令例:设(A)=08H,(R7)=0DCH,执行指令 XCHA,R7结果为:(A)=0DCH,(R7)=08H功能:将累加器A中内容与源操作数互换。例:(A)=80H,(R0)=30H,(30H)=0FH,执行指令  XCHDA,@R结果为:(A)=8FH,(30H)=00H2)半字节交换XCHDXCHDA,@Ri ;(A)低4位←→((Ri))低4位功能:累加器A中内容与源操作数低4位交换,高4位不变。3)累加器高低数字节交换指令SWAPA  SWAPA   ;(A)低4位←→(A)高4位功能:A中高4位与低4位互换。例:(A)=80H,执行SWAPA结果为:(A)=08H.〔解〕XCHA,20HSWAPAMOVR1,21HXCHDA,@R1SWAPAXCHA,20H〔例3-4〕试用交换指令使片内20H单元的高4位与21H单元的低4位交换。 数据写入堆栈称入栈,数据从堆栈中读出称出栈。3.栈操作指令PUSHdirect;SP←(SP)+1,(SP)←(direct)功能:将堆栈指针加1后,片内RAM单元内容送进栈顶单元,原RAM单元内容不变。说明:①PUSH指令常用于保护CPU现场。②栈操作是字节指令,每次只能压入或弹出1个字节的内容。如PUSHDPTR是错误的,但可以用以下两条指令完成DPTR的入栈。PUSHDPHPUSHDPL1)入栈指令PUSH例:设(A)=30H,(B)=80H,(SP)=50H.则执行指令:  PUSHAPUSHB结果为:(51H)=30H,(52H)=80H,(SP)=52HPOP direct;direct←((SP)),SP←(SP)-1功能:将(SP)内容传送给片内RAM单元,SP内容减1。说明:①栈操作要注意先入后出的原则。②POP指令常用于恢复CPU现场。2)出栈指令POP〔例3-5〕试用栈操作指令完成P0和P1内容的互换。〔解〕PUSHP0 PUSHP1POPP0POPP13.3.2片外数据存贮器与累加器A之间的传送指令 MOVXA,@DPTR;A←((DPTR))MOVXA,@Ri;A←((Ri))MOVX@DPTR,A;(DPTR)←(A)MOVX@Ri,A;(Ri)←(A)说明:①片外数据存贮单元与片内RAM之间的数据传送以及片外数据存贮单元之间的数据传送不能直接进行,必须通过累加器A中转。MOVX20H,2000H及MOVX3000H,2000H等都是错误的。②寻址方式只能是寄存器间接寻址。参与间接寻址的寄存器只有Ri和DPTR两种(3个)。DPTR为16位寄数器,寻址范围为000H~0FFFFH共64KB空间。而Ri是8位寄数器,只能寻址00~0FFH低256单元。〔解〕①MOVDPTR,#2000HMOVXA,@DPTRMOV20H,A②MOVDPTR,#2000HMOVXA,@DPTRMOVR0,#0FAHMOVX@R0,A〔例3-6〕①将片外数据存贮器2000H单元的内容传送到片内的20H单元中;②将片外数据存贮器2000H单元的内容传送到片外0FAH单元。3.3.3程序存贮器向累加器A传送指令 MOVCA,@A+PC;A←((A)+(PC))MOVCA,@A+DPTR ;A←((A)+(DPTR))说明:①程序存贮器只能读出,不能写入,所以其数据传送都是单向的,即从程序存贮器读出数据,且只能向累加器A传送。②ROM片内、片外是统一编址,该指令既可访问片内,又可访问片外程序存贮器。③该类指令主要用于查表,又称查表指令。应用时,一般以PC或DPTR确定表格的首址,查表时,根据A中不同的内容查找到表格中的相应项,故此时称PC或DPTR为基址寄存器,A为变址寄存器,寻址方式为基址加变址寻址。      ④使用DPTR作基址寄存器比较灵活,且不易出错。建议尽可能使用MOVC A,@A+DPTR指令。〔解法一〕以DPTR为基址寄存器,平方表首址可灵活安排在适当的位置如2000H,即平方表的内容从2000H单元放起。程序如下:ORG1800HMOVDPTR,#2000HMOVA,20HMOVCA,@A+DPTRMOV21H,A ORG2000HDB00H,01H,04H,10H,19H,24H DB31H,40H,51H,64H,……〔例3-7〕以查表方式求出片内RAM中20H单元数的平方值,存入片内21H单元中。ORG1000H1000 MOV A,20H  1001ADDA,#03H   1003MOVCA,@A+PC  1004MOV 21H,A  1006RET  1007DB00H,01H,04H…… 〔解法二〕以PC为基址寄存器,此时表格须紧跟程序之后,且要计算好表格首址位置。⑤XCHA,20HXCHA,30HXCHA,20H〔例3-8〕改正下列指令中的错误,完成其功能:①MOVA,2000H;片外RAM2000H单元内容送入A。②MOVX20H,2000H;片外RAM2000H单元内容送入片内20H单元。③MOVCA,2000H;将ROM2000H单元内容送入A。④MOVXA,@A+DPTR;以查表方式将片外RAM单元的内容送入A。⑤XCH40H,30H;交换片内RAM30H和40H单元的内容.⑥PUSHAB;将寄存器对AB的内容压入堆栈。〔解〕①MOVDPTR,#2000HMOVXA,@DPTR②MOVDPTR,#2000HMOVXA,@DPTRMOV20H,A③MOVDPTR,#2000HMOVA,#0MOVCA,@A+DPTR④无法以查表方式将片外RAM存贮单元的内容送入A。⑥PUSHAPUSHB 3.4 算术运算类指令1.不带进位加法指令ADDADDA,Rn;A←(A)+(Rn)ADDA,direct;A←(A)+(direct)ADDA,#data;A←(A)+dataADDA,@Ri;A←(A)+((Ri))3.4.1加法指令功能:ADD指令把源操作数与累加器A内容相加,结果存在累加器中。该操作不改变源操作数,影响PSW中的C、AC、OV和P位。说明:①ADD指令的目的操作数只能是累加器A,且只有以上4种形式。如ADD B,40H或ADDA,203AH都是不存在,非法的。②指令中,参加运算的两个8位二进制数,即可看作是8位无符号数(0~255),也可以看作是7位带符号数的补码数(-128~+127)。10110011+011110011←00101100〔例3-9〕试编程计算40H和41H两单元字节数的和,并存放在42H单元。若(40H)=0B3H,(41H)=79H,给出计算结果并判断PSW受影响的位。〔解〕程序如下:MOVA,40HADDA,41HMOV42H,A若(40H)=0B3H,(41H)=79H则运算结果:若是无符号数,和为12CH;若是有符号数,和为+2CH。(42H)=2CH,(C)=1,(AC)=0,(OV)=0,(P)=1。2.带进位加法指令ADCCADDCA,Rn;A←(A)+(Rn)+(C)ADDCA,direct;A←(A)+(direct)+(C)ADDCA,#data;A←(A)+data+(C)ADDCA,@Ri;A←(A)+((Ri))+(C)功能:该操作与ADD类似,只是PSW中的进位位C参与运算。带进位加法指令通常用于多字节或多个数加法运算。〔解〕当(C)=0时,两指令运行结果一样,为(A)=0A4H。当(C)=1时,两指令运行的结果不同,相差1。即ADDA,30H的结果为(A)=0A4H,而ADDCA,30H的结果是(A)=0A5H。显然,ADD指令与C值无关,而ADDC的运行结果与C值有关。〔例3-10〕已知(A)=26H,(30H)=7EH,比较在(C)=0、(C)=1两种情况下执行ADDA,30H和ADDCA,30H指令的结果。〔解〕MOVA,30HADDA,40H;低字节相加MOV50H,AMOVA,31HADDCA,41H;高字节相加MOV51H,AADDCA,#00H;取高相加产生的进位MOV52H,A说明:①多字节数求和,从低字节开始,最低字节相加用ADD指令,高字节相加用ADDC指令。②N字节数相加,结果可能为N+1字节数。③为单独取得进位的值,可参考例3-11。〔例3-11〕两字节无符号数相加,被加数放在内部RAM30H,31H单元(低位放在前),加数放在内部RAM40H、41H单元。计算两数的和,放在50H~52H单元中。3.增量指令INCINCA;A←(A)+1INCRn;Rn←(Rn)+1INCdirect;direct←(direct)+1INC@Ri;(R)i←((Ri))+1INCDPTR;DPTR←(DPTR)+1功能:对A,Rn,内部RAM单元及数据指针DPTR进行加1操作,除INCA影响P外,不影响任何标志位。说明:若原为0FFH,执行该指令后,将变为00H,但不影响进位位C。其结果为:(A)=00H,(R2)=10H,(R0)=40H,(40H)=01H,(DPTR)=1B00H,PSW中,(P)=0,C及其它位不变。〔例3-12〕(A)=0FFH,(R2)=0FH,(R0)=40H,(40H)=00H,(DPTR)=1AFFH执行下列指令:   INCAINCR2INC@R0INCDPTR4.十进制调整指令DAADAA功能:对累加器中由上一条加法指令(加数和被加数均为压缩的BCD码)所获得的结果进行调整。说明:①在指令系统中,没有专门的十进制(BCD码)的加法运算指令,只能使用ADD,ADDC命令,但有时会产生错误。例如:(a)5+3=8    (b)7+6=13(c)8+9=17010101111000+)0011+)0110+)10011000110110001其中(a)的运算结果是正确的,(b)(c)的运算结果是错误的。②为了消除错误,要调整为正确的压缩BCD码形式。注意,DAA指令必须紧跟ADD或ADDC指令使用。〔例3-13〕在20H、21H中分别存放压缩BCD码55和72,试将两数相加,并计算出结果。〔解〕 MOVA,20H ADDA,21H DAA,结果(A)=27,C=1如果不使用DA A指令,则结果为0C7H,是错误的。〔例3-14〕设两个4位BCD码分别存放在30H(十位、个位)和31H(百位、千位)、40H(十位、个位)和41H(百位、千位)。试编程求这两个数的和,结果存放在30H、31H、32H中。〔解〕程序如下:MOVR0,#30HMOVR1,#40HMOVA,@R0;取十位、个位ADDA,@R1 ;两数十位、个位相加DAA ;调整为BCD码MOV@R0,A;存十位、个位INCR0INCR1MOVA,@R0;取千位、百位ADDCA,@R1;两数千位、百位和进位位相加DAA;调整为BCD码MOV@R0,A;存千位、百位MOVA,#0ADDCA,#0INCR0MOV@R0,A;存万位 3.4.2减法指令 1.带进位减法指令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,OV,和P位。说明:①MCS-51指令系统中,无不带进位(实为借位)的减法指令。若进行不带借的减法运算,要在运算前使用ADDA,#00H或CLRC等指令将进位标志清0。②减法指令中,无BCD码调整。〔例3-15〕两个双字节数相减,被减数放在30H,31H,减数放在40H,41H中,差放入50H、51H。〔解〕ADDA,#00H;将进位位清0MOVA,30HSUBBA,40H;低字节相减MOV50H,AMOVA,31H    SUBBA,41H;高字节相减MOV51H,A说明:多字节相减,从低字节开始,最低字节相减时,应先将进位位清0。2.减1指令DECDECA;A←(A)-1DECRn;Rn←(Rn)-1DECdirect;direct←(direct)-1DEC@Ri;(Ri)←((Ri))-1功能:减1运算说明:①与INC命令类似,但无DPTR减1指令。②若原为00H,执行该指令后,将变为0FFH。例如(A)=10H,(R5)=00H,(30H)=2FH,(R0)=40H,(40H)=0FFH。则执行以下指令:DECA;DECR5;DEC30H;DEC@R0结果为:(A)=0FH,(R5)=0FFH,(30H)=2EH,(40H)=0FEH,(P)=0 3.4.3乘法指令MUL MULAB功能:累加器A和寄存器B中的两个无符号8位数相乘,所得16位乘积的低8位放在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)=1 3.4.4除法指令DIV DIVAB功能:两8位无符号数相除,被除数置于累加器A中,除数置于寄存器B中。指令执行后,商存于A中,余数存于B中。说明:该指令执行后,C清0,若除数为0(即寄存器B内数据为0),(OV)=1,表明除0没有意义;若除数不为0,则(OV)=0。例:(A)=0FBH,(B)=12H,则DIVAB结果:(A)=0DH,(B)=11H,(C)=0,(OV)=0〔例3-16〕编程实现下列运算:F=D1×D2+D3/D4,其中D1、D2、D3、D4都为非0的8位二进制无符号数。〔解〕MOVA,#D1 MOVB,#D2MULAB;计算D1×D2MOVR2,A;暂存D1×D2的结果MOVR3,BMOVA,#D3MOVB,#D4DIVAB;计算D3/D4ADDA,R2;乘积的低位与商相加MOVR2,A;存F低位MOVA,R3ADDCA,#0;乘积的高位与低位和的进位相加MOVR3,A;存F高位在R3中3.5 逻辑运算及移位指令 1.逻辑与指令ANLANLA,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)∧data3.5.1逻辑运算指令说明:①逻辑运算是按位进行的,只影响标志位P。②该指令用于屏蔽某些位。 [例3-17〕将R1中的低4位清0,高4位不变。〔解〕MOVA,#11110000BANLA,R1MOVR1,A01111010∧)1110011001100010结果为:(A)=62H例:设(A)=7AH,(20H)=0E6H,执行指令 ANLA,20H2.逻辑或指令ORLORLA,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 〔例3-18〕将片外RAM2000H单元的0、1位置1,2、3位清0,其它位不变。〔解〕MOVDPTR,#2000HMOVXA,@DPTRORLA,#00000011BANLA,#11110011BMOV@DPTR,A3.逻辑异或指令XRLXRLA,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)=011110110⊕0101010110100011〔例3-19〕将20H单元内容1、3、5、7位保持不变,0、2、4、6位取反。 〔解〕XRL20H,#01010101B若(20H)=11110110则执行指令:结果为(20H)=10100011B4.累加器清0指令CLRCLRACPLA5.累加器取反指令CPL例如(A)=0E6H执行CPLA,结果为:(A)=19H说明:1)取反即为逻辑非运算。2)MCS-51单片机没有求补指令,若对累加器A中数求补,则程序如下:CPLAINCA3.5.2移位指令 循环左移RLA;An+1←An,A0←A7循环右移RRA;An←An+1,A7←A0进位循环左移RLCA;An+1←An,A0←C,C←A7带进位循环右移RRCA;An←An+1,A7←C,C←A0移位指令〔例3-21〕分析下列程序段实现的功能:MOVA,directRLAMOVR1,ARLARLAADDA,R1MOVdirect,A〔解〕各指令实现的功能依次如程序右边注译,可知该程序实现的功能是将存贮单元的数乘以10。;取数设为D0;D0×2;(R1)=2D0;2D0×2;4D0×2;8D0+2D0;存数10D0〔例3-20〕将20H单元存放的无符号数除2。〔解〕ADDA,#0;C清零  MOVA,20HRRCAMOV20H,A3.6 位操作指令MOVC,bit;C←(bit)MOVbit,C;bit←(C)〔例3-22〕将20H位的内容送至50H位,并要求不改变C的状态。〔解〕MOV10H,C;保护C内容  MOVC,20HMOV50H,CMOVC,10H;恢复C内容3.6.1位传送指令MOV 说明:①多数位操作指令由C参与,C称位累加器。②位操作指令寻址方式为位寻址。 3.6.2位置位/复位指令 1.位置位(置1)命令SETBSETBC;C←1SETBbit;bit←12.位复位(清0)命令 CLRC;C←0CLRbit;bit←0说明:①位置位/复位命令可以方便改变位空间的单个位的内容,十分灵活。②例如许多运算要先将C清零,我们用以用ADDA,#0来清零,也可以直接用CLRC指令。 3.6.3位运算指令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,bit1ANLC,/bit2;C←(bit1).(/bit2)MOVbit0,CMOVC,bit2ANLC,/bit1;C←(/bit1).(bit2)ORLC,bit0MOVbit0,C〔例3-23〕设bit0,bit1,bit2为三个位地址,试编程实现异或运算bit0=bit1⊕bit2=(bit1)∧(/bit2)+(/bit1)∧(bit2)程序如下:MOVC,P0.1ANLC,/P0.0ORLC,/P0.2MOVP1.7,C〔例3-24〕编程实现图3-9的逻辑功能。化简可得:P1.7=P0.0•P0.1•P0.2〔解〕根据逻辑图得出逻辑关系:P1.7=P0.0•P0.1•P0.1•P0.23.7 控制转移类指令 程序的顺序执行是由PC自动加1实现的,要改变程序的执行顺序,实现分支转向,必须通过强迫改变PC值的方法来实现,这就是控制转移类指令的基本功能。控制转移类指令可以控制程序根据不同情况执行不同的程序段,令单片机应用系统做出相应的动作。控制转移类指令使单片机具有“智能化”功能。控制类指令的掌握使用较复杂,包括无条件转移指令、条件转移指令及子程序调用返回指令。 3.7.1无条件转移指令 1.长转移指令LJMPLJMPaddr16;PC←addr16功能:指令执行后将16位地址(addr16)传送给PC,从而实现程序转移到新的地址开始运行。说明:该指令可实现64KB范围的任意转移。2.短转移指令SJMPSJMPrel;PC←(PC)+2+rel功能:执行指令后,程序从当前位置向前或向后跳转rel个单元运行。说明:①该指令中寻址方式称相对寻址。②rel为8位带符号补码数,因此所能实现的程序转移是双向的,若rel为正数,则向前转移,若rel为负数向后转移。转移相对范围图是-128~+127H共256个单元;③注译中的“PC←(PC)+2+rel”是这样得来的:注译中“(PC)”是该指令执行前的值,前面的“PC”是指指令执行后的值。因“SJMPrel”指令存放在ROM中占用2个字节单元(为双字节指令),故程序从指令执行后“当前位置”向前或向后跳转rel个单元,也就是从指令执行前的位置向前或向后跳转2+rel个单元。AJMPaddr11;PC←(PC)+2,PC10~0←addr11功能:addr11的11位数取代该指令执行后程序指针PC的低11位PC10~0,程序根据PC值转移运行。说明:①addr11为11位无符号数,程序转移最大范围为2KB。②LJMP,STMP,AJMP功能相同,只是转移范围不同。3.绝对转移指令AJMPJMP@A+DPTR;PC←(A)+(DPTR)功能:由A及DPTR的内容决定程序转移的目的地址。说明:①DPTR为基址寄存器,A为变址寄存器,为基址加变址寻址方式。②把DPTR值固定,赋与A不同的值,则可实现程序的多分支转移。4.变址转移指令JMP 3.7.2条件转移指令 测试转移指令1)累加器A判0转移指令JZrel;若(A)=0,转移,PC←(PC)+2+rel;若(A)≠0,顺序执行。JNZrel;若(A)≠0,转移,PC←(PC)+2+rel2)进位位测试转移指令JCrel;若(C)=1,转移,PC←(PC)+2+relJNCrel;若(C)=0,转移,PC←(PC)+2+rel所谓条件转移就是程序的转移是有条件的,当指令中规定的条则满足时,程序转移,否则程序不转移,仍顺序执行。3)位单元测试转移指令JBbit,rel;若(bit)=1,转移,PC←(PC)+3+relJNBbit,rel;若(bit)=0,转移,PC←(PC)+3+relJBCbit,rel;若(bit)=1,转移,PC←(PC)+3+rel;同时将bit位清零。功能:根据测试条件决定程序是否转移执行。说明:①若条件满足程序转移执行;若条件不满足,顺序执行。②位单元测试转移指令为三字节指令,故执行该类指令,若条件满足转移时,PC=(PC)+3+rel。其它测试转移指令为双字节指令,条件满足转移时,PC=(PC)+2+rel。〔解〕MOVR0,#DATA2;赋首址 MOVDPTR,#DATA1LOOP1:MOVXA,@DPTR;取数JZLOOP2;判断是否为0MOV@R0,A;不为0存数INCR0;准备取下一个数INCDPTRSJMPLOOP1;重复取数过程LOOP2:RET〔例3-25〕将外部RAM的一个数据块(首址为DATA1)传送到内部RAM(首址DATA2),遇到传送的数据为零时停止。格式为:CJNE<被比较数>,<比较数>,relCJNEA,direct,rel;累加器A与内部RAM的direct单元不等转移。CJNEA,#data,rel;累加器A与立即数data不等转移CJNERn,#data,rel;寄存器Rn与立即数data不等转移CJNE@Ri,#data,rel;间接寻址的片内RAM单元与立即数data不等转移2.比较不相等转移指令CJNE说明:①数据比较转移指令多位三字节指令。②利用该类指令不但可以实现程序的转移功能,也可以用以比较两数值的大小。③指令执行后进位位C的状态相当反映了被比较数与比较数相减有无借位。〔解〕MOVR0,#DATALOOP1:CJNE@R0,#64H,LOOP2SJMPLOOP3LOOP2:INCR0SJMPLOOP1LOOP3:MOVA,R0〔例3-26〕找出片内RAM的DATA为首址的数据块中第一个等于100的数,并将其地址存入A中。DJNZRn,relDJNZdirect,rel功能:寄存器Rn或direct单元内容减1,如果结果为零,则程序顺序执行;如果还没有减到0,则程序转移。说明:这两条指令主要用于控制程序循环,又称循环指令。预先赋值Rn或RAM单元,以控制循环次数。3.减1不为0转移指令DJNZ〔解〕分析:这是一个重复操作过程,可以使用循环指令。30H~7FH共50H个单元,循环次数为50H。程序如下:MOVR7,#50HMOVR0,#30HNEXT:MOV@R0,#0INCR0DJNZR7,NEXT〔例2-27〕将内部RAM的30H~7FH单元清0。 〔解〕MOVDPTR,#2000H;数据传送的源地址PUSHDPL;保存源地址PUSHDPHMOVDPTR,#3000H;数据传送的目的地址MOVR2,DPL;保存目的地址MOVR3,DPHLOOP:POPDPH;取源地址POPDPLMOVXA,@DPTR;从源地址单元取数INLDPTR;下一个单元源地址PUSHDPL;保存源地址PUSHDPHMOVDPL,R2;取目的地址MOVDPH,R3MOVX@DPTR,A;将数据存入目的地址INCDPTR;下一个目的地址MOVR2,DPL;保存目的地址MOVR3,DPHDJNZ30H,LOOP;判断数据传送是否结束〔例3-28〕把从2000H开始的片外RAM单元中的数据传送到从3000H开始单元中,数据个数存放在片内RAM30H单元中。3.7.3子程序调用返回指令 1.长调用指令LCALLLCALLaddr162.绝对调用指令ACALLACALLaddr113.返回指令 RETRETI;中断服务子程序返回指令3.7.4空操作指令NOPNOP;PC←(PC)+1 3.8 MCS-51指令机器代码 指令的存贮和运行是以二进制代码的形式进行的,这些代码称机器指令或机器码。机器指令中的代码长度各有不同,有单字节、双字节和三字节3种,对应指令分别称为单字节指令,双字节指令和三字节指令。3.8.1机器代码及其存贮3000HE8MOVA,R03001H240FADDA,#0FH3003H902000MOVDPTR,#2000H3006HF0MOV@DPTR,A3.8.2机器码的查表计算 1.指令中带有立即数、直接地址、工作寄存器的机器码每条汇编指令都有与之一一对应的机器指令,亦即机器码,可由MCS-51指令表(附录6)中查出。某些指令码由表中直接给出,还有一些须经过简单的推算方能得出。指令中的立即数、直接地址直接参与编码。〔解〕查表,指令PUSH80H属PUSHdirect形式,PUSHdirect的代码项为:C0direct,所以PUSH80H的代码为:C080表中指令MOVDPTR,#data16代码项为:90data15~8data7~0,故MOVDPTR,#2000H的代码为:902000表中指令ADDA,R5的代码项为28~2F,则可知ADDA,R5的代码为2D〔例3-29〕分别给出PUSH80H、MOVDPTR,#2000H、ADDA,R5的代码。2.非相对址控制转移类指令的机器码1)长转移及长调用指令在LJMPaddr16及LCALLaddr16中,16位地址往往是用地址标号表示的,这时须将地址标号所在指令的首址计算出。例:标号地址START为0100H,标号LOOP为8100H,则START:LCALLLOOP的代码为:12 81 00分别存贮在0100H、0101H和0102H的ROM单元中。指令AJMPaddr11的代码是这样生成的:addr11的高3位与00001合成一个字节,add11的低8位为第二个字节,即:a10a9a800001a7a6a5a4a3a2a1a0。指令ACALLadd11与之类似,代码这样生成:addr11的高3位与10001合成一个字节,add11的低8位为第二个字节,即:a10a9a810001a7~a0。〔例3-30〕标号地址HERE为2070H,LOOP为235AH,则指令HERE:AJMPLOOP,HERE:ACALLLOOP代码为何?〔解〕235AH即0010001101011010,其低11位分别为011 0101 1010,则AJMP指令的机器码为:0110 0001 0101 1010即615AACALL指令的机器码为:0111 0001 0101 1010即715A2)绝对转移及绝对调用指令机器码3.相对转移指令的机器码1)当程序向前转移时若指令为双字节指令:  rel=目的地址―(源地址+2)若指令为三字节指令(比较转移类指令):  rel=目的地址―(源地址+3)2)当程序向后转移时,偏移量为负,用补码表示,则:若指令为双字节:  rel=[目的地址-(源地址+2)]补   =FF-(源地址+2-目的地址)+1   =FEH-(源地址-目的地址)若指令为三字节指令: rel=FDH-(源地址-目的地址)〔例3-31〕若LOOP,LOOP1,LOOP2的标号值分别为0100H,0123H,008AH,则给出下列4条指令的代码。①LOOP:SJMPLOOP1②LOOP:CJNEA,#64H,LOOP1③LOOP:DJNZR0,LOOP2④LOOP:SJMPLOOP〔解〕关键是计算偏移量①该指令为双字节指令  rel=LOOP1-(LOOP+2)=0123-(0100+2)=21H指令为:80 21②该指令为三字节指令  rel=LOOP1-(LOOP+3)=0123-(0100+3)=20H指令为:B8 64 20③该指令向后转移  rel=FEH-(LOOP1-LOOP2)=FEH-(0100H-008AH)=88H则指令为:D888④ rel=FEH-(LOOP-LOOP)=FEH指令为:80 FE3.9 MCS-51单片机指令小结3.9.1MCS-51单片机指令系统组成MCS-51汇编语言有42种操作码助记符来描述33种操作功能。功能助记符与不同寻址方式组合,得到111条指令,分为5大类:1)数据传送类指令29条2)运算类指令24条3)逻辑运算及移位类指令24条4)位操作类指令17条5)控制转移类指令17条另外,MCS-51指令根据书写格式,可分为单操作数、双操作数、三操作数和无操作数;按照长度不同,分为单字节、双字节和三字节指令;根据执行时间的长短,分为单周期、双周期和四周期指令。3.9.2寻址方式及指令应用存贮器范围小结1.寻址方式应用范围小结寻址方式操作数寻址范围立即寻址#data,#data16 ROM直接寻址direct片内RAM寄存器寻址Rn,A,DPTR寄存器寄存器间接寻址 @Ri,SP@Ri,@DPTR片内RAM片外RAM位寻址C,bit位空间基址加变址寻址@A+PC,@A+DPTRROM相对寻址PC+relROM表3-2内部RAM寻址方式寻址方式     低128单元高128单元(SFR)通用寄存器区位寻址区用户RAM区00H~1FH20H~2FH30H~7FH80H~0FFH寄存器寻址√位寻址 √ √(部分单元)直接寻址 √√ √√间接寻址√√√√寄存器间接寻址方式低地址单元(256个)00H~0FFH高地址单元(65280个)0100H~0FFFFH以Ri作间址寄存器√以DPTR作间址寄存器√ √表3-3外部RAM寻址方式2.指令应用范围小结1)外部RAM单元只能通过4条MOVX指令与累加器A进行数据传输:MOVXA,@RiMOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,A2)对于程序寄存器ROM的操作有两种,一种是通过查表指令,将ROM单元的内容传送到累加器A中,指令有2条:MOVCA,@A+DPTRMOVCA,@A+PC另一种操作是通过转移类指令改变PC的值,从而改变程序运行的方向。3)其它类操作指令只能针对内部RAM,RAM是应用最频繁的存贮单元。
本文档为【单片机原理及接口技术指令系统讲义】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_704284
暂无简介~
格式:ppt
大小:2MB
软件:PowerPoint
页数:89
分类:建筑/施工
上传时间:2018-05-18
浏览量:5