单片机原理及应用第三章_第1页
单片机原理及应用第三章_第2页
单片机原理及应用第三章_第3页
单片机原理及应用第三章_第4页
单片机原理及应用第三章_第5页
已阅读5页,还剩111页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 AT89C51单片机的指令系统 3.1指令格式及常用符号 MCS51指令系统共使用:7种寻址方式,42种助记符。分5大类,33种功能,111条指令。 3.1.1 指令格式 在MCS-51指令中,一般指令主要由操作码、操作数组成。指令应具有以下功能:(1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。(2)操作数指明操作的数本身或者是操作数所在的地址。(3)指定操作结果存放的地址。指令有三种属性:功能、时间和空间。 功能属性:某种特定的操作;时间属性:执行一条指令所用的时间;空间属性:一条指令所用占用的字节数; 计算机能执行的是机器代码:源程序(汇编语言程序) 目标程

2、序(机器语言程序) 机器或手工汇编汇编语言指令格式:操作助记符 目的操作数,源操作数;注释机器指令格式: 操作码操作数1操作数2 有单字节、双字节、三字节等不同长度的指令。 3.1.2 符号指令及其注释中常用的符号Rn(n=07)-当前选中的工作寄存器组中的寄存器R0R7之一;Ri(i=0,1)-当前选中的工作寄存器组中的寄存器R0或R1; -间址寄存器前缀;#data -8位立即数;#data16-16位立即数;direct-片内低128个RAM单元地址及SFR地址(可用符号名称表示);addr11-11位目的地址;addr16-16位目的地址;rel-补码形式表示的8位地址偏移量,值在12

3、8127范围内;bit-片内RAM位地址、SFR的位地址(可用符号名称表示);/-位操作数的取反操作前缀;()- 表示 地址单元或寄存器中的内容;() -表示所指地址单元的内容。 -将箭头左边的内容送入箭头右边的单元中。3.1.3 MCS51指令系统主要特点 (1)指令执行时间快。 64条单机器周期,45条双机器周期,两条四机器周期指令。若时钟采用12MHZ,则指令执行时间最快1S,最慢4S。(2)指令短。 49条单字节,45条双字节,17条三字节 (3)用一条指令即可实现2个一字节的相乘或相除。(4)具有丰富的位操作指令。 (5)可直接用传送指令实现端口的输入输出操作。3.2 AT89C51

4、的寻址方式是寻找操作数或指令的地址的方式。AT89C51的寻址方式有七种。即:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址(基址寄存器加变址寄存器)、相对寻址和位寻址。1、立即数寻址 指令编码中直接给出操作数的寻址方式称为立即寻址。在这种寻址方式中,紧跟在操作码之后的操作数称为立即数。立即数可以为一个字节,也可以是两个字节,并要用符号“”来标识。由于立即数是一个常数,所以只能作为源操作数。 立即寻址所对应的寻址空间为:ROM 如:MOV A,50H 2、直接寻址 直接寻址是指在指令中直接给出操作数所在存储单元的地址。执行指令时,从该地址中直接获取操作数。 直接寻址中的SFR经常采用

5、符号形式表示。寻址空间为:片内RAM低128字节;SFR。如:MOV A,50H 3、寄存器寻址 寄存器寻址是指把寄存器的内容作为操作数。可以获得较高的传送和运算速度。 寄存器可以是:R0R7;A;B;DPTR。如:MOV A,R0 4、寄存器间接寻址 以寄存器的内容为地址,该地址中的内容为操作数的寻址方式。可作为寄存器间接寻址的寄存器有:R0、R1、DPTR 、SP(仅用于堆栈操作)寻址的存储空间为片内RAM或片外RAM。间接寻址用“”表示。 例:ANL A,R0;MOV A,R0; MOVX A,R0;MOVX DPTR,A MOV P2,20H MOV R0,00H MOVX A,R0也

6、可: MOV DPTR,2000H MOVX A,DPTR两者效果相同。例如:片内RAM30HR034HA30H34H MOV R0,A间接寻址示意图片外RAM20HP245HA2010H45H10HR0片外RAM2000HDPTR30HA2000H30HMOVX A,R0间接寻址示意图 MOVX DPTR,A间接寻址示意图5、变址寻址 由基址寄存器PC或DPTR加上偏移量寄存器A中内容之和形成操作数地址的寻址方式。该方式只能对程序存储器操作。只读,无写。例:MOVC A,A+DPTR; MOVC A,A+PC如:MOVC A,A+DPTR 6、相对寻址 以当前PC的内容为基址(指读出该2字节

7、或3字节的跳转指令后,PC指向的下条指令的地址) ,加上指令给出的一字节补码偏移量形成新的PC值的寻址方式。 偏移量rel为带符号数,能表示的范围:+127-128 相对寻址用于修改PC值,主要用于实现程序的分支转移。 例:SJMP 08H ;PC+2+08HPC程序存储器(2000H)200AHSJMP200AH08H2000H+208HPC2000H相对寻址示意图7、位寻址 对位地址中的内容作位操作的寻址方式。 只能采用直接寻址。位地址与字节地址形式一样,由操作码区分。(位地址也可定义符号地址) 位地址有四种表示方法(后述)例:SETB 20H; MOV C,32H; FAST BIT 2

8、0H SETB FAST;存储器的数据操作方式 1、程序存储器的数据操作:只读,地址由PC提供,也可用PC或DPTR变址寻址。例:MOVC A,A+DPTR2、外部数据RAM的数据操作 可读、可写,用DPTR或R0、R1间址。 用R0、R1间址时,P2提供地址高8位,R0或R1提供低8位。例:MOVX DPTR,A MOVX A,DPTR MOV P2, #20H MOV R0,#30H MOVX R0,A3、内部数据RAM的数据操作 可读、写,直接寻址或R0、R1间接寻址(8032高地址RAM只能用R0和R1间址) 例:MOV 30H,AMOV R0,#30HMOV R0,A4、SFR的数据

9、操作 可读、写,只能直接寻址。例:MOV P1,#30H; MOV A,P0; MOV PSW,#10H )5、位地址空间的数据操作 可读、写,直接寻址。 SETB 20H;CLR 20H;SETB EA 3.3 AT89C51指令系统 AT89C51指令系统与MCS51指令系统完全兼容,共使用:7种寻址方式,42种助记符。分5大类,33种功能,111条指令。 3.3.1 数据传送类指令(29条)传送类指令占有较大的比重。数据传送是进行数据处理的最基本的操作,这类指令一般不影响标志寄存器PSW的状态。 传送类指令可以分成两大类。一是采用MOV操作符,称为一般传送指令;二是采用非MOV操作符,称

10、为特殊传送指令,如:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。 一般传送指令一般传送指令一般传送指令的指令格式为: MOV , (源目的,源不变) 一、16位传送MOV DPTR,#data16;DPTR data16 这条指令的功能是将源操作数data16(通常是地址常数)送入目的操作数DPTR中。源操作数的寻址方式为立即寻址。例如: 执行指令 MOV DPTR,#1234H 后 (DPH)=12H,(DPL)=34H。二、8位传送格式为: MOV , (源目的,源不变) 目的字节: A,Rn,direct,Ri源字节: A,Rn,direct,Ri,#data 在5

11、种源字节中,只有data不能用作目的字节。所以可以用4种目的字节为基础构造4类指令。相应的源字节选择依据是:源字节与目的字节不相同(除direct外);寄存器寻址与寄存器间接寻址间不相互传送。1、 以A为目的这组指令的功能是把源字节送入累加器中。源字节的寻址方式分别为直接寻址、寄存器间接寻址、寄存器寻址和立即寻址四种基本寻址方式。例:若(R1)= 20H,(20H)= 55H,执行指令 MOV A,R1 后,(A)= 55H。2以Rn 为目的这组指令的功能是把源字节送入寄存器Rn中。源字节的寻址方式分别为立即寻址、直接寻址和寄存器寻址(由于目的字节为工作寄存器,所以源字节不能是工作寄存器及其间

12、址方式寻址)。例:若(50H)= 40H,执行指令 MOV R6,50H 后,(R6)= 40H。3以direct 为目的 这组指令的功能是把源字节送入direct中。源字节的寻址方式分别为立即寻址、直接寻址、寄存器间接寻址和寄存器寻址。 例:若(R1)=50H,(50H)=18H,执行指令MOV 40H,R1 后,(40H)=18H。 4以Ri为目的这组指令的功能是把源字节送入Ri内容为地址的单元,源字节寻址方式为立即寻址、直接寻址和寄存器寻址(因目的字节采用寄存器间接寻址,故源字节不能是寄存器及其间址寻址)。例:若(R1)=30H,(A)=20H,执行指令 MOV R1,A 后,(30H)

13、=20H。 例:设内部RAM(30H)=40H,(40H)=10H,(10H)=00H(P1)=CAH,分析以下程序执行后各单元及寄存器、P2口的内容。MOV R0,#30H;(R0)30HMOV A,R0;(A)40HMOV R1,A;(R1)40HMOV B,R1;(B)10HMOV R1,P1;(40H)CAHMOV P2,P1;(P2)(P1)CAHMOV 10H,#20H;(10H)20H 执行上述指令后的结果为:(R0)=30H,(R1)=(A)=40H,(B)=10H,(40H)=(P1)=(P2)=CAH,(10H)=20H。特殊传送指令特殊传送指令的操作符为:MOVC、MOV

14、X、PUSH、POP、XCH、XCHD和 SWAP。功能分别为:ROM查表、外部RAM读写、堆栈操作和交换指令 一、ROM查表1DPTR内容为基址 MOVC A,A+DPTR ;A (A)+(DPTR)该指令首先执行16位无符号数加法,将获得的基址与变址之和作为16位的程序存储器地址,然后将该地址单元的内容传送到累加器A。指令执行后DPTR的内容不变。2PC内容为基址MOVC A,A+PC ;A (A)+(PC)取出该单字节指令后PC的内容增1,以增1后的当前值去执行16位无符号数加法,将获得的基址与变址之和作为16位的程序存储器地址。然后将该地址单元的内容传送到累加器A。指令执行后PC的内容

15、不变。例:A中内容是一个BCD数(09),用查表法获取相应的平方值。 方法一:用DPTR间址子程序BCD-BCD2:MOV DPTR,#TAB;TAB首址送 DPTR MOVC A,A+DPTR;查表 RETTAB: DB 0,1,4,9,16,25 DB 36,47,64,81例:A中内容是一个BCD数(09),用查表法获取相应的平方值。 方法二:用PC间址子程序BCDBCD2:ADD A,01 MOVC A,A+PC RETTAB: DB 0,1,4,9,16,25 DB 36,47,64,81加1的目的是为了绕过RET指令,使查表正确,常用于近程查表,上例用于远程查表 二、读写片外RAM

16、1读片外RAM MOVX A,DPTR ;A (DPTR) MOVX A,Ri ;A (Ri) 第一条指令以16位DPTR为间址寄存器读片外RAM,可以寻址整个64K字节的片外RAM空间。指令执行时,在DPH中的高8位地址由P2口输出,在DPL中的低8位地址由P0口分时输出,并由ALE信号锁存在地址锁存器中。第二条指令以R0或R1为间址寄存器,也可以读整个64K字节的片外RAM空间。指令执行时,低8位地址在R0或R1中由P0口分时输出,ALE信号将地址信息锁存在地址锁存器中,高8位地址由P2口提供。 读片外RAM的MOVX操作,使P3.7引脚输出的信号选通片外RAM单元,相应单元的数据从P0口

17、读入累加器中。2写片外RAMMOVX DPTR,A ;(DPTR)(A)MOVX Ri,A ;(Ri)(A) 第一条指令以16位DPTR为间址寄存器写外部RAM,可以寻址整个64K字节的片外RAM空间。指令执行时,在DPH中高8位地址由P2口输出,在DPL中的低8位地址,由P0口分时输出,并由ALE信号锁存在地址锁存器中。 第二条指令以R0或R1为间址寄存器,也可以写整个64K字节的片外RAM空间。指令执行时,低8位地址在R0或R1中由P0口分时输出,ALE信号将地址信息锁存在地址锁存器中(多于256字节的访问,高位地址由P2口提供)。 写片外RAM的“MOVX”操作,使P3.6引脚的信号有效

18、,累加器A的内容从P0口输出并写入选通的相应片外RAM单元。(外部I/O口操作类同) 片内RAM的数据传送采用“MOV”类指令,间接寻址寄存器采用寄存器R0或R1(堆栈操作时采用SP); 片外RAM的数据传送采用“MOVX”类指令,这时间接寻址寄存器有两种选择,一是采用R0和R1作间址寄存器,这时R0或R1提供低8位地址(外部RAM多于256字节采用页面方式访问时,可由P2口未使用的I/O引脚提供高位地址);二是采用DPTR作为间址寄存器。 三、堆栈操作堆栈是在内部RAM中按“后进先出”的规则组织的一片存储区。此区的一端固定,称为栈底;另一端是活动的,称为栈顶。栈顶的位置(地址)由栈指针SP指

19、示(即SP的内容是栈顶的地址)。在89C51中,堆栈的生长方向是向上的(地址增大)。 系统复位时,SP的内容为07H。 PUSH direct ;(SP) (SP) 1, (SP)(direct) POP direct ;(direct)(SP), (SP) (SP)1 例:若(SP)=07H,(40H)=88H,执行指令 PUSH 40H 后,(SP)=08H,(08H)=88H。片内RAM30H11H10HSP片内RAM50H40H11H10HSP40H30H片内RAM50H40H11H10H50HSP30H片内RAM40H11H10H50HSP30H50H50H执行前执行前执行PUSH指

20、令后执行POP指令后指令PUSH 40H操作示意图指令POP 30H操作示意图例: 若在外部程序存储器中2000H单元开始依次存放09的平方值,数据指针(DPTR)=3A00H,用查表指令取得2003H单元的数据后,要求保持DPTR中的内容不变。MOV A,#03H;(A)03HPUSH DPH;保护DPTR高8位入栈PUSH DPL;保护DPTR低8位入栈MOV DPTR,#2000H;(DPTR)2000HMOVC A,A+DPTR;(A)(2000H+03H)POP DPL ;弹出DPTR低位POP DPH ;弹出DPTR高位执行结果:(A)09H,(DPTR)=3A00H。四、数据交换

21、 对于单一的MOV类指令,传送通常是单向的,即数据是从一处(源)到另一处(目的)的拷贝。而交换类指令完成的传送是双向的,是两字节间或两半字节间的双向交换 。 1字节交换例:若(R0)=80H,(A)=20H。执行指令 XCH A,R0 后,(A)=80H,(R0)=20H。2半字节交换 XCHD指令的功能是间址操作数的低半字节与A的低半字节内容互换。 SWAP指令的功能是累加器 的高低4位互换。 例:若(R0)30H,(30H)67H, (A)20H。执行指令 XCHD A,R0 指令后,(A)27H,(30H)60H。 若(A)30H,执行指令SWAP A后,(A)03H。3.3.2 算术运

22、算类指令(24条) 算术运算指令可以完成加、减、乘、除及加加1和减1等运算。这类指令多数以A为源操作数之一,同时又使A为目的操作数。 算术运算操作将影响PSW中的OV、CY、AC和P。加法一、不带进位加二、带进位加指令的功能是把源操作数与累加器A的内容相加再与进位标志CY的值相加,结果送入目的操作数A中。加的进位标志CY的值是在该指令执行之前已经存在的进位标志的值,而不是执行该指令过程中产生的进位 。例:3字节无符号数相加,被加数放在内部RAM的20H22H(低字节在低地址,高字节在高地址),加数放在内部RAM23H25H,结果放到内部RAM26H29H。其程序段如下: MOV A,20H ;

23、被加数最低字节送累加器A ADD A,23H ;加数最低字节 MOV 26H,A ;存和的最低字节 MOV A,21H ;被加数中间字节送A ADDC A,24H ;加数中间字节 MOV 27H,A ;存和的中间字节 MOV A,22H ;被加数的最高字节送累加器A ADDC A,25H ;加加数的最高字节 MOV 28H,A ;存和的高字节 MOV A,#0 ;清累加器A ADDC A,#0 ;处理最高字节加产生的进位 MOV 29H,A ;存最高字节相加产生的进位三、加1指令的功能是把源操作数的内容加 1 ,结果再送回原单元。这些指令仅 INC A 影响P标志。其余指令都不影响标志位的状态

24、。 四、十进制调整 DA A ;对A中的二进制和调整成BCD数结果;若(A)309或AC1,则(A)306(A)30;若(A)749或CY1,则(A)746(A)74;对减法运算无效。例 若(A)0101 0110B,表示的BCD码为56,(R3)0110 0111B,表示的BCD码为67,(CY)0。执行以下指令:ADD A,R3DA A由于(A)0010 0011B,即,且(CY)1,即结果为BCD数123。应该注意,DA指令不能对减法进行十进制调整。 使用时应注意:DA指令不能对减法进行十进制调整。做减法运算时,可采用十进制补码相加,然后用 DA A指令进行调整。例如 70 - 20 =

25、 70 + 20补 = 70 +(100 - 20)= 70 + 80 = 1 50机内十进制补码可采用:x补 = 9AH -x。例: 设片内RAM 30H,31H单元中分别存放着两位BCD码表示的被减数和减数,两数相减的差仍以BCD码的形式存放在32H单元中。可用下面的程序实现CLR CMOV A,#9AHSUBB A,31H ;求减数的十进制补码ADD A,30H ;作十进制补码加法DA A ;进行BCD调整MOV 32H,A ;将BCD码的差送存32H单元减法一、带借位减二、减1这组指令的功能是把操作数的内容减 1 ,结果再送回原单元。这组指令仅 DEC A 影响P标志。其余指令都不影响

26、标志位的状态。乘法MUL AB; ( B) ( A ) (A ) ( B ) , ( Cy ) 0;A和B中各存放一个8位无符号数,指令执行后,16位乘积的高8位在B中,低8位存A中。;当乘积大于FFH时,溢出标志位(OV)=1。除法DIV AB ;AB商放A,余数放B ;若B0,则置OV1 ;0CYMUL和DIV两条指令执行时间最长,需4个机器周期。 例:把累加器中的二进制数转换为3位BCD数,百位数放HUND,十位、个位数放在TENONE中。HUND和TENONE为内部RAM中两单元。BINBCD:MOV B,100 DIV AB MOV HUND,A;得到百位数 MOV A,10 XCH

27、 A,B DIV AB;得到十位数和个位数 SWAP A; ADD A,B;组成压缩的BCD数 MOV TENONE,A RET3.3.3 逻辑运算与循环类指令(24条) 逻辑运算指令可以完成与、或、异或、清0和取反操作,当以累加器A为目的操作数时,对P标志有影响; 循环指令是对累加器A的循环移位操作,包括左、右方向以及带与不带进位位等移位方式,移位操作时,带进位的循环移位对CY和P标志有影响; 累加器清0操作对P标志有影响。 1、逻辑与 前2条指令的功能是把源操作数与直接地址指示的单元内容相与,结果送入直接地址指示的单元。 后4条指令的功能是把源操作数与累加器A的内容相与,结果送入累加器A中

28、。例 若(A)=C3H,(R0)=AAH,执行指令 ANL A,R0 之后,(A)=82H。2、逻辑或前2条指令的功能是把源操作数与直接地址指示的单元内容相或,结果送入直接地址指示的单元。后4条指令的功能是把源操作数与累加器A的内容相或,结果送入累加器A中。例 若(A)=C3H,(R0)=55H,执行指令ORL A,R0 之后,(A)=D7H。例: 将累加器A中的低4位传送到P1口的低4位,但P1口的高4位需保持不变。解:当需要只改变字节数据中某些位,而其它位保持不变,不能采用直接传送方法,只能通过逻辑运算才能完成,具体程序如下:MOV R0,A ; A的内容暂存R0ANL A, #0FH ;

29、屏蔽A的高4位,低4位不变ANL P1,#0F0H ;屏蔽P1的低4位,高4位不变ORL P1,A ;实现低4位传送MOV A,R0 ;恢复A的内容 3、逻辑异或 前2条指令的功能是把源操作数与直接地址指示的单元内容异或,结果送入直接地址指示的单元。 后4条指令的功能是把源操作数与累加器A的内容异或,结果送入累加器A中。例 若(A)=C3H,(R0)=AAH,执行指令 XRL A,R0 之后,(A)=69H。例: 若(A)=B5H=10110101B,执行下列操作: XRL A,#0F0H ; A的高4位取反,低4位保留, (A)=01000101B=45H MOV 30H,A ;(30H)=

30、45H XRL A,30H ;自身异或使A清零4、累加器清0和取反;A 0 ;A 这两条指令的功能分别是把累加器A的内容清 0 和取反,结果仍在A中。 例 若(A)=A5H,执行指令 CLR A 之后,(A)=00H。 5、累加器循环移位 有时“累加器A内容乘2”或 “累加器A内容除2”的任务可以利用左移或右移指令方便地完成。 例:若(A)= BDH = 1011 1101B,(CY)0。执行指令RLC A后,(CY)=1,(A)= 0111 1010B = 7AH,(CY)1。 结果为:17AH(378)2BDH(189)。 3.3.4 控制转移类指令(17条) 通常情况下,程序的执行是顺序

31、进行的,但也可以根据需要改变程序的执行顺序,这种情况称作程序转移。 控制程序的转移要利用转移指令。89C51的转移指令有无条件转移、有条件转移及子程序调用与返回等。一、无条件转移1、 短跳转 AJMP addr11 ; PC (PC)+ 2, ; PC100 addr11 该指令执行时,先将PC的内容加2(这时PC指向的是AJMP的下一条指令),然后把指令中11位地址码传送到PC100,而PC1511保持原内容不变。 当前PC的高5位(即下条指令的存储地址的高5位)可以确定32个2KB段之一。所以,AJMP指令的转移范围为包含AJMP下条指令在内的2KB区间。2、长跳转 LJMP addr16

32、 ;PC addr16 第一字节为操作码,该指令执行时,将指令的第二、三字节地址码分别装入指令计数器PC的高8位和低8位中,程序无条件地转移到指定的目标地址去执行。 LJMP提供的是16位地址,因此程序可以转向64KB的程序存储器地址空间的任何单元。 例 若标号“NEWADD”表示转移目标地址1234H。执行指令 LJMP NEWADD 时,两字节的目标地址将装入PC中,使程序转向目标地址 1234H 处运行。3、相对转移 SJMP rel ;PC (PC)+ 2,PC (PC)+ rel 第一字节为操作码,第二字节为相对偏移量 rel,rel 是一个带符号的偏移字节数(2的补码),取值范围为

33、 127 128(00H7FH对应表示0 127,80HFFH对应表示1281)。负数表示反向转移,正数表示正向转移。 rel 可以是一个转移目标地址的标号,由汇编程序在汇编过程中自动计算偏移地址,并填入指令代码中。在手工汇编时,可用转移目标地址减转移指令所在的源地址,再减转移指令字节数2得到偏移字节数rel。例:0100H单元有一条指令,sjmp 21h,则转至01002210123H。 若相对地址为F0H(负数),则转至01002FFF0H00F2H。 当偏移字节为FEH时,SJMP将原地跳转。(转圈)例:0060H有指令,SJMP FEH,则转至0060H2FFFEH0060H。程序中用

34、 SJMP $表示。4、散转移 JMP A+DPTR ;PC (PC)+ 1, ;PC (A)+(DPTR) 该指令具有散转功能,可以代替许多判别跳转指令。其转移地址由数据指针DPTR与A中内容之和形成,并直接装入PC, A与DPTR内容均不改变。 也不影响标志位。例: 根据累加器A(0,1,2)的值,转不同处理程序的入口。MOV DPTR,#TABLE ;表首地址送DPTR RL A JMP A+DPTR ;根据A值转移 TABLE:AJMP TAB0 ;当(A)=0时转TAB0执行 AJMP TAB1 ;当(A)=1时转TAB1执行 AJMP TAB2 ;当(A)=2时转TAB2执行二、有

35、条件转移 1、累加器为零(非零)转移JZ rel ;(A)0,转移,(PC) (PC)+2rel ;(A)0,程序顺序执行,(PC) (PC)+2 JNZ rel ;(A)0,转移,(PC) (PC)+2rel ;(A)0,程序顺序执行,(PC) (PC)+2 指令的功能是对累加器A的内容为 0 和不为 0 进行检测并转移。当不满足各自的条件时,程序继续往下执行。当各自的条件满足时,程序转向指定的目标地址。目标地址的计算与SJMP指令情况相同。指令执行时对标志位无影响。例 若累加器A原始内容为00H,则: JNZ L1 ;由于A的内容为00H,所以程序往下执行 INC A ; JNZ L2 ;

36、由于A的内容已不为0,所以程序转向L2 处执行 例:将片外RAM首地址为2000H的一个数据块转送到片内RAM首地址为30H的存储区中,数据块最后的结束字节为00H。 外部RAM向内部RAM的数据转送一定要经过累加器A,利用判零条件转移正好可以判别是否要继续传送或者终止。完成数据传送的参考程序如下: MOV DPTR,#2000H ;DPTR作为外部数据块的地址指针 MOV R1,#30H ;R1作为内部数据块的地址指针LOOP: MOVX A,DPTR ;取外部RAM数据送入AHERE: JZ HERE ;数据为零则终止传送 MOV R1,A ;数据传送至内部RAM 单元 INC DPTR

37、;修改指针,指向下一数据地址 INC R1 SJMP LOOP ;循环取数例 设变量x以补码的形式放在片内RAM 30H单元,函数y与x有如下关系式: x, x0; y= #20H,x=0; x+5, x0。试编制程序,根据x的大小求出y并放回原单元。MOV A,30H MOV 30H,AJZ NEXT SJMP EDANL A,#80H NEXT:MOV 30H,#20HJZ ED ED: SJMP $ MOV A,#05HADD A,30H2、 比较不相等转移 格式: CJNE (目的),(源),rel 执行过程:(目的)(源),转移,(PC)(PC)+3rel 且: (目的)(源)C0

38、(目的)(源)C1(目的)(源),顺序执行,(PC) (PC)+3 这组指令的功能是对指定的目的字节和源字节进行比较,若它们的值不相等则转移,转移的目标地址为当前的PC值加3后,再加指令的第三字节偏移量rel;若目的字节的内容大于源字节的内容,则进位标志清0;若目的字节的内容小于源字节的内容,则进位标志置1;若目的字节的内容等于源字节的内容,程序将继续往下执行。例:当从P1口输入数据为01H 时,程序继续执行,否则等待,直到P1口出现01H。参考程序如下: MOV A,#01H ;立即数01H送AWAIT: CJNE A,P1,WAIT ;(P1)01H,则等待3、 减1不为0转移 这组指令每

39、执行一次,便将目的操作数的循环控制单元的内容减1,并判其是否为 0。若不为0,则转移到目标地址继续循环;若为0,则结束循环,程序往下执行。例 有一段程序如下: MOV 23H,#0AH CLR ALOOPX:ADD A,23H DJNZ 23H,LOOPX SJMP $ 该程序执行后: (A)=10+9+8+7+6+5+4+3+2+1=37H 例: 将内部RAM从DATA单元开始的10个无符号数相加,相加结果送SUM单元保存。设相加结果不超过8位二进制数,则相应的程序如下: MOV R0,#0AH ;设置循环次数 MOV R1,#DATA ;R1作地址指针,指向数据块首地址 CLR A ;A清

40、零LOOP: ADD A,R1 ;加一个数 INC R1 ;修改指针,指向下一个数 DJNZ R0,LOOP ;R0减1,不为0循环 MOV SUM,A ;存10个数相加的和例:编写延时时间约0.5ms的延时子程序设采用的晶振为12 MHz,则机器周期为1 s DL05MS: MOV R0,#250 DJNZ R0,$ ;2 250 s RET 例:设单片机的晶振频率为6MHZ,编写一段延时约100ms的子程序。 Delay: MOV R7,64H LOOP: MOV R6,FAH ;循环250D次 DJNZ R6,$ ;本条指令执行时间 为4 us DJNZ R7,LOOP RET三、空操作

41、 NOP ;PC PC+1 ;这是一条单字节指令。执行时,不作任何操作;(即空操作),仅将程序计数器PC的内容加1, 使CPU指向下一条指令继续执行程序。这条指令常用来产生一个机器周期的时间延迟。四、调用与返回1、 调用 这两条指令可以实现子程序的短调用和长调用。目标地址的形成方式与AJMP和LJMP相似。这两条指令的执行不影响任何标志。 ACALL指令执行时,被调用的子程序的首址必须设在包含当前指令(即调用指令的下一条指令)的第一个字节在内的2K字节范围内的程序存储器中。LCALL指令执行时,被调用的子程序的首址可以设在64K字节范围内的程序存储器空间的任何位置。2、返回RET指令的功能是从堆栈中弹出由调用指令压入堆栈保护的断点地址,并送入指令计数器PC,从而结束子程序的执行。程序返回到断点处继续执行。RETI指令是专用于中断服务程序返回的指令,除正确返回中断断点处执行主程序以外,并有清除内部相应的中断状态寄存器(以保证正确的中断逻辑)的功能。3.3.5 位操作类指令(1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论