单片机原理与应用第3章课件_第1页
单片机原理与应用第3章课件_第2页
单片机原理与应用第3章课件_第3页
单片机原理与应用第3章课件_第4页
单片机原理与应用第3章课件_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

第3章单片机的指令系统第3章1任务3算术运算类指令3任务5控制转移类指令5任务6位操作类指令6任务1汇编语言1任务2数据传送类指令2任务4逻辑运算类指令4任务3算术运算类指令3任务5控制转移类指令5任务2阶段1指令系统的分类 任务1汇编语言

指令是CPU根据人的意图来执行某种操作的命令。一台计算机所能执行的全部指令的集合称为这个CPU的指令系统。按照指令占用的存储空间可分为:单字节指令(49条)、双字节指令(45条)、三字节指令(17条);按照指令的执行时间可分为:单周期指令(64条)、双周期指令(45条)、四周期指令(2条)。按照指令的功能划分可分为五类:数据传送类指令(29条)、算术运算类指令(24条)、逻辑运算和移位指令(24条)、控制转移类指令(17条)、位操作类指令(17条)。阶段1指令系统的分类 任务1汇编语言3阶段2指令格式汇编语言的指令格式为:[标号:]操作码助记符[目的操作数][,源操作数][;注释]

在汇编语言的指令中,标号代表该指令存放在程序存储器单元的首地址。操作码部分规定了指令所实现的操作功能,以英语助记符表示,如ADD助记符表明该指令是一条加法指令。操作数部分指出了参与操作的数据来源和操作结果存放的目的单元。注释是写给人看的,不会像操作码和操作数一样翻译成0、1代码存入程序存储器。阶段2指令格式汇编语言的指令格式为:4阶段3寻址方式

1.立即寻址

指令中直接给出操作数的寻址方式。立即操作数用前面加有#号的8位或16位数来表示。例如:MOV A,#60H ;A←#60HMOV DPTR,#3400H ;DPTR←#3400HMOV 30H,#40H ;30H单元←#40H上述3条指令执行完后,累加器A中数据为立即数据60H,DPTR寄存器中数据为3400H,30H单元中数据为立即数40H。阶段3寻址方式1.立即寻址 52.直接寻址

指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有SFR寄存器和内部数据RAM。例如:MOVPSW,#20H;PSW←#20HPSW为直接寻址寄存器的符号地址。又如:

MOVA,30H;A←30H内部RAM单元中的内容30H为直接给出的内部RAM的地址。2.直接寻址 指令中直接给出63.寄存器寻址 以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B、DPTR以及R0~R7。例如:

CLR A ;A←0INC DPTR ;DPTR←DPTR+1ADD R5,#20H ;R5←#20H+R53.寄存器寻址 以通用寄存器的内容74.寄存器间接寻址

以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。间接寻址的存储器空间包括内部数据RAM和外部数据RAM。能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。例如:MOV@R0,A;内部RAM(R0)←A

其指令操作过程示意图如图3-1所示。又如:MOVXA,@R1;A←外部RAM(P2R1)

其指令操作过程示意图如图3-2所示。再如:MOVX@DPTR,A;外部RAM(DPTR)←A

其指令操作过程示意图如图3-3所示。4.寄存器间接寻址以寄存器中内容8片内RAM30HR04AHA30H4AH图3-1MOV@R0,A间接寻址示意图片内RAM30HR04AHA30H4AH图3-1MOV9片外RAM34HP26FHA3410H6FH10HR1片外RAM2000HDPTR7DHA2000H7DH图3-2MOVXA,@R1间接寻址示意图图3-3MOVX@DPTR,A间接寻址示意图片外RAM34HP26FHA3410H6FH10HR1片外10

5.变址寻址

变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读的,因此变址寻址只有读操作而无写操作,在指令符号上采用MOVC的形式(如图3-4所示)。例如:MOVCA,@A+DPTR;A←(A+DPTR)又如:MOVCA,@A+PC;A←(A+PC)这条指令与上条指令不同的是,基址寄存器是PC。5.变址寻址 变址寻址只能对11图3-4变址寻址示意图程序存储器2000HDPTR64H(10H)A2010H64H10H2000H图3-4变址寻址示意图程序存储器2000HDPTR64H12

6.相对寻址

以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数(偏移量)形成新的PC值的寻址方式。相对寻址用于修改PC值,主要用于实现程序的分支转移。例如:SJMP08H;PC←PC+2+08H

指令操作示意图如图3-5所示。6.相对寻址 以当前程序计数13程序存储器(2000H)200AHSJMP200AH08H2000H+208HPC2000H图3-5相对寻址示意图程序存储器(2000H)SJMP200AH08H2000H+14

7.位寻址位寻址只能对有位地址的单元作位寻址操作。位寻址其实是一种直接寻址方式,不过其地址是位地址。例如:SETB10H;将10H位置1

若22H单元中存放着数据40H,22H单元的D0位的位地址为10H,执行上述指令后(22H)=41H。又如:MOV32H,C;32H←进位位CORLC,32H;C←C∨32H7.位寻址位寻址只能对有位地址的单15

阶段4常用符号Rn——当前选中的寄存器区中的8个工作寄存器R0~R7(n=0~7)。Ri——当前选中的寄存器区中的2个工作寄存器R0、R1(i=0,1)。direct——8位的内部数据存储器单元中的地址。#data——包含在指令中的8位常数。#data16——包含在指令中的16位常数。addr16——16位目的地址。addr11——11位目的地址。rel——8位带符号的偏移字节,简称偏移量。DPTR——数据指针,可用作16位地址寄存器。 阶段4常用符号Rn——当前选中的寄存器区中的8个工作寄16bit——内部RAM或专用寄存器中的直接寻址位。A——累加器。B——专用寄存器,用于乘法和除法指令中。C——进位标志或进位位,或布尔处理机中的累加器。@——间址寄存器或基址寄存器的前缀,如@Ri,@DPTR。/——位操作数的前缀,表示对该位操作数取反,如/bit。(X),某一个寄存器或者存储单元X中的内容。((X)),由X间接寻址的单元的内容。←,将箭头右边的内容送入箭头左边的地址单元。bit——内部RAM或专用寄存器中的直接寻址位。17任务2数据传送类指令

数据传送类指令共28条,是将源操作数送到目的操作数。指令执行后,源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8种。源操作数可采用寄存器、寄存器间接、直接、立即、变址5种寻址方式寻址,目的操作数可以采用寄存器、寄存器间接、直接寻址3种寻址方式。任务2数据传送类指令数据传送类18直接地址direct累加器A直接地址direct间接地址@Ri寄存器Rn立即数#data寄存器DPTR图3-6MCS-51单片机片内数据传送图阶段1片内RAM数据传送指令

直接地址累加器直接地址间接地址寄存器立即数寄存器图3-6191.以A为目的操作数MOVA,Rn ;A←RnMOVA,direct;A←(direct)MOVA,@Ri ;A←(Ri)MOVA,#data;A←#data2.以Rn为目的操作数MOVRn,A ;Rn←AMOVRn,direct;Rn←(direct)MOVRn,#data;Rn←#data3.以直接地址为目的操作数MOV@Ri,A ;(Ri)←AMOV@Ri,direct;(Ri)←(direct)1.以A为目的操作数20MOV@Ri,#data;(Ri)←#data4.以间接地址为目的操作数MOV@Ri,A ;(Ri)←AMOV@Ri,direct;(Ri)←(direct)MOV@Ri,#data;(Ri)←#data例如:设(30H)=6FH,R1=40H,执行MOV@R1,30H后,30H单元中数据取出送入R1间接寻址的40H单元,(40H)=6FH。5.以DPTR为目的操作数MOVDPTR,#data16;DPTR←#data16例如执行MOVDPTR,#2000H后,(DPTR)=2000H。MOV@Ri,#data;(Ri)←#data21

在8051指令系统中,CPU对片外RAM的访问只能用寄存器间接寻址的方式,且只能通过累加器A进行数据传送。片外RAM数据传送指令仅有4条。MOVXA,@DPTR ;A←(DPTR)MOVX@DPTR,A ;(DPTR)←AMOVXA,@Ri ;A←(P2Ri)MOVX@Ri,A ;(P2Ri)←A阶段2片RAM数据传送指令

在8051指令系统中,CPU对片外RAM的访22

在8051单片机指令系统中,有两条极为有用的查表指令,被用来查阅存放在程序存储器中的表格。MOVCA,@A+DPTR ;A←(A+DPTR)MOVCA,@A+PC ;A←(A+PC)

【例】已知A=30H,DPTR=3000H,程序存储器单元(3030H)=50H,执行MOVCA,@A+DPTR后,A=50H。阶段3查表指令

在8051单片机指令系统中,有两条极为有用的阶23字节交换XCHA,Rn ;A<=>RnXCHA,direct ;A<=>(direct)XCHA,@Ri ;A<=>(Ri)半字节交换XCHDA,@Ri ;A0~3<=>(Ri)0~3SWAPA ;A0~3<=>A4~7阶段4交换指令 字节交换阶段4交换指令 24

所谓堆栈,是指在片内RAM中按“先进后出,后进先出”原则设置的专用存储区。数据的进栈出栈由指针SP统一管理。堆栈的操作有如下两条专用指令:

PUSHdirect;SP←SP+1,(SP)←(direct)

POPdirect;(direct)←(SP),SP←SP-1

其中,PUSH是进栈指令,POP是出栈指令。指令执行过程分别如图3-7、3-8所示。阶段5堆栈操作指令 所谓堆栈,是指在片内RAM中按“先进后出,后进阶25片内RAM30H11H10HSP××片内RAM50H40H11H10HSP××40H30H片内RAM50H40H11H10H50H××SP30H片内RAM40H11H10H34H××SP30H34H34H××××执行前执行前执行前PUSH指令后执行POP指令后图3-7指令PUSH操作示意图图3-8指令POP操作示意图片内RAM30H11H10HSP××片内RAM50H40H126【例】将片内RAM30H单元与40H单元中的内容互换直接地址传送法:

MOV 31H,30HMOV 30H,40HMOV 40H,31HSJMP $间接地址传送法:

MOV R0,#40HMOV R1,#30HMOV A,@R0MOV B,@R1MOV @R1,AMOV @R0,BSJMP $【例】将片内RAM30H单元与40H单元中的内容互换27字节交换传送法:

MOV A,30HXCH A,40HMOV 30H,ASJMP $堆栈传送法:

PUSH 30HPUSH 40HPOP 30HPOP 40HSJMP $字节交换传送法:堆栈传送法:28任务3算术运算类指令

1.加法指令ADDA,Rn ;A←A+RnADDA,direct ;A←A+(direct)ADDA,@Ri ;A←A+(Ri)ADDA,#data ;A←A+#data2.带进位加指令ADDCA,Rn ;A←A+Rn+CADDCA,direct;A←A+(direct)+CADDCA,@Ri ;A←A+(Ri)+CADDCA,#data;A←A+#data+C阶段1加法、减法指令

任务3算术运算类指令 1.加法指令阶段1加法29例如,设A=20H,R0=21H,C=1,执行指令ADDCA,R0后,A=42H。

3.带借位减指令SUBBA,Rn ;A←A-Rn-CSUBBA,direct;A←A-(direct)-CSUBBA,@Ri ;A←A-(Ri)-CSUBBA,#data ;A←A-#data–C例如,设A=39H,R0=20H,(20H)=32H,C=1,执行指令SUBBA,@R0后,A=06H。例如,设A=20H,R0=21H,C=1,执行指令ADDC301.乘法指令MULAB ;BA←A×B例如,A=30H,B=60H,执行MULAB后,A=00H,B=12H。2.除法指令

DIVAB ;A÷B→商在A中,余数在B中例如,A=30H,B=07H,执行DIVAB后,A=06H,B=06H。阶段2乘法、除法指令

1.乘法指令阶段2乘法、除法指令 311.加1指令INCA ;A←A+1INCRn ;Rn←Rn+1INCdirect ;(direct)←(direct)+1INC@Ri ;(Ri)←(Ri)+1INCDPTR ;DPTR←DPTR+1例如,(30H)=22H,执行INC30H后,(30H)=23H。阶段3加1、减1指令

1.加1指令阶段3加1、减1指令 322.减1指令DECA ;A←A-1DECRn ;Rn←Rn-1DECdirect ;direct←(direct)-1DEC@Ri ;(Ri)←(Ri)-1例如,R0=30H,(30H)=22H,执行DEC@R0后,(30H)=21H。2.减1指令33DAA;把A中按二进制相加的结果调整成按BCD码相加的结果例如,A=65H,B=78H,C=0,执行下列语句ADD A,BDA A后,A=43H,C=1。阶段4十进制调整指令

DAA;把A中按二进制相加的结果调整成按BCD码相加34【例】有两个单元压缩BCD码表示的4位十进制数,分别存放在内部数据存储器的70H~71H单元和60H~61H单元,试编写程序求这两个数之和,并将结果存放在30H~32H单元。解:参考程序如下:

MOVA,70H;取第一个数低2位BCD码ADDA,60H;加第二个数低2位BCD码DAA;十进制调整MOV30H,A;保存结果的低2位阶段5算术运算类指令应用实例【例】有两个单元压缩BCD码表示的4位十进制数,分别存放35MOVA,71H;取第一个数高2位BCD码ADDCA,61H;加第二个数高2位BCD码DAA;十进制调整MOV31H,A;保存结果的高2位MOVA,#00HADDCA,#00H;计算进位MOV32H,A;保存进位MOVA,71H;取第一个数高36任务4逻辑运算类指令1.逻辑与指令ANLA,Rn;A←A∧RnANLA,direct;A←A∧(direct)ANLA,@Ri;A←A∧(Ri)ANLA,#data;A←A∧#dataANLdirect,A;direct←(direct)∧AANLdirect,#data;direct←(direct)∧#data阶段1

逻辑“与”“或”“异或”指令任务4逻辑运算类指令1.逻辑与指令阶段1逻辑372.逻辑或指令ORLA,Rn;A←A∨RnORLA,direct;A←A∨(direct)ORLA,@Ri;A←A∨(Ri)ORLA,#data;A←A∨#dataORLdirect,A;direct←(direct)∨AORLdirect,#data;direct←(direct)∨#data2.逻辑或指令383.逻辑异或指令XRLA,Rn;A←A

RnXRLA,direct;A←A(direct)XRLA,@Ri;A←A

(Ri)XRLA,#data;A←A

#dataXRLdirect,A;direct←(direct)AXRLdirect,#data;direct←(direct)#data3.逻辑异或指令391.累加器A清0指令CLRA;A←0将累加器A的内容清0,只影响标志位P。2.累加器A取反指令CPLA;A←/A阶段2

清0、取反指令1.累加器A清0指令阶段2清0、取反指令401.累加器A循环左移指令RLA

2.累加器A循环右移指令RRA

3.累加器A带进位循环左移指令RLCA

4.累加器A带进位循环右移指令RRCA

阶段3循环移位指令1.累加器A循环左移指令阶段3循环移位指令41

【例】在内部RAM30H单元保存有以压缩BCD码表示的2位十进制数,编程将它们拆开,分别保存在内部RAM的31H、32H单元。解:参考程序如下:MOVA,30H;BCD码送累加器ANLA,#0FH;高4位清0,保留低4位MOV31H,A;保存低4位BCD码阶段4逻辑运算类指令应用实例【例】在内部RAM30H单元保存有以压缩BCD码表示的42MOVA,30H;取数据ANLA,#0F0H;低4位清0,保留高4位SWAPA;高低4位交换MOV32H,A;保存高4位BCD码MOVA,30H;取43任务5控制转移类指令

1.绝对转移指令AJMP addr11

;PC10~0

←addr11

2.长转移指令LJMP addr16 ;PC←addr163.相对(短)转移指令SJMP rel ;PC←PC+2+rel4.间接转移指令JMP @A+DPTR ;PC←A+DPTR阶段1无条件转移指令任务5控制转移类指令 1.绝对转移指令阶段1无441.累加器判零转移指令JZrel;PC←(PC)+2,若(A)=0则程序转移PC←(PC)+rel,若(A)≠0则程序

往下顺序执行JNZrel;PC←(PC)+2,若(A)≠0则程序转移PC←(PC)+rel,若(A)=0则程序往

下顺序执行阶段2条件转移指令1.累加器判零转移指令阶段2条件转移指令452.比较转移指令CJNE目的操作数,源操作数,rel;对指定的目的字节和源字节进行比较,若他们的值不相等则转移,转移的目的地址为当前的PC值加3后再加上指令的第三字节偏移量rel,若目的字节内的数据大于源字节内的数据,则将进位标志位CY清0,若目的字节内的数据小于源字节内的数据,则将进位标志位CY置1;若二者相等则往下执行。阶段2条件转移指令2.比较转移指令阶段2条件转移指令463.减1非0转移指令(循环转移指令)DJNZRn,rel;PC←(PC)+2,Rn←(Rn)-1,

若(Rn)≠0则程序转移PC←(PC)+rel,若(Rn)=0则程序往下顺序执行DJNZdirect,rel;PC←(PC)+3,direct←(direct)-1,

若(direct)≠0则程序转移PC←(PC)+rel,若(direct)=0则程序往下顺序执行单片机原理与应用第3章课件47阶段3调用、返回指令1.绝对调用指令ACALLaddr11;PC←PC+2,SP←SP+1,(SP)←PC7~0,SP←SP+1,(SP)←PC15~8,PC10~0←addr112.长调用指令LCALLaddr16;PC←PC+3,SP←SP+1,(SP)←PC7~10,SP←SP+1,(SP)←PC15~8,PC←addr16阶段3调用、返回指令1.绝对调用指令483.返回指令RET;PC15~8←(SP),SP←SP-1

;PC7~0←(SP),SP←SP-1RETI;PC15~8←(SP),SP←SP-1

;PC7~0←(SP),SP←SP-1阶段4空操作指令

NOP;PC←(PC)+13.返回指令49

【例】利用DJNZ指令和NOP指令编写一个循环程序,实现延时1ms,晶振频率为12MHz。解:参考程序如下:DELAY:MOVR3,#0AH;1μsLOOP:MOVR4,#30H;1μsDJNZR4,$;2μsDJNZR3,LOOP;2μsNOP;1μsNOP;1μs阶段5控制转移类指令应用实例【例】利用DJNZ指令和NOP指令编写一个循环程序,实现50NOP;1μsNOP;1μsNOP;1μsRET;2μs总的延时时间为:1+(1+2*48+2)*10+7=998μs,若再加上调用本子程序的调用指令所用的时间2μs共1000μs,即1ms。NOP

温馨提示

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

评论

0/150

提交评论