第3章_单片机指令系统_第1页
第3章_单片机指令系统_第2页
第3章_单片机指令系统_第3页
第3章_单片机指令系统_第4页
第3章_单片机指令系统_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

1、MCS-51 单片机原理及应用,第3章 MCS-51单片机指令系统,MCS-51单片机指令系统,指令是指挥计算机工作的命令,一种计算机所能执行的指令集合称之为该种计算机的指令系统。 程序是将指令有效地组合成能够完成特定任务的指令序列。,指令格式,指令格式指令的表达方式称为指令格式 标号: 操作码 目的操作数 ,源操作数 ;注释 标号:指令的符号地址。标号是用户设定的符号,表示该语句所在的地址。标号必须由以字母开头的 l8个 ASCll字符组成,这些字符不能使用在该汇编语言中已经定义过了的符号。 操作码:操作码是由英文缩写组成的字符串,它规定了指令的操作功能,是指令格式中唯一不能空缺的部分。 操

2、作数:操作数用于给指令的操作提供数据或地址。操作数可以是空白也可能只有一项或二项,还可以有三项。各操作数之间必须用逗号分隔,操作数与操作码之间须用空格分隔。在两个操作数的指令中,把左边的操作数称为目的操作数,而右边操作数称之为源操作数。,注释:注释是对语句或程序段功能的说明。注释要用分号“;”开头,注释的长度不限,但每行开头仍须使用分号“;”,注释也可空缺。,数据的表达形式,汇编语言中的数据一般采用以下几种表达方式: 二进制数形式,末尾用字母 B标识,如 0101001B。 十进制数形式,末尾用字母D标识或不用任何标识,如:96D,78D。 十六进制数形式,末尾用字母H标识,在表示时,如果以字

3、母开头,则须在其前面添加“0”,如:0F5H。 ASCll码形式,用单引号括起来标识,如GOD,288。,指令中常用符号 Rn(n=07)当前工作寄存器组 R0R7; i(i=0,l)当前工作寄存器组的R0或RI; ACC代表累加器A的直接地址EOH; 间接寻方式中间址寄存器标志符号; data8位立即数; datal616位立即数; direct8位片内RAM单元(包括SFR的地址或符号)的直接地址; addr1111位目的地址; addr1616位目的地址,只限于在LCALL和LJMP指令中使用;,Rel8位带符号补码数; Bit片内RAM或SFR中的直接寻址位; C代表PSW中的进位标志

4、位,称为累加位; 加在位地址前面,表示对该位的状态取反; (X)表示寄存器X或单元X中的数据; (X)表示将寄存器X或X存储单元的数作为地址的这个地址单元中的数据。,指令分类,指令分类 按指令长度分:单字节指令、双字节指令、三字节指令。 按指令执行时间分:1机器周期指令、2机器周期指令、4机器周期指令。 按指令的功能分:数据传送指令(28条)、算术运算类指令(24条)、逻辑运算与移位类指令(25条)、控制转移类指令(17条)、位操作类指令(17条)。,寻址方式,寻址方式就是根据指令中给出的地址,寻找操作数的方法和途径,MCS-51系列单片机的寻址方式,1 立即寻址方式,所谓立即寻址就是操作数在

5、指令中直接给出。立即寻址方式的操作数称立即数,立即数只能是源操作数,不能作为目的操作数。立即数有8位立即数和16位立即数。使用时在立即数前加“#”标志。,例: MOV A, #20H MOV DPTR, #20D8H,2直接寻址方式,直接寻址就是操作数直接以单元地址的形式给出。直接地址以存贮单元形式出现。 例如指令: MOV A, 20H,3寄存器寻址方式,寄存器寻址就是操作数在寄存器中。寄存器包括8个工作寄存器RO一R7,累加器A,寄存器B,数据指针DPTR和布尔处理器的位累加器C。 例如指令:MOV A, R2,4寄存器间接寻址方式,MOV A,Ri MOVX A,DPTR 例如:(R1)

6、80H、(80H)=33H,则执行指令MOV A,Ri后,累加器A的内容为33H而不是80H。,寄存器间接寻址是以寄存器中的内容为地址取得操作数的方法。寄存器间接寻址中时,寄存器中存放的是操作数的地址。,寄存器间接寻址使用的寄存器为Ri和DPTR,使用时寄存器 前面加“标志。即以下形式:,5基址加变址寻址方式,基址加变址寻址就是以DPTR或PC为基址寄存器,以A为变址寄存器,以两者内容相加形成16位地址作为操作数地址。 例如指令: MOVC A,A+DPTR,6位寻址方式,位寻址方式就是以位为操作数。MCS-51单片机有相当强的位处理功能,可以对位进行直接操作。 例如指令: MOV C, 4A

7、H,位寻址范围 1)内部RAM的位寻址区 2)可供位寻址的11个专用寄存器,7相对寻址方式,相对寻址是在相对转移指令中,根据地址相对当前PC的偏移量得到操作数的方式。 例如:JZ rel,偏移量rel是一带符号8位二进数的补码数,范围为 -128+127。实际书写程序时先用地址标号代替,在汇编为机器指令时再计算出来 如: JC LOOP, MOV 2FH,#40H MOV A,R0 MOV DPTR,#2020H MOV 45H,P0 MOV A,R1 MOVC A,A+PC JC LOOP, 立即寻址, 寄存器间接寻址, 16位立即寻址, 直接寻址。 寄存器寻址。 基址加变址寻址, 相对寻址

8、。,指出下列每一条指令的寻址方式,判断下列指令是否正确,若不正确请指出错误: MOV A,DPTR MOV DPTR,#03H MOV #80H,R7 MOV B,C,不正确。A是8位寄存器,DPTR为16位寄存器,不匹配。 正确。 不正确。#80H为立即数,不能作为目的地址。 不正确。B为8位字节寄存器,C为1位位累加器,不匹配。,MCS-51 单片机指令系统,对于任何一种计算机,只有理解其指令系统才能清楚该计算机的功能。 学习和使用单片机的一个重要环节就是理解和熟练掌握它的指令系统。,数据传输类指令,单片机片内数据传输功能,内部RAM数据传送指令,指令格式: MOV , 功能:把源操作数所

9、表示的数据传送到目的地址指定的存贮单元之中,而不改变源操作数。即该类指令是“复制”,不是“搬家”。,通用指令,1) 以累加器A为目的地址的指令 MOV A,Rn ;A (Rn) MOV A,direct ;A (direct) MOV A,Ri ;A (Ri) MOV A,#data ;A data,这组指令的功能是把源操作数指定的内容传送到累加器A。源 操作数可以采用寄存器寻址方式、直接寻址、寄存器寻址和 立即寻址4种方式。传送之后,源操作数所指定的内容不变。,例如:(A)=5CH,(R0)=10H,(R5)=47H,(10H)=D5H,(70H)=F2H, 执行以下每条指令后,累加器A中的

10、内容分别为: MOV A,R5 ;(A) 47H MOV A,70H;(A) FZH MOV A,RO;(A) D5H MOV A, 78H;(A) 78H,2) 以Rn为目的地址的指令 MOV Rn,A ;Rn (A) MOV Rn,direct ;Rn (direct) MOV Rn,#data ;Rn data,这组指令的功能是把源操作数指定的内容传送到寄存器Rn。 源操作数可以采用寄存器寻址、直接寻址和立即寻址3种方 式。传送之后,源操作数所指定的内容不变。,例如:若(A)=78H,(R5)=47H,(70H)=F2H,执行以下每条指令后, R5中的内容分别为: MOV R5,A;(R

11、5)78H MOVR5,70H;(R5)FZH MOV R5, A3H :(R5) A3H,MOV direct,A ;direct (A) MOV direct,Rn ;direct (Rn) MOV direct,direct ;direct (direct) MOV direct ,Ri ;direct (Ri) MOV direct ,#data ;direct data,这组指令的功能是把源操作数指定的内容传送到由直接地址 确定的片内存储单元中。源操作数可以采用寄存器寻址方式、 直接寻址、立即寻址寄存器间接寻址等方式。传送之后,源 操作数所指定的内容不变。,例: MOV 50H,R3

12、;50H(R3),若(R3)=18H,则执行指令后(50H)=18H。 MOV TMOD,B;TMOD (B),若(B)=60H,则执行指令后(TMOD)=60H。,3) 以直接地址为目的地址的指令,MOV Ri,A ;(Ri)(A) MOV Ri,direct ;(Ri)(direct) MOV Ri,#data ;(Ri)data,4)以寄存器间接地址为目的的地址的指令,这组指令的功能是把源操作数指定的内容传送到由RO和R1 确定的内容为地址的存储元中。源操作数可以采用寄存器寻 址方式、直接寻址和立即寻址方式。这里的传送是复制过程, 传送之后,源操作数所指定的内容不变。,例如:若 A=70

13、H,R1=30H,(40H)=50H,写出执行的结果。 MOVR1,A;(30H)70H MOVR1,40H;(30H) = 50H,MOV DPTR,#data16 ;DPTR data16 ;DPL data70 ;DPH data158,5) 16位数据传送指令,这是唯一的一条16位立即数的传送指令,其功能是把16位 常数送入DPTR中,高8位DPH,低 8位送 DPL。,例如, MOV DPTR,1234H ;(DPH)12H,(DPL)34H。,习题:设RAM 40H单元的内容为80H,80H单元内容为47H,P1口的输入状态为0FFH,试判断下列程序执行结果。 MOV R0,#40

14、H MOV A,R0 MOV R1,A MOV B,R1 MOV R1,P1 MOV P2,P1,解执行结果为:(A)?,(B)?,(R0)?, (R1)?,(P1)?,(P2)?,(80H)?。,; ; ; ; ; ;,例 设RAM 40H单元的内容为80H,80H单元内容为47H,P1口的输入状态为0FFH,试判断下列程序执行结果。 MOV R0,#40H MOV A,R0 MOV R1,A MOV B,R1 MOV R1,P1 MOV P2,P1,解执行结果为:(A)80H,(B)47H,(R0)40H,(R1)80H,(P1)0FFH,(P2)0FFH,(80H)0FFH。,; R0

15、40H ; A ( 40H)80H ; R1 80H ; B ( 80H)47H ;( 80H) 0FFH ; P2 0FFH,6 访问外部RAM的指令,对片外数据存贮器的访问必须通过累加器A进行 MOVX A,DPTR ;A (DPTR) MOVX A,Ri ;A (Ri) MOVX DPTR,A ;(DPTR) (A) MOVX Ri ,A ;(Ri) (A),以上4条指令中源操作数的寻址方式为寄存器间接寻址。 参与间接寻址的寄存器只有Ri和DPTR两种(3个)。DPTR 为16位寄数器,寻址范围为000H0FFFFH共64KB空间。 而Ri是8位寄数器,只能寻址000FFH低256个单元

16、。,例如,若(R0)=12H,(0012H)=56H,则执行指令“MOVX A,R0” 以后,就把片外数据存储器0012H单元中的数据56H送入累加器A中。 若(DPTR)=3020H,(A)=48H,则执行指令“MOVX DPTR,A” 以后,就将48H送入了片外数据存储器地址为3020H的存储单元。,解 MOV DPTR ,#2000H MOVX A,DPTR MOV 20H, A MOV DPTR ,#2000H MOVX A,DPTR MOV R0,#0FAH MOVX R0,A,例3-6 将片外数据存贮器2000H单元的内容传送到片内的20H单元中;将片外数据存贮器2000H单元的内

17、容传送到片外0FAH单元。,7 程序存贮器向累加器A传送指令,MOVC A,A+PC ;A (A)+(PC) MOVC A,A+DPTR ;A (A)+(DPTR),说明: 程序存贮器只能读出,不能写入, ROM片内、片外是统一编址,该指令既可访问片内,又可访问片外程序存贮器。 该类指令主要用于查表,又称查表指令。应用时,一般以PC或DPTR确定表格的首址,查表时,根据A中不同的内容查找到表格中的相应项,故此时称PC或DPTR为基址寄存器,A为变址寄存器,寻址方式为基址加变址寻址。 使用DPTR作基址寄存器比较灵活,且不易出错。建议尽可能使用MOVCA,DPTR指令。,1)字节交换指令XCH

18、XCH A,Rn ;(A) (Rn) XCH A,direct ;(A) (direct) XCH A,Ri ;(A)( (Ri),8 数据交换指令,例:设(A)=08H,(R7)=0DCH, 执行指令 XCH A, R7 结果为:(A)=0DCH, (R7)=08H,功能:将累加器A中内容与源操作数互换。,例:(A)=80H,(R0)=30H,(30H)=0FH, 执行指令 XCHD A, R 结果为:(A)=8FH, (30H)=00H,2)半字节交换XCHD,XCHD A, Ri ;(A)低4位( (Ri)低4位 功能:累加器A中内容与源操作数低4位交换,高4位不变。,数据写入堆栈称入栈

19、,数据从堆栈中读出称出栈。 栈操作的原则是后进先出,堆栈操作,9 堆栈操作指令,PUSH direct ;SP (SP)+1, (SP) (direct) 功能:将堆栈指针加1后,片内RAM单元内容送进栈顶单元,原RAM单元内容不变。 说明: PUSH指令常用于保护CPU现场。 栈操作是字节指令,每次只能压入或弹出1个字节的内容。 如PUSH DPTR是错误的,但可以用以下两条指令完成DPTR的入栈。 PUSH DPH PUSH DPL,1)入栈指令PUSH,9 堆栈操作指令,POPdirect ; direct (SP), SP (SP)-1 功能:将(SP)内容传送给片内RAM单元,SP内

20、容减1。 说明: 栈操作要注意后进西先出的原则。 POP指令常用于恢复CPU现场,2)出栈指令POP,例 试用栈操作指令完成P0和P1内容的互换。 解 PUSH P0 PUSH P1 POP P0 POP P1,算术运算类指令,在NCS-51指令系统中,算术指令都是针对8位无 符号数的。 算术运算包括加、减、乘、除四则混合运算和属于 加减类型的增1、减1以及十进制调整指令。 算术运算操作会影响程序状态字寄存器PSW中的进位和借位标志C、辅助进位(借位)标志AC、溢出标志位OV和奇偶标志位P等。,1 不带进位加法指令,ADD A,Rn ;A (A)+(Rn) ADD A,direct ;A (A

21、)+(direct) ADD A,#data ;A (A)+ data ADD A,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.带进位加法指令ADCC,ADDC A,Rn ;A (A)+(Rn)+(C) ADDC A,direct ;A (A)

22、+( direct)+(C) ADDC A,#data ;A (A)+data+(C) ADDC A,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.增量指令INC,INC A ;A (A)+1 INC Rn ;Rn (Rn)+1 INC direct ;direct (direct)+1 INC Ri ;(R)i ( (Ri)+1 INC DPTR ;DPTR (DPTR)+1,功能:对A,Rn,内部RAM单元及数据指针DPTR进行加1操作,除INC A影响P标志外,不影响其他标志位。 说明:若原为0FFH,执行该指令后,将变为00H,但不影响进位位C。,4.十进

24、制调整指令DA A,例 在20H、21H中分别存放压缩BCD码55和72,试将两数相加,并计算出结果。,解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 带进位减法指令SUBB,SUBB A,Rn ;A (A) (Rn)(C) SUBB A,direct ;A (A) (direct)(C) SUBB A,Ri ;A (A) (Ri)(C) SUBB A,

25、#data ;A (A) data (C),功能:指令功能是以A中数为被减数,减去操作数,再减去进位,差存在A中。影响PSW中的C,AC,OV,和P位。 说明: MCS-51指令系统中,无不带进位(实为借位)的减法指令。若进行不带借的减法运算,要在运算前使用ADD A,#00H或CLR C等指令将进位标志清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

26、 ;高字节相减 MOV 51H,A 说明:多字节相减,从低字节开始,最低字节相减时,应先将进位位清0。,6 减1指令DEC,DEC A ;A (A)-1 DEC Rn ;Rn (Rn)-1 DEC direct ;direct (direct)-1 DEC Ri ;(Ri) (Ri)-1,功能:减1运算 说明:与加1指令INC命令类似,但无DPTR减1指令。 若原为00H,执行该指令后,将变为0FFH 。 例如(A)=10H, (R5)=00H, (30H)=2FH, (R0)=40H, (40H)=0FFH。 则执行以下指令: DEC A, DEC R5, DEC 30H, DEC R0 结

27、果为:(A)0FH, (R5)=0FFH, (30H)=2EH, (40H)=0FEH, (P)=0,7 乘法指令MUL,MUL AB,功能:累加器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, 执行指令 MUL AB 结果:(A)00H,(B)=14H,即积为1400H, (C)=0,(OV)=1,8 除法指令DIV,DIV AB

28、,功能:两8位无符号数相除,被除数置于累加器A中,除数置于寄存器B中。指令执行后,商存于A中,余数存于B中。 说明:该指令执行后,C清0,若除数为0(即寄存器B内数据为0),(OV)=1,表明除0没有意义;若除数不为0,则(OV)=0。 例:(A)=0FBH,(B)=12H ,则 DIV AB 结果:(A)=0DH,(B)=11H,(C)=0,(OV)=0,9 逻辑运算及移位指令,1.逻辑与指令ANL,ANL A,Rn ;A (A)(Rn) ANL A,direct ;A (A)(direct) ANL A,Ri ;A (A)(Ri) ANL A,#data ;A (A)data ANL di

29、rect,A ;direct (A)(direct) ANL direct,#data ;direct (direct)data,1 逻辑运算指令,说明:逻辑运算是按位进行的,对进位标志位C不产生影响。 该指令用于屏蔽某些位。,例 将R1中的低4位清0,高4位不变。 解 MOV A,#11110000B ANL A, R1 MOV R1,A,结果为:(A)=62H,例:设(A)=7AH, (20H )=0E6H,执行指令 ANL A, 20H,2.逻辑或指令ORL,ORL A,Rn ;A (A)(Rn) ORL A,direct ;A (A) (direct) ORL A,Ri ;A (A)

30、(Ri) ORL A,#data ;A (A) data ORL direct, A ;direct (A) (direct) ORL direct, #data ;direct (direct) data,例 将片外RAM 2000H单元的0、1位置1,2、3位清0,其它位不变。 解 MOV DPTR, # 2000H MOVX A,DPTR ORL A,#00000011B ANL A,#11110011B MOV DPTR,A,3.逻辑异或指令XRL,XRL A,Rn ;A (A) (Rn) XRL A,direct ;A (A) (direct) XRL A,Ri ;A (A) (Ri

31、) XRL A,#data ;A (A) data XRL direct,A, ;direct (direct) (A) XRL direct,#data ;direct (direct) data,说明:若与0进行异或运算,结果保持不变; 若与1进行异或运算,结果取反; 自身异或等效于清0。 例如 XRL A, A 结果为:(A)0,例 将20H单元内容1、3、5、7位保持不变,0、2、4、6位取反。,解XRL 20H, #01010101B 若 (20H)=11110110 则执行指令:,结果为(20H)=10100011B,4.累加器清0指令 CLR,CLR A,CPL A,5.累加器取

32、反指令 CPL,例如(A)0E6H执行CPL A ,结果为:(A)=19H 说明:1)取反即为逻辑非运算。,6 移位指令,循环左移 RL A ;An+1An, A0 A7 循环右移 RR A ;An An+1,A7 A0 进位循环左移 RLC A ;An+1 An ,A0 C, C A7 带进位循环右移 RRC A ;An An+1,A7 C, C A0,例3 分析下列程序段实现的功能: MOV A, direct RL A MOV R1,A RL A RL A ADD A,R1 MOV direct,A,解各指令实现的功能依次如程序右边注译,可知该程序实现的功能是将存贮单元的数乘以10。,;

33、取数设为D0 ;D02 ;(R1)2D0 ;2D02 ;4D02 ;8D0+2D0 ;存数10D0,例 将20H单元存放的无符号数除2。 解 ADD A,#0 ;C清零 MOV A,20H RRC A MOV 20H,A,控制转移类指令,程序的顺序执行是由PC自动加1实现的,要改变程序的执行顺序,实现分支转向,必须通过强迫改变PC值的方法来实现,这就是控制转移类指令的基本功能。控制转移类指令可以控制程序根据不同情况执行不同的程序段,令单片机应用系统做出相应的动作。控制转移类指令使单片机具有“智能化”功能。 51单片机有17条控制转移指令,包括无条件转移指令、条件转移指令及子程序调用返回指令。,

34、1 无条件转移指 今,1.长转移指令LJMP LJMP addr16 ;PC addr16 功能:指令执行后将16位地址(addr16)传送给PC,从而实现程序转移到新的地址开始运行。 说明:该指令可实现64KB范围的任意转移。,AJMP addr11 ;PC (PC)+2,PC100 addr11 功能:addr11的11位数取代该指令执行后程序指针PC的低11位PC100,程序根据PC值转移运行。 说明: addr11为11位无符号数,程序转移最大范围为2KB。 LJMP, STMP, AJMP功能相同,只是转移范围不同。,3. 短转移指令AJMP,SJMP rel ;PC (PC)+2+

35、rel 功能:执行指令后,程序从当前位置向前或向后跳转rel个单元运行。 说明: 该指令中寻址方式称相对寻址。编程时rel 用目的地址标号代替。 rel为8位带符号补码数,因此所能实现的程序转移是双向的,若rel为正数,则向前转移,若rel为负数向后转移。转移相对范围图是-128127H共256个单元; 注译中的“PC (PC)+2+rel”是这样得来的:注译中 “(PC)”是该指令执行前的值,前面的“PC”是指指令执行后的值。因 “SJMP rel”指令存放在ROM中占用2个字节单元(为双字节指令),故程序从指令执行后“当前位置”向前或向后跳转rel个单元,也就是从指令执行前的位置向前或向后

36、跳转2rel个单元。,2.短转移指令SJMP,JMP A+DPTR ;PC (A)+(DPTR) 功能:由A及DPTR的内容决定程序转移的目的地址。 说明: DPTR为基址寄存器,A为变址寄存器,为基址加变址寻址方式。 把DPTR值固定,赋与A不同的值,则可实现程序的多分支转移(散转)。,4.变址转移指令JMP,条件转移指令,1.测试转移指令 1)累加器A判0转移指令 JZ rel ;若(A)=0,转移,PC (PC)+2rel ;若(A)0,顺序执行。 JNZ rel ;若(A)0,转移,PC (PC)+2rel 2)进位位测试转移指令 JC rel ;若(C)=1,转移,PC (PC)+2

37、rel JNC rel ;若(C)=0,转移,PC (PC)+2rel,所谓条件转移就是程序的转移是有条件的,当指令中规定的条则满足时,程序转移,否则程序不转移,仍顺序执行。,3)位单元测试转移指令 JB bit,rel ;若(bit)=1,转移,PC (PC)+3rel JNB bit,rel ;若(bit)=0,转移,PC (PC)+3rel JBC bit,rel ;若(bit)=1,转移,PC (PC)+3rel ;同时将bit位清零。 功能:根据测试条件决定程序是否转移执行。 说明: 若条件满足程序转移执行;若条件不满足,顺序执行。 位单元测试转移指令为三字节指令,故执行该类指令,若

38、条件满足转移时,PC(PC)+3+rel。其它测试转移指令为双字节指令,条件满足转移时,PC(PC)+2+rel。,解 MOV R0,#DATA2 ;赋首址 MOV DPTR,#DATA1 LOOP1:MOVX A,DPTR ;取数 JZ LOOP2 ;判断是否为0 MOV R0,A ;不为0存数 INC R0 ;准备取下一个数 INC DPTR SJMP LOOP1 ;重复取数过程 LOOP2:RET ;为0结束,例3 将外部RAM的一个数据块(首址为DATA1)传送到内部RAM中(首址DATA2),遇到传送的数据为零时停止。,格式为:CJNE , rel CJNE A,direct,rel

39、 ;累加器A与direct单元不等转移。 CJNE A,#data,rel ;累加器A与立即数data不等转移 CJNE Rn,#data,rel ;寄存器Rn与立即数data不等转移 CJNE Ri,#data,rel ;间接寻址的片内RAM单元 与立即数data不等转移,2.比较不相等转移指令CJNE,说明:数据比较转移指令多位三字节指令。 利用该类指令不但可以实现程序的转移功能,也可以用以比较两数值的大小。 指令执行后进位位C的状态相当反映了被比较数与比较数相减有无借位。,解 MOV R0,#DATA LOOP1: CJNE R0,#64H,LOOP2 SJMP LOOP3 LOOP2:

40、 INC R0 SJMP LOOP1 LOOP3: MOV A,R0,例 找出片内RAM的DATA为首址的数据块中第一个等于100的数,并将其地址存入A中。,DJNZ Rn,rel DJNZ direct,rel,功能:寄存器Rn或direct单元内容减1,如果结果为零,则程序顺序执行;如果还没有减到0,则程序转移。 说明:这两条指令主要用于控制程序循环,又称循环指令。预先赋值Rn或RAM单元,以控制循环次数。,3.减1不为0转移指令DJNZ,解分析:这是一个重复操作过程,可以使用循环指令。30H7FH共50H个单元 ,循环次数为50H。 程序如下: MOV R7,#50H MOV R0,#3

41、0H NEXT:MOV R0,#0 INC R0 DJNZ R7,NEXT,例 将内部RAM的30H7FH单元清0。,解 MOV DPTR,#2000H ;数据传送的源地址 PUSH DPL ;保存源地址 PUSH DPH MOV DPTR,#3000H ;数据传送的目的地址 MOV R2,DPL ;保存目的地址 MOV R3,DPH LOOP: POP DPH ;取源地址 POP DPL MOVX A,DPTR ;从源地址单元取数 INL DPTR ;下一个单元源地址 PUSH DPL ;保存源地址 PUSH DPH MOV DPL,R2 ;取目的地址 MOV DPH,R3 MOVX DPT

42、R,A ;将数据存入目的地址 INC DPTR ;下一个目的地址 MOV R2 ,DPL ;保存目的地址 MOV R3,DPH DJNZ 30H,LOOP ;判断数据传送是否结束,例 把从2000H开始的片外RAM单元中的数据传送到从3000H开始单元中,数据个数存放在片内RAM30H单元中。,子程序调用返回指令,1.长调用指令LCALL LCALL addr16 2.绝对调用指令ACALL ACALL addr11 3.返回指令 RET RETI ;中断服务子程序返回指令,空操作指令NOP NOP ;PC (PC)+1,位操作指令,MOV C,bit ;C (bit) MOV bit,C ;bit (C),例 将20H位的内容送至50H位,并要求不改变C的状态。 解 MOV 10H,C ;保护C内容 MOV C,20H MOV 50H,C MOV C,10H ;恢复C内容,1 位传送指令MOV,说明:多数位操作指令由C参与,C称位累加器。 位操作指令寻址方式为位寻址。,位置位/复位指令

温馨提示

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

最新文档

评论

0/150

提交评论