《单片机原理与应用第3章课件.ppt》由会员分享,可在线阅读,更多相关《单片机原理与应用第3章课件.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3章章单片机单片机的指令系统的指令系统任务任务3算术运算类指令算术运算类指令3任务任务5控制转移类指令控制转移类指令5任务任务6位操作类指令位操作类指令6任务任务1汇编语言汇编语言1任务任务2数据传送类指令数据传送类指令2任务任务4逻辑运算类指令逻辑运算类指令4阶段阶段1 指令系统的分类指令系统的分类任务任务1 汇编语言汇编语言指令是CPU根据人的意图来执行某种操作的命令。一台计算机所能执行的全部指令的集合称为这个CPU的指令系统。按照指令占用的存储空间可分为:单字节指令(49条)、双字节指令(45条)、三字节指令(17条);按照指令的执行时间可分为:单周期指令(64条)、双周期指令(45
2、条)、四周期指令(2条)。按照指令的功能划分可分为五类:数据传送类指令(29条)、算术运算类指令(24条)、逻辑运算和移位指令(24条)、控制转移类指令(17条)、位操作类指令(17条)。阶段阶段2 指令格式指令格式汇编语言的指令格式为:汇编语言的指令格式为:标号标号:操作码助记符操作码助记符目的操作数目的操作数,源操作数,源操作数;注释;注释 在汇编语言的指令中,标号代表该指令存放在程序存储器单元的首地址。操作码部分规定了指令所实现的操作功能,以英语助记符表示,如ADD 助记符表明该指令是一条加法指令。操作数部分指出了参与操作的数据来源和操作结果存放的目的单元。注释是写给人看的,不会像操作码
3、和操作数一样翻译成0、1代码存入程序存储器。阶段阶段3 寻址方式寻址方式1.立即寻址立即寻址指令中直接给出操作数的寻址方式。立即操作数用前面加有#号的8位或16位数来表示。例如:MOVA,#60H;A#60H MOVDPTR,#3400H;DPTR#3400H MOV30H,#40H;30H单元#40H 上述3条指令执行完后,累加器A中数据为立即数据60H,DPTR寄存器中数据为3400H,30H单元中数据为立即数40H。2.直接寻址直接寻址指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有SFR寄存器和内部数据RAM。例如:MOV PSW,#20H;PSW#20H PSW为直接寻
4、址寄存器的符号地址。又如:MOV A,30H;A30H 内部RAM单元中的内容30H为直接给出的内部RAM的地址。3.寄存器寻址寄存器寻址以通用寄存器的内容为操作数的寻址方式。以通用寄存器的内容为操作数的寻址方式。通用通用寄存器指寄存器指A、B、DPTR以及以及R0R7。例如:。例如:CLRA;A0INCDPTR;DPTRDPTR+1ADDR5,#20H;R5#20H+R54.寄存器间接寻址寄存器间接寻址以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。间接寻址的存储器空间包括内部数据RAM和外部数据RAM。能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。例如:MOV R0,A
5、 ;内部RAM(R0)A 其指令操作过程示意图如图3-1所示。又如:MOVX A,R1;A外部RAM(P2R1)其指令操作过程示意图如图3-2所示。再如:MOVX DPTR,A;外部RAM(DPTR)A 其指令操作过程示意图如图3-3所示。片内RAM30HR04AHA30H4AH图3-1 MOV R0,A间接寻址示意图片外RAM34HP26FHA3410H6FH10HR1片外 RAM2000HDPTR7DHA2000H7DH图3-2 MOVX A,R1间接寻址示意图 图3-3 MOVX DPTR,A间接寻址示意图5.变址寻址变址寻址 变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读
6、的,因此变址寻址只有读操作而无写操作,在指令符号上采用MOVC的形式(如图3-4所示)。例如:MOVC A,A+DPTR;A(A+DPTR)又如:MOVC A,A+PC ;A(A+PC)这条指令与上条指令不同的是,基址寄存器是PC。图3-4 变址寻址示意图程序存储器2000HDPTR64H(10H)A2010H64H10H2000H6.相对寻址相对寻址 以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数(偏移量)形成新的PC值的寻址方式。相对寻址用于修改PC值,主要用于实现程序的分支转移。例如:SJMP 08H ;PCPC+2+08H 指令操作示意图如图3-5所示。程序存储器(200
7、0H)200AHSJMP200AH08H2000H+208HPC2000H图3-5 相对寻址示意图7.位寻址位寻址 位寻址只能对有位地址的单元作位寻址操作。位寻址其实是一种直接寻址方式,不过其地址是位地址。例如:SETB 10H ;将10H位置1 若22H单元中存放着数据40H,22H单元的D0位的位地址为10H,执行上述指令后(22H)=41H。又如:MOV 32H,C ;32H进位位C ORL C,32H ;CC32H阶段阶段4 常用符号常用符号Rn当前选中的寄存器区中的8个工作寄存器R0R7(n=07)。Ri当前选中的寄存器区中的2个工作寄存器R0、R1(i=0,1)。direct 8位
8、的内部数据存储器单元中的地址。#data包含在指令中的8位常数。#data16包含在指令中的16位常数。addr1616位目的地址。addr1111位目的地址。rel8位带符号的偏移字节,简称偏移量。DPTR数据指针,可用作16位地址寄存器。bit内部RAM或专用寄存器中的直接寻址位。A累加器。B专用寄存器,用于乘法和除法指令中。C进位标志或进位位,或布尔处理机中的累加器。间址寄存器或基址寄存器的前缀,如Ri,DPTR。/位操作数的前缀,表示对该位操作数取反,如/bit。(X),某一个寄存器或者存储单元X中的内容。(X),由X间接寻址的单元的内容。,将箭头右边的内容送入箭头左边的地址单元。任务
9、任务2 数据传送类指令数据传送类指令数据传送类指令共28条,是将源操作数送到目的操作数。指令执行后,源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的助记符 有 MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8种。源操作数可采用寄存器、寄存器间接、直接、立即、变址5种寻址方式寻址,目的操作数可以采用寄存器、寄存器间接、直接寻址3种寻址方式。直接地址direct累加器A直接地址direct间接地址Ri寄存器Rn立即数#data寄存器DPTR图3-6 MCS-51单片机片内数据传送图阶段阶段1 片内片内RAM数据传送指令数据传送指令1以以A为目的操作数为目的操作
10、数MOV A,Rn;A RnMOV A,direct ;A(direct)MOV A,Ri;A(Ri)MOV A,#data ;A#data2以以Rn为目的操作数为目的操作数MOV Rn,A;Rn AMOV Rn,direct;Rn(direct)MOV Rn,#data;Rn#data3以直接地址为目的操作数以直接地址为目的操作数MOV Ri,A ;(Ri)AMOV Ri,direct;(Ri)(direct)MOV Ri,#data;(Ri)#data4以间接地址为目的操作数以间接地址为目的操作数MOV Ri,A ;(Ri)AMOV Ri,direct;(Ri)(direct)MOV Ri
11、,#data;(Ri)#data例如:设(例如:设(30H)=6FH,R1=40H,执行,执行MOVR1,30H后后,30H单单元元中中数数据据取取出出送送入入R1间接寻址的间接寻址的40H单元,(单元,(40H)=6FH。5以以DPTR为目的操作数为目的操作数MOV DPTR,#data16 ;DPTR#data16例如执行例如执行MOVDPTR,#2000H后,后,(DPTR)=2000H。在8051指令系统中,CPU对片外RAM的访问只能用寄存器间接寻址的方式,且只能通过累加器A进行数据传送。片外RAM数据传送指令仅有4条。MOVX A,DPTR;A (DPTR)MOVX DPTR,A;
12、(DPTR)A MOVX A,Ri;A (P2Ri)MOVX Ri,A;(P2Ri)A阶段阶段2 片片RAM 数据传送指令数据传送指令在8051单片机指令系统中,有两条极为有用的查表指令,被用来查阅存放在程序存储器中的表格。MOVC A,A+DPTR;A (A+DPTR)MOVC A,A+PC;A (A+PC)【例】已知A=30H,DPTR=3000H,程序存储器单元(3030H)=50H,执行MOVC A,A+DPTR后,A=50H。阶段阶段3 查表指令查表指令字节交换字节交换XCHA,Rn;ARnXCHA,direct;A(direct)XCHA,Ri;A(Ri)半字节交换半字节交换XCH
13、DA,Ri;A03(Ri)03SWAPA;A03A47阶段阶段4 交换指令交换指令所谓堆栈,是指在片内RAM中按“先进后出,后进先出”原则设置的专用存储区。数据的进栈出栈由指针SP统一管理。堆栈的操作有如下两条专用指令:PUSH direct;SPSP+1,(SP)(direct)POP direct;(direct)(SP),SP SP-1 其中,PUSH是进栈指令,POP是出栈指令。指令执行过程分别如图3-7、3-8所示。阶段阶段5 堆栈操作指令堆栈操作指令片内RAM30H11H10HSP片内RAM50H40H11H10HSP40H30H片内RAM50H40H11H10H50HSP30H片
14、内RAM40H11H10H34HSP30H34H34H执行前执行前执行前PUSH指令后执行POP指令后图3-7 指令PUSH操作示意图图3-8 指令POP操作示意图【例例】将片内将片内RAM 30H单元与单元与40H单元中的内容互换单元中的内容互换直接地址传送法:直接地址传送法:MOV31H,30HMOV30H,40HMOV40H,31HSJMP$间接地址传送法:间接地址传送法:MOVR0,#40HMOVR1,#30HMOVA,R0MOVB,R1MOVR1,AMOVR0,BSJMP$字节交换传送法:字节交换传送法:MOVA,30HXCHA,40HMOV30H,ASJMP$堆栈传送法:堆栈传送法
15、:PUSH30HPUSH40HPOP30HPOP40HSJMP$任务任务3 算术运算类指令算术运算类指令1加法指令加法指令ADD A,Rn;A A+RnADD A,direct;A A+(direct)ADD A,Ri;A A+(Ri)ADD A,#data;A A+#data2带进位加指令带进位加指令ADDC A,Rn;A A+Rn+CADDC A,direct;A A+(direct)+CADDC A,Ri;A A+(Ri)+CADDC A,#data;A A+#data+C阶段阶段1 加法加法、减法指令减法指令例如,设例如,设A=20H,R0=21H,C=1,执行指令,执行指令 ADDC
16、,R0后,后,A=42H。3带借位减指令带借位减指令SUBB A,Rn;A A-Rn-CSUBB A,direct;A A-(direct)-CSUBB A,Ri;A A-(Ri)-CSUBB A,#data;A A-#data C例如,设例如,设A=39H,R0=20H,(,(20H)=32H,C=1,执行指令执行指令 SUBB,R0后,后,A=06H。1乘法指令乘法指令MUL AB;BA AB例例如如,A=30H,B=60H,执执行行 MUL AB 后后,A=00H,B=12H。2除法指令除法指令DIV AB;AB商在A中,余数在B中例例如如,A=30H,B=07H,执执行行 DIV AB
17、 后后,A=06H,B=06H。阶段阶段2 乘乘法法、除法、除法指令指令1加加1指令指令INC A;A A+1INC Rn;Rn Rn+1INC direct;(direct)(direct)+1INC Ri;(Ri)(Ri)+1INC DPTR;DPTR DPTR+1例如,(例如,(30H)=22H,执行,执行 INC 30H 后,后,(30H)=23H。阶段阶段3 加加1、减、减1指令指令2减减1指令指令DEC A;A A-1DEC Rn;Rn Rn-1DEC direct;direct(direct)-1DEC Ri;(Ri)(Ri)-1例例如如,R0=30H,(30H)=22H,执执行
18、行 DEC R0 后,(后,(30H)=21H。DAA;把把A中中按按二二进进制制相相加加的的结结果果调调整整成成按按BCD码相加的结果码相加的结果例如,例如,A=65H,B=78H,C=0,执行下列语句执行下列语句ADD A,BDAA后,后,A=43H,C=1。阶段阶段4 十进制调整指令十进制调整指令 【例例】有有两两个个单单元元压压缩缩BCD码码表表示示的的4位位十十进进制制数数,分分别别存存放放在在内内部部数数据据存存储储器器的的70H71H单单元元和和60H61H单单元元,试试编编写写程程序序求求这这两两个个数数之之和和,并并将将结结果存放在果存放在30H32H单元。单元。解:参考程序
19、如下:解:参考程序如下:MOVA,70H;取第一个数低;取第一个数低2位位BCD码码ADDA,60H;加第二个数低;加第二个数低2位位BCD码码DAA;十进制调整;十进制调整MOV30H,A;保存结果的低;保存结果的低2位位阶段阶段5 算术运算类指令算术运算类指令应用应用实例实例MOVA,71H;取第一个数高;取第一个数高2位位BCD码码ADDCA,61H;加第二个数高;加第二个数高2位位BCD码码DAA;十进制调整;十进制调整MOV31H,A;保存结果的高;保存结果的高2位位MOVA,#00HADDCA,#00H;计算进位;计算进位MOV32H,A;保存进位;保存进位任务任务4 逻辑运算类指
20、令逻辑运算类指令1逻辑与指令逻辑与指令ANL A,Rn ;A A RnANL A,direct ;A A(direct)ANL A,Ri ;A A (Ri)ANL A,#data ;A A#dataANL direct,A ;direct(direct)AANL direct,#data;direct(direct)#data阶段阶段1 逻辑逻辑“与与”“或或”“异或异或”指令指令2逻辑逻辑或或指令指令ORL A,Rn ;A A RnORL A,direct ;A A(direct)ORL A,Ri ;A A (Ri)ORL A,#data ;A A#dataORL direct,A ;dir
21、ect(direct)AORL direct,#data;direct(direct)#data3逻辑逻辑异或异或指令指令XRL A,Rn ;A A RnXRL A,direct ;A A (direct)XRL A,Ri ;A A (Ri)XRL A,#data ;A A#dataXRL direct,A ;direct(direct)AXRL direct,#data;direct(direct)#data1.累加器累加器A清清0指令指令CLR A ;A0将累加器将累加器A的内容清的内容清0,只影响标志位,只影响标志位P。2.累加器累加器A取反指令取反指令CPL A ;A/A阶段阶段2 清
22、清0、取反、取反指令指令1.累加器累加器A循环左移指令循环左移指令RL A2.累加器累加器A循环右移指令循环右移指令RR A3.累加器累加器A带进位循环左移指令带进位循环左移指令RLC A 4.累加器累加器A带进位循环右移指令带进位循环右移指令RRC A阶段阶段3 循环移位指令循环移位指令【例例】在在内内部部RAM 30H单单元元保保存存有有以以压压缩缩BCD码码表表示示的的2位位十十进进制制数数,编编程程将将它它们们拆拆开开,分分别别保保存存在在内内部部RAM的的31H、32H单元。单元。解:参考程序如下:解:参考程序如下:MOVA,30H;BCD码送累加器码送累加器ANLA,#0FH;高;
23、高4位清位清0,保留低,保留低4位位MOV31H,A;保存低;保存低4位位BCD码码阶段阶段4 逻辑逻辑运算类指令运算类指令应用应用实例实例MOVA,30H;取数据;取数据ANLA,#0F0H;低;低4位清位清0,保留高,保留高4位位SWAPA;高低;高低4位交换位交换MOV32H,A;保存高;保存高4位位BCD码码任务任务5 控制转移类指令控制转移类指令1.绝对转移指令绝对转移指令AJMPaddr11;PC100 addr112.长转移指令长转移指令LJMPaddr16;PC addr163.相对(短)转移指令相对(短)转移指令SJMPrel ;PC PC+2+rel4.间接转移指令间接转移
24、指令JMP A+DPTR;PC A+DPTR阶段阶段1 无条件转移指令无条件转移指令1累加器判零转移指令累加器判零转移指令JZrel;PC(PC)+2,若若(A)=0则程序转移则程序转移PC(PC)+rel,若若(A)0则程序则程序往下顺序执行往下顺序执行JNZrel;PC(PC)+2,若若(A)0则程序转移则程序转移PC(PC)+rel,若若(A)=0则程序往则程序往下顺序执行下顺序执行阶段阶段2 条件转移指令条件转移指令2比较转移指令比较转移指令CJNE目的操作数,源操作数,目的操作数,源操作数,rel;对指定的对指定的目的字节和源字节进行比较,若他们的值不相等则目的字节和源字节进行比较,
25、若他们的值不相等则转移,转移的目的地址为当前的转移,转移的目的地址为当前的PC值加值加3后再加上后再加上指令的第三字节偏移量指令的第三字节偏移量rel,若目的字节内的数据大,若目的字节内的数据大于源字节内的数据,则将进位标志位于源字节内的数据,则将进位标志位CY清清0,若目,若目的字节内的数据小于源字节内的数据,则将进位标的字节内的数据小于源字节内的数据,则将进位标志位志位CY置置1;若二者相等则往下执行。;若二者相等则往下执行。阶段阶段2 条件转移指令条件转移指令3减减1非非0转移指令转移指令(循环转移指令循环转移指令)DJNZRn,rel;PC(PC)+2,Rn(Rn)-1,若若(Rn)0
26、则程序转移则程序转移PC(PC)+rel,若若(Rn)=0则程序往下顺序执行则程序往下顺序执行DJNZdirect,rel;PC(PC)+3,direct(direct)-1,若若(direct)0则程序转移则程序转移PC(PC)+rel,若若(direct)=0则程序往下顺序执行则程序往下顺序执行阶段阶段3 调用、返回指令调用、返回指令1绝对调用指令绝对调用指令ACALL addr11;PC PC+2,SPSP+1,(SP)PC70,SPSP+1,(SP)PC158,PC100addr112长调用指令长调用指令LCALL addr16;PCPC+3,SPSP+1,(SP)PC710,SPSP
27、+1,(SP)PC158,PCaddr163返回指令返回指令RET;PC158(SP),),SPSP-1 ;PC70(SP),),SPSP-1RETI;PC158(SP),),SPSP-1 ;PC70(SP),),SPSP-1阶段阶段4 空操作指令空操作指令NOP;PC(PC)+1【例例】利利用用DJNZ指指令令和和NOP指指令令编编写写一一个个循循环环程程序序,实现延时实现延时1ms,晶振频率为,晶振频率为12MHz。解:参考程序如下:解:参考程序如下:DELAY:MOVR3,#0AH;1sLOOP:MOVR4,#30H;1sDJNZR4,$;2sDJNZR3,LOOP;2sNOP;1sNO
28、P;1s阶段阶段5 控制转移控制转移类指令类指令应用应用实例实例NOP;1sNOP;1sNOP;1sRET;2s总的延时时间为:总的延时时间为:1+(1+2*48+2)*10+7=998s,若再加上调用本子程序的调用指令所用的时间若再加上调用本子程序的调用指令所用的时间2s共共1000s,即,即1ms。任务任务6 位操作类指令位操作类指令 阶段阶段1 位数据传送指令位数据传送指令MOV C,bit;C(bit)MOV bit,C;bitC阶段阶段2 位逻辑运算指令位逻辑运算指令ANL C,bit;CC(bit)ANL C,/bit;CC()ORL C,bit;CC(bit)ORL C,/bit
29、;CC()阶段阶段3 位位清清0、置、置1指令指令CLR C;C0CLR bit;(bit)0CPL C;CCPL bit;(bit)()SETB C;C1SETB bit;(bit)1 阶段阶段4 位条件转移类指令位条件转移类指令JCrel;若若C=1则转移(则转移(PCPC+2+rel),否则程序顺),否则程序顺序执行序执行JNCrel;若若C=0,则转移(,则转移(PCPC+2+rel),否则程序),否则程序顺序执行顺序执行JBbit,rel;若若(bit)=1则则转转移移(PCPC+3+rel),否否则则程程序序顺序执行顺序执行JNB bit,rel;若若(bit)=0则则转转移移(P
30、CPC+3+rel),否则程序顺序执行),否则程序顺序执行JBC bit,rel ;若若(bit)=1则则PCPC+3+rel,(bit)0;否则程序顺序执行;否则程序顺序执行功功能能:分分别别检检测测指指定定位位是是1还还是是0,若若条条件件符符合合,则则CPU转转向向指指定定的的目目标标地地址址去去执执行行程程序序;否否则则顺顺序序执行下条指令。执行下条指令。【例例】利利 用用 逻逻 辑辑 运运 算算 指指 令令 实实 现现 逻逻 辑辑 关关 系系:Y=(AB)(DE),A、B、D、E、Y均为位变量。均为位变量。解:参考程序如下:解:参考程序如下:MOVC,AORLC,B;ABMOV00H,C;结果暂存于地址;结果暂存于地址00H位位MOVC,D阶段阶段5 位操作位操作类指令类指令应用应用实例实例MOVC,DANLC,E;DEORLC,00H;(AB)(DE)MOVY,C可以将可以将A、B、D、E、Y分别定义为分别定义为P1.0P1.4,连接线路,查看输入输出效果。连接线路,查看输入输出效果。