第9章 单片机的指令系统说明.ppt_第1页
第9章 单片机的指令系统说明.ppt_第2页
第9章 单片机的指令系统说明.ppt_第3页
第9章 单片机的指令系统说明.ppt_第4页
第9章 单片机的指令系统说明.ppt_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

1、MCS-51共有111条指令,可分为5类: (1)数据传送类指令(共29条)分为片内RAM、片外RAM、程序存储器的传送指令、交换及堆栈操作指令。 (2)算数运算类指令(共24条):分为加、带进位加、减、乘、除、加1、减1指令。 (3)逻辑运算及移位类指令(共24条):分为逻辑与、或、异或、移位指令。 (4)布尔变量操作类指令(共17条):分为位变量传送、位变量与、或、位测试转移指令。 (5)控制转移类指令(共17条):分为无条件转移、调用、条件转移和空操作指令。,第9章 单片机的指令系统,9.1 数据传送指令(29条),9.1.1通用传送指令,通用传送指令的助记符为MOV(Move),格式如

2、下: MOV , 此类指令的功能是把源操作数指定的数据传送到目的操作数(目的地址)所指定的存储单元中。MOV指令的传送关系如图9-1所示。,例1 设内部RAM中(50H)=40H,(40H)=10H,P1口作输入口,(P1)=0ABH,问程序执行后各存储器中的数据是什么? MOV R0,#50H ;立即数50H送R0中,(R0)=50H MOV A,R0 ;R0间接寻址,将50H单元内容送A,(A)=40H MOV R1,A ;A送R1,(R1)=40H MOV B,R1 ;R1间接寻址,将40H单元内容送B,(B)=10H MOV R1,P1 ;将P1内容送40H单元,(40H)=0ABH

3、MOV P2,P1 ;将P1内容送P2 ,(P2)=0ABH 执行结果: (R0)=50H,(A)=40H,(R1)=40H (B)=10H,(P1)=0ABH,(40H)=0ABH (P2)=0ABH,任何不符合格式要求的“指令”都是不合法的。,这类指令用于访问片外RAM或扩展的I/O口。 1读写片外RAM指令MOVX (1)用DPTR进行间接寻址的指令 读: MOVX A, DPTR ; A (DPTR) 写: MOVX DPTR, A ; (DPTR) A DPTR为16位数据指针,该指令可以寻址外部RAM的64KB范围(0000H0FFFFH),地址的低8位由P0口输出,高8位由P2口

4、输出,数据通过P0口输入/输出。,9.1.2 特殊传送指令,(2)用Ri进行间接寻址的指令 读:MOVX A, Ri ; (A)(Ri) 写:MOVX Ri, A ; (Ri) A 指令可寻址范围: 当片外RAM小于或等于256个单元,用Ri间接寻址进行数据传送时,8位地址线足够使用。 当片外RAM单元较多时,8位地址线不够用,此时低8位地址在R0或R1中,P0口分时作低8位地址线和数据线;高8位地址由P2口提供,因此P2口应预先设置。 若设计循环程序,则Ri被加到0或减到0时必须考虑对P2口高8位地址进位或借位的影响。,例2 把片外RAM的36H单元中的数据送到片外RAM的1200H单元。

5、分析(36H)(1200H) 程序如下: MOV R1,#36H MOVX A ,R1 MOV DPTR,#1200H MOVX DPTR, A 下面的程序可以实现吗? MOV DPTR, #1200H MOV R1,#36H MOV DPTR,R1 注意:片外RAM之间不能直接传送数据,必须经过累加器A,2.查表指令MOVC(ROM传送指令) MOVC A,A+DPTR ;A(A)+(DPTR) MOVC A,A+PC ;A(A)+(PC) 这两条指令主要用于查表,可以完成从程序存储器中取得数据并送入累加器A的功能。 (1) 第一条指令以DPTR为基址寄存器,查表时DPTR用于存放表格的起始

6、地址。表格起始地址可以设置在64KB程序存储器中的任何位置。 (2)第二条指令以PC为基址寄存器,因A为8位无符号数,故该指令的查找范围是从PC当前值开始的255个地址单元内。 若(DPTR)=3000H,(A)=60H,执行指令“MOVC A,A+DPTR”后,将程序存储器3060H单元的内容送A。,3.数据交换指令 交换类指令完成的传送是双向的,是两个字节间或两个半字节间的双向交换。 特点是只能与累加器A进行交换。 字节交换 XCH A,Rn ;(A)(Rn) XCH A,direct ;(A)(direct) XCH A,Ri ;(A)(Ri) 功能:字节数据交换,实现3种寻址操作数内容

7、与A中内容的互换。 例如,若(R1)=16H,(A)=28H,执行“XCH A,R1”后,(A)=16H,(R1)=28H,半字节交换 XCHD A,Ri ;(A30)(Ri)30) SWAP A ;(A30)(A74) 例如,若(R1)=50H,(50H)=74H,(A)=26H。执行指令“XCHD A,R1”后,(A)=24H,(50)=76H。 再如,若(A)=38H,执行指令“SWAP A”后,(A)=83H。,4.堆栈操作指令(PUSH 、POP) 堆栈操作指令只有两条: 入栈指令用于保护片内某个单元的内容, 出栈指令用于恢复片内某个单元的内容。 通常入栈指令和出栈指令是成对出现的。

8、 入栈: PUSH direct ;SP(SP)+1,(SP) (direct) 出栈: POP direct ;direct (SP),SP (SP)1 入栈操作:首先(SP)+1,然后写入数据; 出栈操作:首先读出数据,然后(SP)1。,图9- 2 堆栈存入/取出数据的操作,如图2-6所示,在堆栈的原始状态下执行一条“PUSH ACC”后,堆栈的变化过程如图9-2(b);在堆栈的原始状态下执行一条“POP ACC”后,堆栈的变化过程如图9-2 (c),例4 设(60H)=X,(70H)=Y,试用堆栈指令实现60H和70H单元内容的互换。 MOV SP,#50H ;设栈底 PUSH 60H

9、;51H(60H),X压入51H单元 PUSH 70H ;52H(70H),Y压入52H单元 POP 60H ;60H(52H),Y弹出进入60H单元 POP 70H ;70H(51H),X弹出进入70H单元 想一想 用数据交换指令如何实现60H和70H单元内容的互换?,9.2 算术运算指令(24条),算术运算指令可以完成加、减、乘、除四则运算以及加1、减1和二-十进制调整操作。 这类指令多与累加器A有关,A常作为目的操作数,即指令运算结果存放在A中。同时它也能充当源操作数。 这类指令大多影响标志位,因而分析指令运算结果和对标志位的影响是本小节的重点。具体影响见表9-1,表9-1 算术运算指令

10、对标志位的影响,说明: 1 .“”表示对应的指令操作影响该标志位;“0”表示相应的指令操作对该标志位清0;“”表示相应的指令操作不影响该标志。 2. 累加器加1(INC A)和减1(DEC A)指令仅影响P标志。,1.不带CY位的加法指令 格式: ADD A,Rn ;A(A)+(Rn) ADD A,direct ;A(A)+(direct) ADD A,Ri ;A(A)+((Ri)) ADD A,#data ;A(A)+ data 功能: 把源操作数与A中内容相加后再送入A中。 在上述4条指令中,参与运算的操作数都是8位二进制数,且其中一个操作数必须是累加器A。,编程人员可以将参与运算的两个操

11、作数视为无符号数(0255),也可以把它们看作是有符号数。若看作是有符号数,则通常采用补码形式(-128+127)。,9.2.1加法指令,计算机总是把操作数当作有符号数(补码形式)看待并影响PSW的相关标志位。影响情况如下: 进位/借位标志CY: 两数和的D7位有进位时,(CY)=1,否则,(CY)=0。 半进位/借位标志AC: 两数和的D3位有进位时,(AC)=1,否则,(AC)=0。 溢出标志OV: 两数和的D7,D6位只有一位有进位时,(OV)=1;否则,(OV)=0,即OV=C6C7。 奇偶标志P: 当累加器A中“1”的个数为奇数时,(P)=1;为偶数时(P)=0。,例5 试分析805

12、1单片机执行下述指令后,累加器A和PSW各标志位的变化。 MOV A,#0A5H ADD A,#0CFH 解: (A)=10100101B + Data=11001111B CY 01110100B C7 C6 AC (CY)=C7=1;(AC)=1;溢出标志(OV)=C7C6=10=1,有溢出;(P)=0。执行结果:(A)=74H。 若为无符号数运算, (CY)=1,表示结果超出(0255)范围。若为带符号数运算,因(-49)+(-91)=-140,超出了(-128+127)的范围,所以OV=1溢出。,2.带CY位加法指令 带CY位加法指令常用于多字节加法运算,格式如下: ADDC A,Rn

13、 ;A(A)+(Rn)+(CY) ADDC A,direct ;A(A)+(direct)+(CY) ADDC A,Ri ;A(A)+((Ri))+(CY) ADDC A,#data ;A(A)+ data +(CY) 功能:把源操作数与A中内容相加后再加上标志位CY的当前值,将和送入A中。 这组指令的操作影响PSW的CY、AC、OV和P标志。 假设当前(CY)=1,(A)=85H,(R0)=97H,执行指令“ADDC A,R0”后,则使(A)=1DH,(CY)=1,(AC)=0,(OV)=1,(P)=0。,3.加1指令 格式: INC A ;A(A)+ 1 INC direct ;direc

14、t(direct)+ 1 INC Rn ;Rn(Rn)+ 1 INC Ri ;(Ri)((Ri))+ 1 INC DPTR ;(DPTR) (DPTR)+1 功能: 把源操作数的内容加1,结果再送回原来的单元。 这些指令仅“INC A”影响奇偶标志P,其余指令都不影响标志位的状态。,4.十进制调整指令 格式: DA A ;若AC=1或A3A09,则A(A)+06H ;若CY=1或A7A49,则A(A)+60H 功能: 通常跟在BCD码加法运算之后,用来对累加器A中刚刚进行的两个BCD码的相加结果进行十进制调整。 使用该指令时应注意以下几点: 本指令使用时跟在ADD或ADDC指令之后。 不能用D

15、A A指令对BCD码减法操作进行直接调整,如需调整可采用十进制补码相加后,再用DA指令调整。 本指令不影响溢出标志位OV 借助标志位可实现多位BCD码加法结果的调整。,例6 分析下面程序段运行后的结果。 MOV A,#78H ADD A,#93H DA A 解:列竖式分析过程如下: (A)=01111000B + data=10010011B 1 00001011B + 00000110B 低四位9,加06H调整 1 00010001B + 01100000B CY=1,加60H调整 1 01110001B 结果为171 则(A)=71H,考虑进位/借位标志(CY)=1,操作结果为171。,9

16、.2.2 减法指令,1.带CY位减法指令 与加法指令不同,减法运算中只有带CY位的减法指令,其格式如下: SUBB A,Rn ;A(A)-(Rn)-(CY) SUBB A,direct ;A(A)-(direct)-(CY) SUBB A,Ri ;A(A)-((Ri))-(CY) SUBB A,#data ;A(A)- data -(CY) 功能: 把累加器A中内容减去指令指定的单元的内容,再减去标志位CY的值,将结果再送回累加器A中。 SUBB指令对PSW中标志位的影响类似于ADDC加法指令。,例7 已知(A)=78H,(CY)=1,问执行完“SUBB A,#0C5H”后A和各标志位的状态。

17、 解:列竖式为: (A)= 01111000B data= 11000101B 1 10110011B 1 减CY 1 10110010B 则(A)=0B2H,(OV)=C7C6=10=1,有溢出,(P)=0,(AC)=0。 不带借位的减法操作如何实现?,2减1指令 格式: DEC A ;A(A)- 1 DEC direct ;direct(direct)- 1 DEC Rn ;Rn(Rn)- 1 DEC Ri ;(Ri)((Ri))- 1 DEC DPTR ;DPTR(DPTR)- 1 功能: 把源操作数的内容减1,结果再送回原来的单元。 这组指令仅“DEC A”影响奇偶标志P,其余指令都不

18、影响标志位的状态。,格式: MUL AB ;累加器A与B寄存器相乘 功能: 将累加器A与寄存器B中的2个无符号8位二进制数相乘,乘积的低8位留在累加器A中,高8位存放在寄存器B中。 运算结果将对OV、CY、P标志位产生影响: 当乘积大于0FFH,即255(B中内容不为0)时,溢出标志位(OV)=1;否则(OV)=0; 标志位CY总是被清0; P的状态由A中的内容决定。 例如:(A)=36H,(B)=03H,执行指令“MUL AB”之后,(A)=0A2H,(B)=00H,(CY)=0,(OV)=0,(P)=1。,9.2.3 乘法指令,9.2.4 除法指令,格式: DIV AB ;累加器A除以寄存

19、器B 功能:累加器A中的位无符号数除以寄存器B中的位无符号数,所得的商存在A中,余数存在B中。 对标志位的影响: 对CY和P标志位的影响与乘法相同; 当除数为0时,除法没有意义,(OV)=1,否则(OV)=0。 例如:(A)=0FBH(十进制是251),(B)=12H(十进制是18),执行指令“DIV AB”之后,(A)=0DH,(B)=11H,(OV)=0,(CY)=0。,9.3 逻辑运算与循环类指令(24条),逻辑运算指令可以完成与、或、异或、取反、清0操作; 循环指令是对累加器A进行循环移位操作,包括向左、向右以及带CY位的移位操作。,9.3.1 逻辑与运算指令,格式1: ANL dir

20、ect,A ;direct(direct)A ANL direct,#data ;direct(direct)data 功能: 源操作数与直接地址指示的单元内容相与,结果送入直接地址指示的单元。 格式2: ANL A, #data ;A(A)data ANL A, direct ;A(A)(direct) ANL A, Rn ;A(A)(Rn) ANL A, Ri ;A(A)(Ri) 功能: 源操作数与A相与,结果送入A中。 例如:(A)=8CH,(R1)=0ABH,执行指令“ANL A,R1”后,(A)=88H,(R1)=0ABH。,9.3.2 逻辑或运算指令,格式1: ORL direct

21、,A;direct(direct)A ORL direct,#data;direct(direct)data 功能: 源操作数与直接地址指示的单元内容相或,结果送入直接地址指示的单元。 格式2: ORL A,#data ;A(A)data ORL A,direct ;A(A)(direct) ORL A,Rn ;A(A)(Rn) ORL A,Ri ;A(A)(Ri) 功能: 源操作数与A相或,结果送入A中。 例如:(A)=0C5H,(R2)=67H,执行指令“ORL A,R2”后,(A)=0E7H。,格式1: XRL direct,A ;direct(direct)A XRL direct,#

22、data ;direct(direct)data 功能: 源操作数与直接地址指示的单元内容相异或,结果送入直接地址指示的单元。 格式2: XRL A,#data ;A(A)data XRL A,direct ;A(A)(direct) XRL A,Rn ;A(A)(Rn) XRL A,Ri ;A(A)(Ri) 功能:源操作数与A相异或,结果送入A中。,9.3.3 逻辑异或运算指令,格式: CLR A ;A 0 CPL A ;A 功能: 分别对A中内容清0和取反,结果仍存入A中。 例如:(A)=7FH,执行指令“CLR A”和“CPL A”后,A中内容分别为00H和80H。,9.3.4 累加器清

23、0和取反指令,逻辑运算指令除了可以进行逻辑运算外,还能完成一些特殊的操作。例如: 1清0 “CLR A”只能对A清0,若要对某一单元如60H单元清0可以有以下几种方法: 方法1 MOV 60H,#00H 方法2 MOV A,60H XRL A,A MOV 60H,A 方法3 ANL 60H,#00H,9.3.5逻辑运算指令的典型应用,2.屏蔽 将某一存储单元的某几位清0,其它位保持不变,称为屏蔽。被屏蔽的位,原来的数值将被取消,被0取代。屏蔽通常用ANL操作实现。 例8 编程实现将P1口低4位的值存入30H单元,屏蔽高4位。 MOV A,P1 ANL A,#0FH MOV 30H,A 3.置1

24、 将某一存储单元的某几位变为高电平1,其它位保持不变。通常用ORL操作实现。,例9 编程实现将P1口低4位的值保持不变,而高4位置1。结果存入30H单元。 MOV A,P1 ORL A,#0F0H MOV 30H,A 4.求反 CPL A只能对A的所有位取反,如果需要对某一寄存器的某些位取反,则通常是利用异或指令来实现。 例10 编程实现将P1口的高4位取反,而低4位保持不变,结果存入40H单元。 MOV A,P1 XRL A,#0F0H MOV 40H,A,9.3.6累加器循环移位指令,格式: RL A ;累加器左环移 RLC A ;带CY的累加器左环移 RR A ;累加器右环移 RRC A

25、 ;带CY的累加器右环移 每条指令的操作过程如图2-7 所示。,图2-7 移位操作示意图,累加器每左移一位相当于乘以2。同理,累加器右移一位相当于除以2,大家可以自己验证。 例11 已知(A)=0ACH=10101100B,(CY)=0,问执行以下程序后(A)=?,(CY)=?。 RL A ;左移A01011001B RRC A ;带CY右移A00101100B,CY=1 则(A)=2CH,(CY)=1 说明: 1.所有对A操作的指令都对标志位P有影响。 2.逻辑运算指令不影响CY、OV、AC。 3“RLC A”和“RRC A”指令对CY和A都有影响。,9.3.7课题与实训3 流水灯及系统脱机

26、运行,一实训目的 1进一步熟悉单片机I/O接口的线路连接。 2学习数据传送指令和移位指令的应用。 3学习单片机输出口的控制 4进一步熟悉仿真器的使用方法。 5学习程序固化及脱机运行的方法。 二课题要求 1用单片机的P1口控制8只LED灯,每次点亮两只,作P1.0 P1.1P1.2 P1.3P1.4 P1.5P1.6 P1.7P1.0 P1.1的循环闪烁,间隔0.2秒。 2将程序固化到一片AT89C51芯片中,连接线路,使其脱机工作。,三背景知识 通过单灯点亮程序,我们已经知道。只要保证每次从P1 口送出的数据中有两个保持低电平(就图9-4电路而言)就可以将相应的灯点亮。,四硬件电路,图9-4

27、流水灯电路,程序的顺序执行是由PC自动加1实现的,要改变程序的执行顺序,实现分支转向,应通过强迫改变PC值的方法来实现,这就是控制转移类指令的基本功能。 80C51的控制转移指令有无条件转移、条件转移及子程序调用与返回等。 9.4.1无条件转移 不规定条件的程序转移称之为无条件转移。这类指令共4条:,9.4 控制转移类指令(17条),1.长转移 LJMP addr16 ;PCaddr16 这是一条3字节指令,指令执行后能把16位地址(addr16)送PC,从而实现程序转移。因转移范围大,可达64KB,因此称之为“长转移”。 例如“LJMP 2600H”就表示程序要转移到2600H单元去。 在修

28、改或调试程序时,常常要插入或删除部分指令或对当前指令所处的位置进行调整,因此,在实际编写程序时通常采用符号地址。如“LJMP NEXT”。,2.短转移 AJMP addr11;PC(PC)+2,PC100addr11 这是一条2字节指令,指令执行时,先将PC的内容加2(这时PC指向的是AJMP的下一条指令),然后把指令中的11位地址码传送到PC100,保持PC1511原来的内容不变。 由于转移的地址是11位(211=2K),故AJMP指令的转移范围是包含AJMP下一条指令在内的2K空间。 与LJMP指令类似,AJMP指令后面最好也用符号地址,但必须保证该符号所处的地址在2KB的寻址范围内。,3

29、.相对转移 SJMP rel ;PC(PC)+2,PC(PC)+rel 这是一条2字节指令,其功能是先计算目的地址,并按计算得到的目的地址实现程序的相对转移。计算公式为: 目的地址=(PC)+2+rel 其中rel为相对偏移量,它本身是一个带符号的8位二进制数的补码形式,取值范围为-128+127(00H7FH对应0+127,80HFFH对应表示-128-1)。因此所能实现的转移是双向的: 如果rel为正数表示正向转移;如果rel为负数则表示反向转移。,例如: LOOP: MOV R1,60H SJMP NEXT ;rel0 NEXT: MOV A,#30H SJMP LOOP ;rel0 ,

30、4.散转移 JMP A+DPTR ; PC(A)+(DPTR) 这是一条1字节转移指令,指令的目的地址由A的内容和DPTR内容之和来确定,即目的地址=(A)+(DPTR)。 例如:有一段程序如下: MOV DPTR,#TABLE JMP A+DPTR TABLE:AJMP NEXT0 AJMP NEXT1 AJMP NEXT2 AJMP NEXT3 当(A)=00H时,程序将转到NEXT0处执行;当(A)=02H时,程序将转到NEXT1处执行;其余类推。,条件转移就是说程序的转移是有条件的。执行条件转移指令时,如果指令中规定的条件满足,则进行程序转移,否则程序顺序执行。条件转移有如下形式: 1

31、. 累加器判0转移 JZ rel;若(A) =0,则PC(PC)+rel JNZ rel ;若(A)0,则PC(PC)+rel 功能: 对累加器A的内容是否为0进行判断并转移。如图2-9所示。,9.4.2条件转移,图2-9 累加器判0转移流程图,指令中目标地址的计算与SJMP指令相同,且最好以地址符号形式出现,指令执行时对标志位无影响。 例如:若累加器的原始内容为00H,则: JNZ LOOP1 ;由于(A)=0,所以程序往下执行 INC A ;(A)=1 JNZ LOOP2 ;由于(A)0,所以程序转向LOOP2处执行,2。数值比较转移 数值比较转移指令把两个操作数进行比较,比较结果作为条件

32、来控制程序是否转移。共有4种形式: CJNE A,direct,rel ;若(A)(direct),则PC(PC)+3+rel CJNE A,#data,rel ;若(A)data,则PC(PC)+3+rel CJNE Rn,#data,rel ;若(Rn)data,则PC(PC)+3+rel CJNE Ri,#data,rel ;若((Ri))data,则PC(PC)+3+rel 数值比较指令是3字节指令,这是80C51指令系统中仅有的4条3个操作数的指令,在程序设计中非常有用。,(1)指令功能程序转移 若左操作数=右操作数,则 程序顺序执行 PC(PC)+3 进位标志清0 CY0 若左操作

33、数右操作数,则 程序转移 PC(PC)+3+rel 进位标志清0 CY0 若左操作数右操作数,则 程序转移 PC(PC)+3+rel 进位标志置1 CY1,(2)指令应用数值比较 在80C51中没有专门的数值比较指令,两个数的数值比较可以利用这4条指令来实现,如: 程序顺序执行,则 左操作数=右操作数 程序转移且(CY)=0,则 左操作数右操作数 程序转移且(CY)=1,则 左操作数右操作数 例如:若(R5)=68H,执行指令“CJNE R5,#60H,L1”后,程序将转移到标号L1处。,3。减1不为0转移 这是一组把减1与条件转移两种功能结合在一起的指令,共2条: (1)寄存器减1不为0转移

34、 DJNZ Rn,rel 这是一条2字节指令,非常有用。其功能如下: 寄存器内容先减1,如所得结果为0,则程序顺序执行;如减1结果不为0,则程序转移。具体表示如下: Rn(Rn)-1 ;若(Rn)0,则PC(PC)+2+rel ;若(Rn)=0,则PC(PC)+2,(2)直接寻址单元减1条件转移 DJNZ direct,rel 这是一条3字节指令,其功能为: 直接寻址单元内容减1,如所得结果为0,则程序顺序执行;如减1结果不为0,则程序转移。具体表示如下: Direct(Direct)-1 ;若(Direct)0,则PC(PC)+3+rel ;若(Direct)=0,则PC(PC)+3 这两条

35、指令主要用于控制程序循环。如预先把寄存器或内部RAM单元赋值循环次数,利用减1条件转移指令,以减1后结果是否为0作为转移条件,即可实现按次数控制循环。,例12 分析以下程序的功能 MOV 50H,#10 CLR A LOOP:ADD A,50H DJNZ 50H,LOOP SJMP $ 解: 该程序执行结果为 (A)=10+9+8+7+6+5+4+3+2+1=37H,1.调用 (1)长调用 LCALL addr16 这是一条3字节指令,调用地址在指令中直接给出,通常以标号形式出现。指令执行后,断点进栈保存,以addr16作地址调用子程序。因此本指令的操作内容可表示为: PC(PC)+3 SP(

36、SP)+1,(SP)(PC)70 SP(SP)+1,(SP)(PC)158 PC addr16,9.4.3 调用与返回,LCALL指令的子程序调用范围是64KB。addr16就是被调用子程序的入口地址,使用比较方便,但3字节指令较长,占用存储空间较多。 例如:(SP)=50H,标号地址START为0200H,标号MM为6000H,执行指令“START:LCALL MM”后(SP)=52H,(51H)=03H,(52H)=02H,(PC)=6000H (2)短调用 ACALL addr11 这是一条2字节指令,被调用子程序的首地址必须设在包含ACALL下一条指令的第一个字节在内的2KB范围内的片

37、内ROM中。,2.返回 RET ;子程序返回 RETI ;中断服务子程序返回 (1)RET RET指令与调用指令成对出现,只是调用指令出现在主程序中,而RET指令则出现在子程序的最后一行。 RET指令执行子程序返回功能,从堆栈中自动取出断点地址送给程序计数器PC,使程序在主程序断点处继续向下执行,可表示为: PC158(SP),SP(SP)-1 PC70(SP),SP(SP)-1 例如:(SP)=57H,(57H)=12H,(56H)=50H,执行指令“RET”后,(SP)=55H,(PC)=1250H,CPU从1250H单元开始执行程序。,(2)RETI RETI指令除具有与RET指令相同的

38、功能外,还有清除中断响应时被置位的优先级状态,开放较低级中断和恢复中断逻辑等功能。 3.空操作 NOP ;PC(PC)+1 这条指令不产生任何控制操作,只是将程序计数器PC的内容加1。该指令在执行时间上要消耗1个机器周期,在存储空间上占用1个字节。因此常用来实现较短的延时。,位操作指令的操作数是字节中的某一位,每位取值只能是0或1,故又称之为布尔变量操作指令。 进行位操作时,以进位标志CY作为位累加器。与字节操作指令中累加器ACC用字符“A”表示相类似,在位操作指令中,位累加器CY要用字符“C”表示。 9.5.1位传送 MOV C,bit;CY(bit) MOV bit,C;bit(CY) 这

39、两条指令可以实现指定位地址的内容与位累加器CY内容的相互传送。执行结果不影响其它标志位。 例如:MOV C,07H ;CY(20H.7),9.5 位操作指令,1清零: CLR C ;CY0 CLR bit ;bit0 2置位: SETB C ;CY1 SETB bit ;bit1 3取反: CPL C ;CY( ) CPL bit ;bit( ) 这组指令分别完成位清“0”、置“1”及取反操作,执行结果不影响其它标志位。 例如:CLR 06H ; 20H.60 SETB P1.0 ;P1.01 CPL 36H ; ,9.5.2 位变量修改指令,1逻辑“与” ANL C,bit ;CY(CY)(

40、bit) ANL C,/bit;CY(CY)( ) 2逻辑“或” ORL C,bit ;CY(CY)(bit) ORL C,/bit;CY(CY)( ) 这组指令将位累加器CY与直接位地址进行逻辑与、逻辑或,操作结果再送回CY。斜杠“/”表示该位取反后再参与运算,但不改变其原值,也不影响其它标志位。,9.5.3 位逻辑运算指令,1判CY转移 JCrel; 若CY=1,则转移(PCPC+2+rel),否则程序顺序执行 JNCrel; 若CY=0,则转移(PCPC+2+rel),否则程序顺序执行 上述2条指令分别检测进位/借位标志位CY是1还是0,若条件符合,则CPU转向指定的目标地址去执行程序;

41、否则,顺序执行下条指令。 2判位变量转移 JBbit,rel; 若(bit)=1,则转移(PCPC+3+rel),否则程序顺序执行 JNBbit,rel; 若(bit)=0,则转移(PCPC+3+rel),否则程序顺序执行,9.5.4 条件转移类指令,上述两条指令分别检测指定位是1还是0,若条件符合,则CPU转向指定的目标地址去执行程序;否则,顺序执行下条指令。对该位进行检测时,不影响原变量值,也不影响标志位。 3判位变量并清0转移 JBCbit,rel; 若(bit)=1,则PCPC+3+rel,(bit)0;否则程序顺序执行 该指令对指定位进行检测,若该位是“1”,将其清0,同时CPU转向

42、指定的目标地址去执行程序;否则,顺序执行下条指令。 该指令常用于对定时/计数器查询方式的操作。,1用位操作指令实现电机控制的特点 80C51的位操作指令,又称布尔代数指令,用作交流电机控制具有如下优点: 程序设计简单:将电工图转化为逻辑图,以指令的形式实现。串联使用“ANL C,bit”指令,并联使用“ORL C,bit”指令,类似于PLC(可编程序控制器)的写法。 容易除错:所用的指令少,因而便于除错。 速度较快:程序较短,占用的字节少,所以执行速度会比较快。 使用的位操作指令都采用直接寻址方式,执行效率较高。,9.5.5 位操作指令用于交流电机的启、停控制,2电动机启、停的基本控制 控制功

43、能 接上电源时,电动机不动作。 按下启动按钮ON时,则电动机起动运转。 超载时,热继电器KR跳脱,电动机停止运转,此时需将KR复位后,按ON才有效。 按下停止按钮OFF时,则电动机立刻停止运转。 输入输出口的控制 :,电工图,图2- 10 电动机启、停的电工图,单片机引脚功能分配 P1.0:接启动按钮ON,当按钮按下时P1.0=1; P1.1:接停止按钮OFF,当按钮按下时P1.1=0; P1.2:接热继电器KR的常闭触头,当电机超载时KR断开,P1.2=0; P2.0:接交流接触器M1的线圈,当线圈M1 有电时,P2.0=0。,软件设计 参考程序如下: ORG 0000H ANL P2,#0

44、0H START:MOV C,P1.0 ORL C,/P2.0 ANL C,/P1.1 ANL C,/P1.2 CPL C MOV P1.0,C AJMP START END,图2-11 等效逻辑电路,学习和应用单片机的一个很重要的环节就是理解和熟练掌握它的指令系统。80C51单片机的指令系统共有111条指令,其指令字节少,执行时间短,位操作指令极为丰富。 指令由操作码和操作数组成。操作码用来规定操作的性质,操作数用于给指令的操作提供数据和地址。单片机寻找操作数地址并将其提取出来的方法称为寻址方式。80C51单片机有7种寻址方式:立即数寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。 本章的学习重点是熟悉和掌握80C51五大类指令的形式、功能和简单应用。前提是记忆。不主张死记硬背,建议“在理解基础上记忆,在多练过程中熟悉,在思考比较下掌握”。可以结合指令助记符的英文含义、书写形式的格式规律来帮助记忆,通过多做习题的方法来熟悉指令。,本 章 小 结,180C51有哪几种寻址方式?试述各种寻址方式所能访问的存储空间。 2访问特殊功能寄存器SFR可以采用哪几种寻址方式? 3指出下列指令中划线操作数的寻址方式。 MOV A,#30H MOV A,90H MOV

温馨提示

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

评论

0/150

提交评论