单片机-江汉大学教案.ppt

上传人:小飞机 文档编号:5937805 上传时间:2023-09-06 格式:PPT 页数:152 大小:840.50KB
返回 下载 相关 举报
单片机-江汉大学教案.ppt_第1页
第1页 / 共152页
单片机-江汉大学教案.ppt_第2页
第2页 / 共152页
单片机-江汉大学教案.ppt_第3页
第3页 / 共152页
单片机-江汉大学教案.ppt_第4页
第4页 / 共152页
单片机-江汉大学教案.ppt_第5页
第5页 / 共152页
点击查看更多>>
资源描述

《单片机-江汉大学教案.ppt》由会员分享,可在线阅读,更多相关《单片机-江汉大学教案.ppt(152页珍藏版)》请在三一办公上搜索。

1、2 MCS-51指令系统及汇编语言程序设计,指令格式寻址方式指令系统程序设计,概述,由构成计算机的电子器件的特性所决定,计算机只能识别二进制代码。这种以二进制代码来描述指令功能的语言,称之为机器语言,用机器语言组成的程序,称为目标程序。计算机就是按照机器语言的指令来完成各种功能操作的,它具有程序简捷、占用存储空间小、执行速度快、控制功能强等特点。一个单片机所需执行指令的集合即为单片机的指令系统。,使用易于阅读和辨认的指令符号来代替机器码,称为助记符,用助记符的形式表示的单片机指令就是汇编语言,为便于记忆和阅读,助记符号通常都使用易于理解的英文单词和拼音字母来表示。单片机使用的机器语言、汇编语言

2、及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。每种单片机都有自己独特的指令系统,那么指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。,MCS-51单片机汇编语言指令的格式,标号:操作码 目的操作数,源操作数;注释例如:LOOP:ADD A,10H;(A)(A)+10H(1)方括号 表示该项是可选项,可有可无。(2)标号是用户设定的符号,它实际代表该指令所在的地址。标号必须以字母开头,其后跟18个字母或数字,并以“:”结尾。(3)操作码是用英文缩写的指令功能助记符。它确定了本条

3、指令完成的操作功能。任何一条指令都必须有该助记符项,不得省略。(4)目的操作数提供操作的对象,并指出一个目标地址,表示操作结果存放单元的地址,它与操作码之间必须以一个或几个空格分隔。(5)源操作数指出的是一个源地址(或立即数),表示操作的对象或操作数来自何处。它与目的操作数之间要用“,”号隔开。(6)注释部分是在编写程序时,为了增加程序的可读性,用户写的对该条指令或该段程序功能的说明。它以分号“;”开头,可以用中文、英文或某些符号来表示,它不存入单片机,只出现在源程序中。,无标号:MOV A,B无目的操作数:PUSH A无源操作数:CLR A既无目的操作数也无源操作数:RET,标号的作用:如软

4、件延时程序:MOV R1,0AH;给R1赋循环初值DELAY:DJNZ R1,DELAY;(R1)(R1)-1,若(R1)0则循环,一些特殊符号的意义,在介绍指令系统前,先了解一些特殊符号的意义,这对今后程序的编写都是相当有用的。Rn当前选中的寄存器区的8个工作寄存器R0R7(n=07)。Ri(i=0,1)当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1direct内部数据存储单元的8位地址。包含0127(255)内部存储单元地址和特殊功能寄存地址。#data指令中的8位常数。#data16指令中的16位常数。addr16用于LCALL和LJMP指令中的16位目的地址,目的地址的空间

5、为64KB程序存储器地址。addr11用于ACALL和AJMP指令中的11位目的地址,目的地址必须放在与下条指令第一个字节同一个2KB程序存储器空间之中。rel8位带符号的偏移字节,用于所有的条件转移和SJMP等指令中,偏移字节对于下条指令的第一个字节开始的-128+127范围内。,间接寄存器寻址或基址寄存器的前缀。/为操作的前缀,声明对该位操作数取反。DPTR 数据指针。bit 内部RAM和特殊功能寄存器的直接寻址位。A 累加器。B 寄存器B。用于乘法和除法指令中。C 进位标志位。(x)某地址单元中的内容。(x)由X寻址单元中的内容。,微型计算机的基本工作原理,微型计算机解题过程举例:计算a

6、+b-c=?,计算a+b-c=?,微型计算机的工作过程,微型计算机的工作过程就是执行程序的过程,而程序由指令序列组成,因此,执行程序的过程,就是执行指令序列的过程,即逐条地从存储器中取出指令并完成指令所指定的操作。由于执行每一条指令,都包括取指、译码和执行三个基本步骤,所以,微型计算机的工作过程,也就是不断地取指令、译码和执行的过程,直到遇到停机指令时才结束机器的运行。,微型计算机工作流程,1.取指令2.取源操作数 3.取目的操作数 4.执行指令,汇编语言程序 对应的机器指令 对应的操作MOV A,#1 10110000 将立即数1传送到寄存器A中 00000001ADD A,#2 00000

7、100 计算两个数的和,结果存放到A中 00000010MOV 08H,A 10100010将A中的数传送到地址单元08H 00001000 00000000HLT 11110100 停机,举例:计算1+2=?,MCS-51的寻址方式,寻址的“地址”即为操作数所在单元的地址,绝大部分指令执行时都需要用到操作数,那么到哪里去取得操作数呢?最易想到的就是告诉CPU操作数所在的地址单元,从那里可取得相应的操作数,这便是“寻址”之意。MCS-51的寻址方式有7种寻址方式:1.立即寻址2.直接寻址3.寄存器寻址4.寄存器间接寻址5.基址寄存器加变址寄存器间接寻址6.相对寻址7.位寻址,1.立即寻址,立即

8、寻址就是把操作数直接在指令中给出,即操作数包含在指令中,指令操作码的后面紧跟着操作数,一般把指令中的操作数称为立即数,因此而得名。立即数可以是8位或16位,用十六进制数表示。为了与直接寻址方式相区别,在立即数前加上“#”符号例如:MOVA,#0EH;(A)0EH这条指令的意义是将0EH这个操作数送到累加器A中。,2.直接寻址,指令中直接给出操作数所在的存储器地址,以供寻址取数或存数的寻址方式称为直接寻址。例如:MOVA,68H;(A)(68H)这条指令的意义是把内部RAM中的68H单元中的数据内容传送到累加器A中。值得注意的是直接寻址方式只能使用8位二进制地址,因此这种寻址方式仅限于内部RAM

9、进行寻址。低128位单元在指令中直接以单元地址的形式给出。对于特殊功能寄存器SFR只能用直接寻址方式访问,而无其它方法。,3.寄存器寻址,寄存器寻址对选定的8个工作寄存器R0R7以及A、B和DPTR进行操作,也就是操作数在寄存器中,因此指定了寄存器就得到了操作数,寄存器寻址的指令中以寄存器的符号来表示寄存器。例如:MOVA,R0;(A)(R0)这条指令的意义是把所用的工作寄存器组中的R0的内容送到累加器A中。值得一提的是工作状态寄存器的选择是通过程序状态寄存器来控制的,在这条指令前,应通过PSW设定当前工作寄存器组。,4.寄存器间接寻址,寄存器中存放的是操作数的地址,也即操作数是通过寄存器指向

10、的地址单元得到的,这便是寄存器间接寻址名称的由来。例如指令:MOVA,R0;(A)(R0)这条指令的意义是R0寄存器指向地址单元中的内容送到累加器A中。假如R0=#56H,那么是将56H单元中的数据送到累加器A中。这里要强调的是:寄存器的内容不是操作数本身,而是操作数的地址。寄存器间接寻址使用所选定寄存器区中的R0和R1作为地址指针,来寻址片内数据存储器RAM(00FFH)的256个单元,但它不能访问特殊功能寄存器SFR。寄存器间接寻址也适用于访问外部数据存储器,此时,用R0、R1或DPTR作为地址指针。寄存器间接寻址用符号“”指明。,例如:MOV R1,#80H;(R1)80H MOV A,

11、R1;(A)(80H),5.基址加变址寄存器间接寻址,基址加变址寄存器间接寻址是以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,将两寄存器的内容相加形成操作数的16位的实际地址。例如:MOVA,A+DPTR MOVXA,A+PC JMPA+DPTR在这三条指令中,A作为偏移量寄存器,DPTR或PC作为变址寄存器,A作为无符号数与DPTR或PC的内容相加,得到访问的实际地址。其中前两条是程序存储器读指令,后一条是无条件转移指令。,6.相对寻址,相对寻址是以当前程序计数器PC值加上指令规定的偏移量rel,而构成实际操作数地址的寻址方法。它用于访问程序存储器,常出现在相对转移指令中。转移的

12、目的地址可参见如下表达式:目的地址=转移指令地址+转移指令字节数+偏移量rel值得注意的是,偏移量是有正负号之分的,偏移量的取值范围是当前PC值的-128+127之间。,若PC=2050H,JZ为双字节指令,则:JZ 08H程序转移的目标地址为:PC+2+rel=2050H+2+08H补=205AHJZ F4H程序转移的目标地址为:PC+2+rel=2050H+2+F4H补=2046H,7.位寻址,在MCS-51单片机中,RAM中的20H2FH字节单元对应的位地址为00H7FH,特殊功能寄存器中的某些位也可进行为寻址,这些单元既可以采用字节方式访问它们,也可采用位寻址的方式访问它们。例如:SE

13、TB PSW.3;(PSW.3)1,综上所述,在MCS-51系列单片机的存储空间中,指令究竟对哪个存储器空间进行操作是由指令操作码和寻址方式确定的。7种寻址方式如表所示。,MCS-51的指令系统,MCS-51共有111条指令,可分为5类:1.数据传送类指令2.算数运算类指令3.逻辑运算及移位类指令4.控制转移类指令5.布尔变量操作类指令,1.数据传送指令,在MCS-51单片机的数据传送指令总共有28条,分为:内部数据传送指令外部数据传送指令程序存储器向累加器A传送数据指令数据交换指令堆栈操作指令,内部数据传送指令,这类指令的源操作数和目的操作数地址都在单片机的内部,可以是片内RAM的地址,也可

14、以是特殊功能寄存器SFR的地址。其指令通式为:MOV,其中,为源操作数,为目的操作数。该指令的功能是把源操作数送到目的操作数单元,源操作数单元中的源操作数不变。按照寻址方式,内部数据传送指令又可以分为立即寻址型、直接寻址型、寄存器寻址型和寄存器间接寻址型等四类。,立即寻址型传送指令,这类指令的特点是源操作数字节是立即数总共有5条指令:MOV A,#data;(A)data MOV Rn,#data;(Rn)data MOV Ri,#data;(Ri)data MOV direct,#data;(direct)data MOV DPTR,#data16;(DPTR)data16这组指令表明,8位

15、立即数可以直接传送到内部数据区RAM的各个位置,并且可把16位立即数直接装入数据指针DPTR。,直接寻址型传送指令,直接传送型指令的特点是指令码中至少含有一个源操作数和目的操作数的直接地址。这类指令共有如下5条:MOV A,direct;A(direct)MOV Rn,direct;Rn(direct)MOV Ri,direct;(Ri)(direct)MOV direct2,direct1;direct2(direct1),这组指令将直接地址所规定的内部RAM单元(片内RAM的00H7FH,SFR的80HFFH单元)内容传送到累加器A,寄存器Rn,并能实现内部数据寄存器RAM之间、特殊功能寄

16、存器SFR之间或SFR与内部RAM之间的直接数据传递。直接传递不需要通过累加器A或者工作寄存器来间接传送,从而提高了数据传送的效率例如:MOV P2,P1;(P2)(P1)该指令的功能是不通过其它寄存器,直接把P1口(口地址90H)的内容传送到P2口(口地址A0H)输出,提高了效率。,寄存器寻址数据传送指令,这类指令总共有如下5条:MOV A,Rn;A Rn MOV Rn,A;Rn A MOV direct,Rn;direct Rn MOV direct,A;direct A 这组指令的功能是把累加器A的内容传送到内部数据区RAM的各个单元,或者把指定工作寄存器R0R7中的内容传送到累加器A或

17、direct所指定的片内RAM的00H7FH单元或特殊功能寄存器SFR中去。但不能用这类指令在内部工作寄存器之间直接传送。例如:不存在MOV R1,R2 这样的指令。,寄存器间接寻址型数据传送指令,这一类指令可以分为如下三条:MOV A,Rn;A(Ri)MOV direct,Ri;(Ri)-direct这三条指令的共同点是Ri存放的不是操作数本身,而是操作数所在存储单元的地址。第一条指令的功能是把中的内容为地址的操作数传送到累加器A中;第二条指令的功能是把累加器A中的操作数传送到以Ri中内容为地址的存储单元;第三条指令的作用是把以Ri中的内容地址的源操作数传送到direct存储单元。,内部RA

18、M间数据传递关系,外部数据传送指令,MCS-51单片机CPU对片外扩展的数据存储器RAM或I/O口进行数据传送,必须采用寄存器间接寻址的方法,通过累加器A来完成。一般数据的传送是通过P0口和P2口完成的,即片外RAM地址总线低8位由P0口送出,高8位由P2口送出,数据总线(8位)也由P0口传送(双向),但与低8位地址总线是分时传送的。,这类数据传送指令共有以下4条单字节指令,指令操作码助记符标志为MOVX。MOVX A,DPTR;(A)(DPTR)MOVX A,Ri;(A)(Ri)MOVX DPTR,A;(DPTR)(A)MOVX Ri,A;(Ri)(A),例如:设外部RAM(0203H)=F

19、FH,分析以下指令执行后的结果。MOV DPTR,0203H;(DPTR)0203H MOVX A,DPTR;(A)(DPTR)MOV 30H,A;(30H)(A)MOV A,0FH;(A)0FHMOVX DPTR,A;(DPTR)(A)执行结果为:(DPTR)=0203H,(30H)=FFH,(0203H)=(A)=0FH。,程序存储器向累加器A传送数据指令,程序存储器向累加器A传送数据指令,又称查表指令。它采用变址寻址方式,把程序存储器(ROM或EPROM)中存放的表格数据读出,传送到累加器A。它共有如下两条单字节指令,指令操作码助记符为MOVC。MOVC A,A+DPTR;(A)(A)+

20、(DPTR)MOVC A,A+PC;(PC)(PC)+1,(A)(A)+(PC),例:在外部ROM/EPROM中,从2000H单元开始依次存放09的平方值:0、1、4、9、81,要求依据累加器A中的值(09)来查找所对应的平方值,分析下述程序的结果。MOV DPTR,2000H;(DPTR)2000H MOV A,09H;(A)09H MOVC A,A+DPTR;(A)(A)+(DPTR)执行结果:(DPTR)=2000H,(A)=51H(81的十六进制数)。,例:仍以外部ROM/EPROM 2000H单元开始存放09的平方值,以PC作为基址寄存器进行查表。解:设MOVC指令所在地址(PC)=

21、1FF0H,则偏移量=2000H-(1FF0H+1)=0FH,相应的程序如下:MOV A,09H;(A)09HADD A,0FH;地址调整MOVC A,A+PC;(A)(A)+(PC)+1)执行结果为:(PC)=1FF1H,(A)=51H。,数据交换指令,数据传送类指令一般都用来将操作数自源地址传送到目的地址,指令执行后,源地址的操作数不变,目的地址的操作数则修改为源地址的操作数。而数据交换指令其数据作双向传送,涉及传送的双方互为源地址、目的地址,指令执行后各方的操作数都修改为另一方的操作数。因此,两操作数均未冲掉、丢失。,数据交换类指令共有如下5条指令:XCH A,direct;(A)(di

22、rect)XCH A,Ri;(A)(Ri)XCH A,Rn;(A)(Rn)XCHD A,Ri;(A30)(Ri)30)SWAP A;(A74)(A30),例:设(R0)=30H,(30H)=4AH,(A)=28H,则:执行 XCH A,R0 结果为:(A)=4AH,(30H)=28H 执行 XCHD A,R0 结果为:(A)=2AH,(30H)=48H 执行 SWAP A 结果为:(A)=82H,堆栈操作类指令,堆栈操作有进栈和出栈操作,即压入和弹出数据,常用于保存或恢复现场。该类指令共有如下两条指令:(SP)(SP)+1(SP)(direct)(direct)(SP)(SP)(SP)-1,P

23、USH direct,POP direct,例:若在外部ROM/EPROM中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低8位POP DPH;弹出DPTR高8位,(先进后出),数据传送指令 总结,以累加器A为目的操作数的数据传送指

24、令1)MOV A,#data;dataA2)MOV A,Rn;(Rn)A3)MOV A,Ri;(Ri)A4)MOV A,direct;(direct)A 以寄存器Rn为目的操作数的数据传送指令1)MOV Rn,#data;dataRn2)MOV Rn,direct;(direct)Rn3)MOV Rn,A;(A)Rn,以Ri间址单元为目的操作数的数据传送指令1)MOV Ri,#data;data(Ri),2)MOV Ri,direct;(direct)(Ri)3)MOV Ri,A;(A)(Ri)以直接地址direct为目的操作数的数据传送指令1)MOV direct,#data;datadir

25、ect,2)MOV direct2,direct1;(direct1)direct23)MOV direct,Rn;(Rn)direct4)MOV direct,Ri;(Ri)direct5)MOV direct,A;(A)direct,16位立即数传送指令MOV DPTR,#data16;data16DPTR 外RAM数据传送指令 MOVX DPTR,A;(A)(DPTR)MOVX A,DPTR;(DPTR)A MOVX Ri,A;(A)(Ri)MOVX A,Ri;(Ri)A ROM数据传送指令 MOVC A,A+DPTR;(A)+(DPTR)A MOVC A,A+PC;(A)+(PC)A,

26、数据交换指令 XCH A,Rn;(A)(Rn)XCH A,direct;(A)(direct)XCH A,Ri;(A)(Ri)XCHD A,Ri;(A)30(Ri)30 SWAP A;(A)74(A)30 堆栈操作指令 PUSH direct;SP(SP)+1,(SP)(direct)POP direct;(SP)direct,SP(SP)-1,数据传送类指令助记符与操作,利用传送类指令并用多种方法将内部RAM中50H单元的内容与40H单元的内容互换。,方法1:MOV A,50HMOV 50H,40HMOV 40H,A,方法2:MOV A,50HXCH 40H,AMOV 50H,A,方法3:P

27、USH 50HPUSH 40HPOP 50HPOP 40H,用按键控制灯管发光,如图,编程实现:当按键Ki被按下时对应的发光管Li就发光。,GND,按键Ki被按下时,相应端口线P2.i为低电平0若要发光管Li亮,对应的端口线P1.i应为低电平0按键控制发光管,只需将端口线P2.i的数据送给端口线P1.I输出即可。参考程序:ORG 0000H LJMP MAINMAIN:MOV P1,P2 AJMP MAIN,2.算术运算指令,算术运算指令共有24条,算术运算主要是执行加、减、乘、除法四则运算,还有加1、减1操作以及BCD码的运算和调整。虽然MCS-51单片机的算术逻辑单元ALU仅能对8位无符号

28、整数进行运算,但利用进位标志C,则可进行多字节无符号整数的运算。同时利用溢出标志,还可以对带符号数进行补码运算。需要指出的是,除加、减1指令外,这类指令大多数都会对PSW有影响,这在使用中应特别注意。,不带进位位的加法指令ADD ADD A,#data;例:ADD A,#10HADD A,direct;例:ADD A,10HADD A,Rn;例:ADD A,R7ADD A,Ri;例:ADD A,R0用途:将A中的值与其后面的值相加,最终结果否是回到A中。,带进位位的加法指令ADDCADDC A,#dataADDC A,direct ADDC A,Rn ADDC A,Ri用途:将A中的值和其后面

29、的值相加,并且加上进位位C中的值。,说明:由于MCS-51单片机是一种8位机,所以只能做8位的数学运算,但8位运算的范围只有0255,这在实际工作中是不够的,因此就要进行扩展,一般是将2个8位的数学运算合起来,成为一个16位的运算,这样,可以表达的数的范围就可以达到0-65535。如何合并呢?,例:1067H+10A0H先做低8位加法67H+A0H=107H,而107H显然超过了0FFH,因此最终保存在A中的是7,而1则到了PSW中的CY位了。然后再做高8位加法,并加上低8位的进位10H+10H+CY,结果是21H,所以最终的结果是2107H。所以在进行多字节的加法运算或多次的加法运算中应使用

30、ADDC,将低字节的进位考虑进来。,例:双字节无符号数加法(R0 R1)+(R2 R3)(R4 R5)。假设其和不超过16位,其编程如下:MOV A,R1;取被加数低字节ADD A,R3;低字节相加MOV R5,A;保存和低字节MOV A,R0;取高字节被加数ADDC A,R2;两高字节之和加低位进位MOV R4,A;保存和高字节,带借位的减法指令SUBBSUBB A,#dataSUBB A,direct SUBB A,RnSUBB A,Ri说明:没有不带借位的减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将Cy清零即可。,乘法指令 MUL AB此指令的功能是将A和B中的两个8

31、位无符号数相乘,两数相乘结果一般比较大,因此最终结果用1个16位数来表达,其中高8位放在B中,低8位放在A中。在乘积大于FFFFH时,OV置1(溢出),否则OV为0,而CY总是0。例:(A)=4EH,(B)=5DH,执行指令MUL AB后,乘积是1C56H,所以在B中放的是1CH,而A中放的则是56H。,除法指令 DIV AB此指令的功能是将A中的8位无符号数除以B中的8位无符号数(A/B)。结果,商放在A中,余数放在B中,CY和OV都是0。如果在做除法前B中的值是00H,也就是除数为0,那么OV=1。,加1指令 INC AINC RnINC directINC RiINC DPTR用途很简单

32、,就是将后面目标中的值加1。,说明:从结果上看INC A和ADD A,#1差不多,但INC A是单字节,单周期指令,ADD A,#1则是双字节,双周期指令,而且INC A不会影响PSW位ADD A,#1,不会影响CY因此加1指令并不适合做加法,事实上它主要是用来做计数、地址增加等用途。另外,加法类指令都是以A为核心操作数,其中一个数必须放在A中,而运算结果也必须放在A中,而加1类指令的对象则广泛得多,可以是寄存器、内存地址、间址寻址的地址等等。,减1指令 DEC ADEC Rn DEC directDEC Ri与加1指令类似。,十进制调整指令 DA A 在进行BCD码运算时,这条指令总是跟在A

33、DD或ADDC指令之后,其功能是将执行加法运算后存于累加器A中的结果进行调整和修正。十进制调整指令是一条对二十进制的加法进行调整的指令。两个压缩BCD码按二进制相加,必须经过本条指令调整后才能得到正确的压缩BCD码和数,实现十进制的加法运算。由于指令要利用AC、CY等标志才能起到正确的调整作用,因此它必须跟在加法ADD、ADDC指令后面方可使用。,例:双字节压缩BCD码加法。解:设R5(高)、R4(低)为被加数;R3(高)、R2(低)为加数,相加和的结果存入:R6(万)、R5(千、百)、R4(十、个)。参考程序如下:MOV A,R4;被加数十位、个位送入AADD A,R2;十位、个位相加DA

34、A;和的十位、个位调整MOV R4,A;和的十位、个位存入R4MOV A,R5;被加数千位、百位送入AADDC A,R3;千位、百位的和加低位进位DA A;和的千位、百位调整MOV R5,A;和的千位、百位存入R5 MOV A,00H;A清零ADDC A,00H;求和的万位值MOV R6,A;和的万位存入R6,3.逻辑运算和移位指令,逻辑运算和移位指令共有25条,有与、或、异或、求反、左右移位、清0等逻辑操作,有直接、寄存器和寄存器间址等寻址方式。这类指令一般不影响程序状态字(PSW)标志。,循环移位指令RL A;累加器A中的内容循环左移一位,不影响进位标志RR A;累加器A中的内容循环右移一

35、位,不影响进位标志RLC A;累加器A中的内容连同进位CY左移一位RRC A;累加器A中的内容连同进位CY右移一位,累加器半字节交换指令 SWAP A;这条指令是将累加器中的内容高低半字节互换。求反指令 CPL A;这条指令将累加器中的内容按位取反。清零指令 CLR A;这条指令将累加器中的内容清0。,逻辑与操作指令这组指令的作用是将两个单元中的内容按位执行逻辑与并将结果存入累加器或直接地址中。ANL A,direct;ANL A,#data;ANL A,Rn;ANL A,Ri;ANL direct,#data;ANL direct,A;,逻辑或操作指令这组指令的作用是将两个单元中的内容按位执

36、行逻辑或并将结果存入累加器或直接地址中。ORL A,#data;ORL A,direct;ORL A,Rn;ORL A,Ri;ORL direct,#data;ORL direct,A;,逻辑异或操作指令这组指令的作用是将两个单元中的内容按位执行逻辑异或操作并将结果存入累加器或直接地址中。XRL A,#data;XRL A,direct;XRL A,Rn;XRL A,Ri;XRL direct,#data;XRL direct,A;,用P1口实现亮点流动,ORG 0000H LJMP START ORG 30H START:MOV SP,#5FH MOV A,#80H LOOP:MOV P1,

37、A RL A LCALL DELAY LJMP LOOP DELAY:MOV R7,#255D1:MOV R6,#255D2:NOP,NOPNOPNOPDJNZ R6,D2DJNZ R7,D1RETEND,点亮了哪一个灯?,4.控制转移指令,控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间。MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令。这些指令的执行一般都不会对标志位有影响。,无条件转移指令,JMP/SJMP/AJMP/L

38、JMP这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16位地址64KB,绝对转移指令访问的程序存储器空间为11位地址2KB空间。,LJMP addr16;长转移指令,addr16(PC),给程序计数器赋予新值(16位地址)AJMP addr11;短转移指令,(PC)+2(PC),addr11(PC100),程序计数器赋予新值(11位地址),(PC1511)不改变SJMP rel;相对转移指令,(PC)+2+rel(PC)当前程序计数器先加上2再加上8位偏移量给程序计数器赋予新值JMP A+DPTR;间接转移指令,(A)+(DPTR)(PC),累加器

39、所指向地址单元的值加上数据指针的值给程序计数器赋予新值,条件转移指令,程序可利用这组丰富的指令根据当前的条件进行判断,看是否满足某种特定的条件,从而控制程序的转向。JZ rel;(A)=0,(PC)+2+rel(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行JNZ rel;(A)0,(PC)+2+rel(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行,DJNZ Rn,rel;(Rn)-1(Rn),(Rn)0,(PC)+2+rel(PC),工作寄存器Rn减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行DJNZ data,rel;(R

40、n)-1(Rn),(Rn)0,(PC)+2+rel(PC)直接地址单元中的内容减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行,CJNE A,direct,rel;(A)(direct),(PC)+3+rel(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行CJNE A,#data,rel;(A)#data,(PC)+3+rel(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行,CJNE Rn,#data,rel;(Rn)#data,(PC)+3+rel(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏

41、移量所指向的地址,否则程序往下执行CJNE Ri,#data,rel;(Ri)#data,(PC)+3+rel(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行,子程序调用指令,子程序是为了便于程序编写,减少那些需反复执行的程序占用多余的地址空间而引入的程序分支,从而有了主程序和子程序的概念,需要反复执行的一些程序,我们在编程时一般都把它们编写成子程序,当需要用它们时,就用一个调用命令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指令。,子程序调用指令,LCALL addr16;长调用指令,可在64KB空间调用子程序。此时(PC)+

42、3(PC),(SP)+1(SP),(PC7-0)(SP),(SP)+1(SP),(PC15-8)(SP),addr16(PC),即分别从堆栈中弹出调用子程序时压入的返回地址ACALL addr11;绝对调用指令,可在2KB空间调用子程序。此时(PC)+2(PC),(SP)+1(SP),(PC7-0)(SP),(SP)+1(SP),(PC15-8)(SP),addr11(PC10-0),LCALL和ACALL指令类似于转移指令LJMP和AJMP,不同之处在于它们在转移前要把执行完该指令的PC内容自动压入堆栈后,才将addr16(或addr11)送往PC,即把子程序的入口地址装入PC。执行这两条指

43、令不影响标志位。,返回指令,RET;子程序返回指令。此时(SP)(PC15-8),(SP)-1(SP),(SP)(PC7-0),(SP)-1(SP)RETI;中断返回指令,除具有RET功能外,还具有恢复中断逻辑的功能需注意的是:RETI指令不能用RET代替,空操作指令,NOP;(PC)(PC)+1空操作指令是一条单字节单周期指令。它控制CPU不做任何操作,仅仅是消耗这条指令执行所需要的一个机器周期的时间,不影响任何标志,故称为空操作指令。但由于执行一次该指令需要一个机器周期,所以常在程序中加上几条NOP指令用于设计延时程序,拼凑精确延时时间或产生程序等待等。,5.布尔变量操作类指令,布尔处理功

44、能是MCS-51系列单片机的一个重要特征,这是出于实际应用需要而设置的。布尔变量也即开关变量,它是以位(bit)为单位进行操作的。在物理结构上,MCS-51单片机有一个布尔处理机,它以进位标志做为累加位,以内部RAM可寻址的128个为存储位。既然有布尔处理机功能,所以也就有相应的布尔操作指令集。,位传送指令,位传送指令就是可寻址位与位累加器CY之间的传送,指令有两条。MOV C,bit;bitCY,某位数据送CYMOV bit,C;CYbit,CY数据送某位不影响其他寄存器的内容或标志,由于两个寻址位之间没有直接的传送指令,常用上述两条指令并通过C作为中间媒介来进行寻址位间的传送。例如:将内部

45、RAM中20H 单元的第7位(位地址为07H)的内容,送入P1口的P1.0中的程序如下:MOV C,07H;(CY)(07H)MOV P1.0,C;(P1.0)(CY)当(20H)=A3H,(P1)=11111110B时,执行上述指令后修改了P1 口第 0 位,即(CY)=1,(P1)=11111111B。,位置位、复位指令,这些指令对CY及可寻址位进行置位或复位操作,共有四条指令。CLR C;0CY,清CYCLR bit;0bit,清某一位SETB C;1CY,置位CYSETB bit;1bit,置位某一位,例如:将P1 口的P1.7 置位,并清进位位的程序如下:SETB P1.7;(P1.

46、7)1CLR C;(CY)0当(P1)=00001111B时,执行完上述指令后,(P1)=10001111B,(CY)=0。,位运算指令,位运算都是逻辑运算,有与、或、非三种指令,共六条。ANL C,bit;(CY)(bit)CYANL C,/bit;(CY)(bit)CYORL C,bit;(CY)(bit)CYORL C,/bit;(CY)(bit)CYCPL C;(CY)CYCPL bit;(bit)bit,CALL PR2 JMP$PR2:MOV C,P1.1;(CY)(P1.1)ORL C,P1.2;(CY)(P1.1)(P1.2)=A ANL C,P1.0;(CY)(P1.0)A

47、CPL C;(CY)MOV F0H,C;F0H内暂存B MOV C,P1.3;(CY)(P1.3)ANL C,/P1.4;(CY)(P1.3)ORL C,F0H;(CY)BD MOV P1.5,C;运算结果送入P1.5 RET,例 2:利用位逻辑指令,模拟图 3 7 所示硬件逻辑电路功能。参考子程序如下:,位控制转移指令,位控制转移指令是以位的状态作为实现程序转移的判断条件:JC rel;(CY)=1转移,(PC)+2+relPC,否则程序往下执行,(PC)+2PC。JNC rel;(CY)=0转移,(PC)+2+relPC,否则程序往下执行,(PC)+2PC。JB bit,rel;位状态为1

48、转移。JNB bit,rel;位状态为0转移。JBC bit,rel;位状态为1转移,并使该位清“0”。后三条指令都是三字节指令,如果条件满足,(PC)+3+relPC,否则程序往下执行,(PC)+3PC。,JC/JNC这两条指令常和比较条件转移指令CJNE一起使用,先由CJNE指令判别两个操作数是否相等,若相等就顺序执行;若不相等则依据两个操作数的大小置位或清零CY,再由JC 或JNC指令根据CY的值决定如何进一步分支,从而形成三分支的控制模式,如图所示。,有符号数的表示,对于有符号数,机器数常用的表示方法有原码、反码和补码三种。原码:最高有效位为符号位,0表示正数,1表示负数。反码:正数的

49、反码与原码相同;负数的反码由原码除符号位外按位取反获得。补码:正数的补码与原码相同;负数的补码由反码加1获得。数X的原码记作X原,反码记作X反,补码记作X补计算机内部默认采用补码表示有符号数。,设数x的原码记作x原,如机器字长为n,则原码定义如下:在原码表示法中,最高位为符号位(正数为0,负数为1),其余数字位表示数的绝对值。n位原码表示数值的范围是,对应的原码是11110111。0的原码有两种形式。,原码,例如,当机器字长n=8时,+0原=00000000B-0原=27+0=10000000B+8原=00001000B-8原=27+8=10001000B+127原=01111111B-127

50、原=27+127=11111111B 当机器字长n=16时,+0原=0000000000000000B-0原=215+0=1000000000000000B+8原=0000000000001000B-8原=215+8=1000000000001000B,原码表示法简单直观,且与真值的转换很方便,但不便于在计算机中进行加减运算。如进行两数相加,必须先判断两个数的符号是否相同。如果相同,则进行加法运算,否则进行减法运算。如进行两数相减,必须比较两数的绝对值大小,再由大数减小数,结果的符号要和绝对值大的数的符号一致。按上述运算方法设计的算术运算电路很复杂。因此,计算机中通常使用补码进行加减运算,这样

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号