【教学课件】第三章单片机指令系统.ppt
《【教学课件】第三章单片机指令系统.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第三章单片机指令系统.ppt(114页珍藏版)》请在三一办公上搜索。
1、第三章 单片机指令系统,3.1 指令系统简介,3.2 寻址方式,3.3 数据传送指令,3.5 逻辑运算类指令,3.6 控制转移指令,3.4 算术运算类指令,3.7 位操作指令,3.1 指令系统的简介,MCS-51共有111条指令,指令的长度和执行时间因不同的指令而各不相同。3.1.1 指令格式 指令的三种表示形式 3.1.3 指令的字节数 指令的分类,继续,3.1.1 指令格式,指令格式:既指令的结构形式。,操作码,操作数或操作数地址,举例:MOV A,#0FFH ADD A,R0,(1)二进制的表示形式:(以“累加器的内容+08H”为例)00100100B 操作码 OP(加法)0000100
2、0B 操作数DATA(08H),3.1.2 指令的三种表示形式,(2)十六进制表示方式:它是对二进制形式的一种简化。00100100B 24H 00001000B 08H,(3)指令的“助记符”方式(“汇编格式”):00100100B 24H 00001000B 08H ADD A,#08H 1)是一种由英文单词或字母、数字来表征 指令功能形式。2)“汇编”格式的指令必须把它“翻译”为二 进制形式“机器码”后才能为CPU所识别。3)三种不同的表示方法适用于不同的场合。,二进制表示形式 十六进制表示 汇编格式,3.1.3 指令的字节数,分为单字节、双字节和三字节。一、单字节指令(49条):无操作
3、数:如 INC DPTR;10100011B INC A;00000100B【特点】:操作数隐含在操作码中。含有操作数寄存器名称的单字节指令:如:MOV A,R0 11101000B MOV A,R1 11101001B【特点】:寄存器名以三位数代码的形式在指 令的后三位。,二、双字节指令(46条):指令的操作码和操作数各占一个字节。如:MOV A,#data;01110100B data,n+1,MOV A,#data,双字节指令在程序存储器的存放示意图,三、三字节指令(16条)(1)指令中的操作数为双字节。如:MOV DPTR,#data16;(2)指令中分别包含1个字节的操作数和1个字节
4、的操 作数地址。如:MOV direct,#data 举例:MOV 20H,#0FFH,MOV direct,#data,MOV DPTR,#data16,三字节指令在存储器中存放的方式示意图,指令的字节数与指令的运行时间,指令的字节多是否意味着指令周期就长?,从表中可见,指令的字节数与指令周期不是对等的关系,3.1.4 指令的分类,(1)数据传送类指令:完成数据在单片机内部之间的传送。分为8位数和16位两种。(2)算术运算指令:用于操作数之间的加、减、乘除运算。【特点】:多数情况下:操作数之一在累加器A中,结果也保留在A中,运算结果要影响PSW(进位标志、奇偶和溢出标志等)。(3)逻辑操作和
5、循环移位指令:操作数之间的逻辑加、逻辑与、取反和异或等操作。多数情况下一个操作数在A中,结果也存于A。,(4)控制转移类指令:条件转移、无条件转移,调用和返回。【特点】:通过修改程序指针PC的内容,使CPU转到另一处执行,从而改变程序的流向。(5)位操作指令:位传送、位置位、位运算和位控制转移等操作。【特点】:按位操作而不是按字节的操作。位控转移的判断不是检测某一个字节而是对某一个位进行检测并决定是否进行程序转移。,3.2 寻址方式,在指令的操作数位置上,用于表征、寻找操作数的方式定义为“寻址方式”。在MCS-51单片机中,共使用了七种寻址方式。分别是:(1)寄存器寻址(5)变址寻址;(2)直
6、接寻址(6)相对寻址;(3)立即数寻址(7)位寻址。(4)寄存器间接寻址,继续,3.2.1 立即寻址,指令本身直接含有所需要的8位或16位的操作数。将此数称为“立即数”(使用#标明)。如:MOV A,#5FH;将(8位)立即数送累加器A MOV DPTR,#2000H;16位立即数送DPTR寄存器,3.2.2 直接寻址,指令直接给出了操作数的地址。如:MOV A,3AH;将RAM3AH单元内容送累加器 直接寻址的指令长度是两个或三个字节。,直接寻址示意图,使用直接寻址应注意的三个问题:,(1)指令助记符中direct是用16进制数表示的操作数地址。当地址在SFR区域时,指令用寄存器名表示。如:
7、MOV A,80H 可以写成 MOV A,P0 MOV A,SBUF;串口数据缓冲器数据送A MOV IE,#00H;初始化中断允许寄存器 MOV TH1,#0FEH;为定时器1赋初值,(2)当直接地址在工作寄存器区中时,可使用两种寻址方式来访问。如:MOV A,00H;MOV A,R0;类似的还有累加器A:INC A;寄存器寻址方式(单字节);INC ACC;直接寻址方式(双字节);INC 0E0H;直接寻址方式(双字节)。,片内 RAM(20H-2FH)中的位寻址区结构图,位地址,3.2.3 寄存器寻址,当所需要的操作数在内部某一个寄存器Rn中时,将此寄存器名Rn直接写在指令的操作数的位置
8、上。如:MOV A,R0 MOV 20H,R0 INC R1 ADD A,R3 注意:寄存器寻址方式的指令大多是单字节指令。指令本身并不带有操数,而是含有存放操作数的寄存器的3位代码。以MOV A,Rn为例,使用R7寄存器,所以rrr=111,既指令的机器码为:0EFH,1 1 1 0 1 r r r,返回,(3)在指令系统中:字节地址与位地址是完全 不同的概念。如:MOV A,20H;将RAM的20H单元内容送A MOV C,20H;将位寻址区中的位地址为 20H位内容送PSW 的Cy中。,3.2.4 寄存器间接寻址,指令中含有保存操作数地址的寄存器Ri。MOV A,Ri(i=0、1)如:M
9、OV R0,#3AH;立即数送R0寄存器 MOV A,R0;从RAM的H单元取数送累加器A,3AH,R0,00H,累加器A,1,2,3,使用寄存器间址指令时应注意问题,(1)间址寄存器Ri只能使用R0、R1(i=0、1)。(2)间址方式适用于片内和片外 RAM。对于片内RAM使用Ri,寻址范围为00HFFH。对于片外RAM,可以使用Ri,也可以使用DPTR 做间址寄存器。两者区别在于后者寻址范围为 0000HFFFFH,两者都可以RAM和ROM。(3)间址方式的指令不能访问SFR中的单元。MOV R1,#80H(错误)MOV A,R1(因为80H为SFR的物理地址),MCS-51 片内、片外
10、数据存储器示意图,特殊功能寄存器SFR,通用数据存储器,80H7FH,00H,FFH,片内数据存储器 片外数据存储器256B个字节 64KB个字节,片外数据存储器64KB,0000H,FFFFH,注意:1,访问片内RAM20H存储单元;MOV A,20H2,访问片外RAM存储单元;MOV R0,#20H MOVX A,R03,尽管片内与片外的RAM单元 的00H-FFH地址相重叠,但由于指令的不同不会发生地址混乱。,3.2.5 变址寻址,指令使用DPTR或PC中的内容作为基地址,再与累加器A的内容相加,和作为操作数地址。如:MOVX A,A+PC;PC内容与A的内容相加得操作数地址并将此操作数
11、送A MOVX A,A+DPTR;DPTR内容与A的内容相加得操作数地址并将此操作数送A,变址指令适用于对ROM存储器得访问,查表。【举例】:已知ROM中0302H 单元有一个数x,现要把它送到累加器A中,试编程。MOV DPTR,#0300H;立即数送DPTR MOV A,#02H;立即数送累加器A MOVC A,A+DPTR;从ROM的0302单元取数送A,变址寻址示意图,02H,0300H,ALU,0302H,累加器A,DPTR,0300H+02H0302H,MOVC A,A+DPTR,3.2.6 相对寻址,相对转移指令在执行中是将PC值与指令中的8位偏移量进行相加,形成指令要转移的目标
12、地址。SJMP rel由指令中有一个8位偏移量 rel 为带符号位的补码,所以控制程序转移的范围为+127-128。,例如:SJMP 54H;(80H、54H),54H,2002H,ALU,累加器A,PC,2002H+54H2056H,相对寻址使用中应注意的问题,1,CPU进行地址计算时,PC取值是执行本指令后的地址值。以上面的例子说明:指令本身的首地址是2000H,执行完后变为2002H(既下一条指令的首地址)。如果使用三字节的相对转移指令,则PC=PC+3。,2,偏移量的计算:rel=目标地址-源地址-2(2字节指令)结果用补码的形式书写。为了减少计算偏移量的计算,汇编程序允许使用“符号地
13、址”的方式代替偏移量。如:SJMP loop1 3,如果转移地址的范围超过相对寻址的范围(如:-127+128)时,就要采用别的方式法,否则在编译时,提示出错。,3.2.7 位寻址,在位寻址指令(位操作指令)中使用的位地址。单片机在控制、检测的应用中,系统的输入、输出数据有很多属于开关量信号。这些开关量信号以 bit-“位”的形式进行各种运算、处理和存储的。,【举例】:SETB 20H;将位地址为20H的位置1 SETB 90H;将P1口的d0位置1 第二例中,完全可以使用下面的指令格式:SETB P1.0;将P1口的d0位置1 类似还有:MOV C,ACC.7;将累加器中的d7位送PSW的c
14、y,3.3 数据传送指令,3.3.0 传送指令的特点3.3.1 内部数据传送类指令3.3.2 外部数据传送类指令3.3.3 堆栈操作指令3.3.4 数据交换指令,功能是将数据在累加器、片内的RAM、SFR及片外ROM、RAM之间进行传送。必须指定被传送数据的源地址和目标地址。在传送过程中,源地址的内容不被改变。传送类指令除了以累加器A为目标的传送对PSW的P有影响外,其余的传送类指令对PWS一概无影响。,【举例】:MOV A,R0;将R0寄存器中的数据送 累加器A中(注意寻址方式),指令通式:MOV,3.3.0 传送指令的特点,3.3.1 内部数据传送类指令,(1)以累加器为目的操作数的指令,
15、(2)以寄存器Rn为目的操作数的指令,(3)以寄存器间接地址为目的字节传送指令,(4)以直接地址为目的操作数的指令,(5)16位数据传送指令,(1)以累加器为目的操作数的指令(4条),MOV A,Rn;RnA MOV A,direct;(direct)A MOV A,Ri;(Ri)A MOV A,#data;dataA,(2)以寄存器Rn为目的操作数的指令(3条),MOV Rn,AMOV Rn,directMOV Rn,#data,(3)以寄存器间接地址为目的字节传送指令(3条),MOV Ri,A;A(Ri)MOV Ri,direct;(direct)(Ri)MOV Ri,#data;data
16、(Ri)例:MOV R0,A MOV R1,20H MOV R0,#34H,(4)以直接地址为目的操作数的指令(5条),MOV direct,A MOV direct,Rn MOV direct1,direct2 MOV direct,Ri MOV direct,#data 这组指令功能是把源操作数指定的内容送入由直 接地址指出的片内存储单元。例:MOV 20H,A MOV 20H,R1 MOV 20H,30H MOV 20H,R1 MOV A0H,#34H MOV P2,#34H,(5)16位数据传送指令(1条),MOV DPTR,#data16,(6)查表指令(2条),MOVCA,A+DP
17、TR;A(A)+(DPTR)MOVCA,A+PC;A(A)+(PC),已知内存单元40H中有一个09范围内的数,用查表指令编出能查出该数立方值的程序。设立方表表头地址为0200H。程序及执行后的结果如下:MOV A,40H MOV DPTR,#LAB MOVC A,A+DPTR LAB:DB 0,1,8,27,64 若(40H)为2,查表得8并存于A中,(7)内部数据传送类指令的使用,在使用传送指令时,可以根据实际情况选用恰当寻址方式。但不能根据主观意愿去“创造”指令。例如:要将R0中数据传送到R1中。如何使用指令去完成上面操作?MOV R1,R0 是否可以?只能使用:1,MOV A,R0 或
18、:2,MOV 01H,00H MOV R1,A,MCS-51内部数据传送类指令方式图,累加器A,direct直接寻址,Ri间址,Rn寄存器,Data立即数,返回上一次,以累加器A为目的寄存器的传送指令会影响PSW中的奇偶位P,而其余的指令对PSW均无影响。要会正确地估计指令的字节。【举例】:MOV A,RI()个字节 MOV A,DIRECT()个字节 MOV DIRECT,DATA()个字节 MOV DIRECT2,DIRECT1()个字节,在学习指令系统和编程时开始就要养成一个好的、合理的编程习惯。注意给程序进行正确的注释,这对于阅读、编写和修改程序都是非常重要的。下面就是一些注释的例子:
19、MOV A,30H;(30h)A MOV A,R0;R0 A MOV 40H,30H;(30h)40h MOV A,Ri;(Ri)A,(8)内部传送类指令举例,试编出把30h和40h单元内容进行交换。MOV A,30H;(30h)AMOV 30H,40H;(40h)30h MOV 40H,A;A 40h,累加器A,1,2,3,3.3.2 外部数据传送类指令,(1)16位数传送指令,(2)外部ROM的字节传送,(3)外部RAM的字节传送指令,(1)16位数传送指令,MCS-51指令系统唯一的16位数据传送指令。MOV DPTR,#data16 DPTR是单片机内部SFR中的两个寄存器DPH、DP
20、L组合而成。其中DPH为高八位,DPL为低八位。DPTR是一个专门用于访问外部存储器的间址寄存器。寻址能力为 64K(065535)。,(2)外部ROM的字节传送指令,MOVC A,A+DPTR;A(A+DPTR)MOVC A,A+PC;PC PC+1,A(A+PC)该指令也称为“查表”指令。在ROM中建立 一 个数据表,可以使用DPTR、PC作为数据 表格的基地址。,外部ROM的字节传送指令举例,已知累加器A中存有09范围内的数,试用查表指令编写出查找出该数平方的程序。(1)采用DPTR作基址寄存器:MOV DPTR,#2000H MOVC A,A+DPTR;平方值送A(2)采用PC作基址寄
21、存器:,2000H,2009h,2008h,2007h,2006h,2005h,2004h,2003h,2002h,2001H,ORG 1FFBH1FFBH 74 DATA ADD A,#DATA;(DATA=02H)?1FFDH 83H MOVC A,A+PC;(PC=1FFEH)?1FFEH 80FEH SJMP$2000H 00H DB 0;平方表首址2001H 01H DB 12002H 04H DB 42003H 09H DB 92004H 10H DB 162005H 19H DB 25:2009H 51H DB 81 ENDDATA为MOVC指令首地址与表头地址之间的单元数。,思
22、考:如果在查表指令的后面增加:NOPNOP此时,DATA的值如何?,(3)外部RAM的字节传送指令,MOVX A,Ri MOVX Ri,A MOVX A,DPTR MOVX DPTR,A,外部RAM的字节传送指令举例,已知外部RAM的2040H单元有一个数x,试编程将x送外部RAM的2560H单元。【解】:外部RAM中的数据是不能直接传送的,因此必须使用两次 MOVX 指令完成此操作。ORG 2000H MOV DPTR,#2040H;为16位指针赋值 MOVX A,DPTR;取 x 到累加器A MOV DPTR,#2560H;为16位指针赋值 MOVX DPTR,A;x 送RAM2560h单
23、元 SJMP$;停机 END,3.3.3 数据交换指令,格式:XCH A,Rn;A Rn XCH A,direct;A(direct)XCH A,Ri;A(Ri)XCHD A,Ri;A30(Ri)30,数据交换指令举例(一),举例:已知片外RAM20H单元、内部RAM20H单元分别 有数X和Y,试编程互将两数相交换。MOV R1,#20H;指针赋初值 MOVX A,R1;XA XCH A,20H;交换 A(20H),YA MOVX R1,A;Y(20H)片外RAM,(y)x,20h,20h,累加器A,1,2,3,数据交换指令举例(二),已知:RAM的50H单元有一个09的数,试编程将它 变成相
24、 应的ASCII码。【解】:09的ASCII码是30H39H,两者相差30H。MOV R0,#50H;指针赋值 MOV A,#30H;30HA XCHD A,R0;A30(R0)30,MOV R0,A;A中的ASCII送回50H单元,00110101,00110101,思考:另一种方法实现本题,试编程实现?,1,2,(5)堆栈操作指令,堆栈:一个用来保存程序断点、数据的特殊的存储区域。在MCS-51单片机中,栈区是占用片内RAM的存储空间,具体栈位置由指针SP来确定。1.进栈操作:PUSH direct;(SP)+1SP,(direct)SP 2.出栈操作:POP direct;(SP)dir
25、ect,(SP)-1SP,【注意】:寻址方式为直接寻址或者寄存器寻址,但 PUSH A 是错误的,应当是PUSH ACC或PUSH 0E0H,同理:PUSH R0也错误。进栈是堆栈向上“生长”的过程,即SP+1;出栈则相反。系统上电时,(SP)=07H。SP的值可以根据需要进行修改,以适应具体编程的需要。在确定栈区位置时要考虑对数据区的影响,以避免数据区与栈区冲突。,堆栈操作指令举例(一),例1:BCD码转换为二进制的子程序BCDB中有关堆栈操作的例子。进栈操作是为了保护主程序中相关寄存器中的数据。ORG 0800HBCDB:PUSH PSWPUSH ACCPUSH B:POP BPOP AC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第三 单片机 指令系统
链接地址:https://www.31ppt.com/p-5660721.html