《高职高专《单片机原理及应用》33指令系统.ppt》由会员分享,可在线阅读,更多相关《高职高专《单片机原理及应用》33指令系统.ppt(46页珍藏版)》请在三一办公上搜索。
1、教案名称:单片机原理及应用,授课章节:33 指令系统,授课时间:第六周 星期三 3、4节,授课日期:2007、10、10,授课班级:05机电与数控技术 班,1.数据传送到累加器A的指令 MOV A,R0 MOV A,direct MOV A,Ri MOV A,data 这组指令的功能是:把源操作数的内容送入累加器A。例如:MOV A,10H,该指令执行时将立即数 10H送入累加器A中。,33 指令系统,2.数据传送到工作寄存器Rn的指令 MOV Rn,A MOV Rn,direct MOV Rn,data 这组指令的功能是:把源操作数的内容送入当前工作寄存器区的R0R7中的某一个寄存器。指令中
2、Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0 确定,可以是 00H07H、08H0FH、10H17H、18H1FH。例如:MOV R0,A,若当前RS1、RS0 设置为 00(即工作寄存器 0 区),执行该指令时,将累加器A中的数据传送至工作寄存器R0(内部RAM 00H)单元中。,3.数据传送到内部RAM单元或特殊功能寄存器SFR的指令 MOV direct,A MOV direct,Rn MOV direct,direct MOV direct,Ri MOV direct,data MOV Ri,A MOV Ri,direct MOV Ri,data MOV DPT
3、R,data16,这组指令的功能是:把源操作数的内容送入内部RAM单元或特殊功能寄存器。其中第三条指令和最后一条指令都是三字节指令。第三条指令的功能很强,能实现内部RAM之间、特殊功能寄存器之间或特殊功能寄存器与内部RAM之间的直接数据传送。最后一条指令是将16位的立即数送入数据指针寄存器DPTR。,4.累加器A与外部数据存储器之间的传送指令 MOVX A,DPTR MOVX A,Ri MOVX DPTR,A MOVX Ri,A,这组指令是:在累加器A与外部数据存储器RAM单元或I/O口之间进行数据传送,前两条指令执行时,P3.7 引脚上输出RD有效信号,用作外部数据存储器的读选通信号;后两条
4、指令执行时,P3.6 引脚上输出WR有效信号,用作外部数据存储器的写选通信号。DPTR所包含的 16 位地址信息由 P0(低 8 位)和P2(高 8 位)输出,而数据信息由P0 口传送,P0 口作分时复用的总线。由Ri作为间接寻址寄存器时,P0 口上分时输出Ri指定的 8 位地址信息及传输 8 位数据。,5.堆栈操作指令 PUSH direct POP direct 在MCS-51 单片机的内部RAM中,可以设定一个先进后出的区域,称其为堆栈。在特殊功能寄存器中有一个堆栈指针SP,它指出栈顶的位置。进栈指令的功能是:首先将堆栈指针SP的内容加1,然后将直接地址所指出的内容送入SP指出的内部RA
5、M单元;出栈指令的功能是:将SP所指出的内部RAM单元的内容送入由直接地址所指出的字节单元,接着将堆栈指针SP的内容减 1。,例如:进入中断服务子程序时,把程序状态寄存器PSW、累加器A、数据指针DPTR进栈保护。设当前SP为 60H。则程序段 PUSH PSW PUSH ACC PUSH DPL PUSH DPH执行后,SP内容修改为 64H,而61H、62H、63H、64H单元中依次栈入PSW、A、DPL、DPH的内容。当中断服务程序结束之前,如下程序段(SP保持 64H不变),POP DPH POP DPL POP ACC POP PSW执行之后,SP内容修改为 60H,而64H、63H
6、、62H、61H单元中的内容依次弹出到DPH、DPL、A、PSW中。MCS-51 提供一个向上升的堆栈,因此SP设置初值时要充分考虑堆栈的深度,要留出适当的单元空间,满足堆栈的使用。,6.程序存储器内容送累加器 MOVC A,A+PC MOVC A,A+DPTR 这是两条很有用的查表指令,可用来查找存放在外部程序存储器中的常数表格。第一条指令是以PC作为基址寄存器,A的内容作为无符号数和 PC的内容(下一条指令的起始地址)相加后得到一个 16 位的地址,并将该地址指出的程序存储器单元的内容送到累加器A。这条指令的优点是不改变特殊功能寄存器和PC的状态,只要根据A的内容就可以取出表格中的常数。缺
7、点是表格只能放在该条查表指令后面的 256 个单元之中,表格的大小受到限制,而且表格只能被一段程序所利用。,第二条指令是以DPTR作为基址寄存器,累加器A的内容作为无符号数与DPTR内容相加,得到一个 16 位的地址,并把该地址指出的程序存储器单元的内容送到累加器A。这条指令的执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址无关,因此,表格的大小和位置可以在 64 KB程序存储器中任意安排,并且一个表格可以为各个程序块所共用。,7.字节交换指令 XCH A,Rn XCH A,Ri XCH A,direct XCHD A,Ri SWAP A 前三条指令是将累加器A的内容和源操作数
8、内容相互交换;后两条指令是半字节交换指令,最后一条指令是将累加器A的高 4 位与低 4 位之间进行交换,而另外一条指令是将累加器 A 的低 4 位内容和(Ri)所指出的内部RAM单元的低 4 位内容相互交换。,(一)、加法指令,1.普通加法指令 ADD A,Rn ADD A,direct ADD A,Ri ADD A,data,二、算术运算类指令,例如:120 和 100 之和为 220,显然大于 127,相加时,0 1 1 1 1 0 0 0 1200 1 1 0 0 1 0 0 1001 1 0 1 1 1 0 0 220,+,符号位(最高位)由 0 变 1,两个正数相加结果变负,实际上它
9、是和数的最高位,符号位移入了进位标志,此时位 6 有进位而位 7 无进位,置位溢出标志OV,结果溢出。,同样,120和100 相加,结果应为220,显然小于128,相加时,1 0 0 0 1 0 0 0-1201 0 0 1 1 1 0 0-100,+,1 0 0 1 0 0 1 0 0-220,符号位由1变为0,两个负数相加结果变为正数,这是因为符号位移入进位标志,位 6 无进位而位 7 有进位,置位溢出标志OV,由此可判断结果溢出。,2.带进位加法指令 ADDC A,Rn ADDC A,direct ADDC A,Ri ADDC A,data 这组指令的功能与普通加法指令类似,唯一的不同之
10、处是,在执行加法时,还要将上一次进位标志Cy的内容也一起加进去,对于标志位的影响也与普通加法指令相同。,3.增量指令 INC A INC Rn INC direct INC Ri INC DPTR 这组指令的功能是:将指令中所指出操作数的内容加1。若原来的内容为 0FFH,则加 1 后将产生溢出,使操作数的内容变成 00H,但不影响任何标志。最后一条指令是对16 位的数据指针寄存器DPTR执行加 1 操作,指令执行时,先对低 8 位指针 DPL的内容加 1,当产生溢出时就对高 8 位指针DPH加 1,但不影响任何标志。,4.十进制调整指令 DA A 这条指令对累加器A参与的BCD码加法运算所获
11、得的 8 位结果进行十进制调整,使累加器A中的内容调整为二位压缩型 BCD码的数。使用时必须注意,它只能跟在加法指令之后,不能对减法指令的结果进行调整,且其结果不影响溢出标志位。执行该指令时,判断 A中的低 4 位是否大于 9 和辅助进位标志 AC是否为“1”,若两者有一个条件满足,则低 4 位加 6 操作;同样,A中的高 4 位大于 9 或进位标志 Cy为“1”两者有一个条件满足时,高 4 位加 6 操作。例如:有两个 BCD数 36 与 45 相加,结果应为 BCD码 81,程序如下:,MOV A,36HADD A,45HDA A,这段程序中,第一条指令将立即数36H(BCD码36)送入累
12、加器A;第二条指令进行如下加法:,0 0 1 1 0 1 1 0 360 1 0 0 0 1 0 1 45,0 1 1 1 1 0 1 1 7B0 0 0 0 0 1 1 0 06,+,+,1 0 0 0 0 0 0 1 81,得结果 7BH;第三条指令对累加器 A进行十进制调整,低 4 位(为 0BH)大于 9,因此要加 6,得调整的 BCD码 81。,(二)、减法指令 1.带进位减法指令 SUBB A,Rn SUBB A,direct SUBB A,Ri SUBB A,data这组指令的功能是:将累加器A的内容与第二操作数及进位标志相减,结果送回到累加器A中。在执行减法过程中,如果位7(D
13、7)有借位,则进位标志Cy置“1”,否则清“0”;如果位 3(D3)有借位,则辅助进位标志AC置“1”,否则清“0”;如位 6 有借位而位 7 没有借位,或位 7 有借位而位 6 没有借位,则溢出标志OV置“1”,否则清“0”。若要进行不带借位的减法操作,则必须先将Cy清“0”。,2.减1指令 DEC A DEC Rn DEC direct DEC Ri 这组指令的功能是:将指出的操作数内容减 1。如果原来的操作数为 00H,则减 1 后将产生下溢出,使操作数变成 0FFH,但不影响任何标志。,(三)、乘法指令 乘法指令完成单字节的乘法,只有一条指令:MUL AB 这条指令的功能是:将累加器A
14、的内容与寄存器B的内容相乘,乘积的低 8 位存放在累加器A中,高 8 位存放于寄存器B中。如果乘积超过0FFH,则溢出标志OV置“1”,否则清“0”。进位标志Cy总是被清“0”。,(四)、除法指令 除法指令完成单字节的除法,只有一条指令:DIV AB 这条指令的功能是:将累加器 A中的内容除以寄存器 B中的8位无符号整数,所得商的整数部分存放在累加器A中,余数部分存放在寄存器 B中,清“0”进位标志Cy和溢出标志OV。若原来 B中的内容为 0,则执行该指令后 A与 B中的内容不定,并将溢出标志OV置“1”,在任何情况下,进位标志Cy总是被清“0”。,(一)、简单逻辑操作指令 CLR A;对累加
15、器A清“0”CPL A;对累加器A按位取反 RL A;累加器A的内容向左环移 1 位 RLC A;累加器A的内容带进位标志位向左环移 1 位 RR A;累加器A的内容向右环移 1 位 RRC A;累加器A的内容带进位标志位向右环移 1 位这组指令的功能是:对累加器A的内容进行简单的逻辑操作。除了带进位标志位的移位指令外,其它都不影响Cy,AC,OV等标志。,三、逻辑运算类指令,(二)、逻辑与指令 ANL A,Rn ANL A,direct ANL A,Ri ANL A,data ANL direct,A ANL direct,data 这组指令的功能是:将两个操作数的内容按位进行逻辑与操作,并
16、将结果送回目的操作数的单元中。,(三)、逻辑或指令ORL A,RnORL A,directORL A,RiORL A,dataORL direct,AORL direct,data 这组指令的功能是:将两个操作数的内容按位进行逻辑或操作,并将结果送回目的操作数的单元中。,(四)、逻辑异或指令 XRL A,Rn XRL A,direct XRL A,Ri XRL A,data XRL direct,A XRL direct,data 这组指令的功能是:将两个操作数的内容按位进行逻辑异或操作,并将结果送回到目的操作数的单元中。,四、控制转移指令 控制转移指令共有 17 条,不包括按布尔变量控制程序
17、转移指令(见表 3.5)。其中有 64 KB范围内的长调用、长转移指令;有 2 KB范围内的绝对调用和绝对转移指令;有全空间的长相对转移及一页范围内的短相对转移指令;还有多种条件转移指令。由于MCS-51 提供了较丰富的控制转移指令,因此在编程上相当灵活方便。这类指令用到的助记符共有 10 种:AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ。,(一)、无条件转移指令,1.短跳转指令 AJMP addr11 这是2KB范围内的无条件跳转指令,执行该指令时,先将PC+2,然后将addr11送入PC10PC0,而PC15PC11保持不变。这样得到跳转的
18、目的地址。需要注意的是,目标地址与AJMP后面一条指令的第一个字节必须在同一个 2 KB区域的存储器区内。,2.相对转移指令 SJMP rel 执行该指令时,先将 PC+2,再把指令中带符号的偏移量加到PC上,得到跳转的目标地址送入PC。3.长跳转指令 LJMP addr16 执行该指令时,将 16 位目标地址addr16 装入PC,程序无条件转向指定的目标地址。转移的目标地址可以在 64 KB程序存储器地址空间的任何地方,不影响任何标志。,4.散转指令 JMP A+DPTR 执行该指令时,把累加器 A中的 8 位无符号数与数据指针中的 16 位数相加,结果作为下条指令的地址送入PC,不改变累
19、加器 A和数据指针DPTR的内容,也不影响标志。利用这条指令能实现程序的散转。,(二)、条件转移指令 JZ rel;(A)=0 转移 JNZ rel;(A)0 转移 这类指令是依据累加器A的内容是否为 0 的条件转移指令。条件满足时转移(相当于一条相对转移指令),条件不满足时则顺序执行下面一条指令。转移的目标地址在以下一条指令的起始地址为中心的 256 个字节范围之内(128+127)。当条件满足时,PC(PC)+N+rel,其中(PC)为该条件转移指令的第一个字节的地址,N为该转移指令的字节数(长度),本转移指令N=2。,(三)、比较转移指令 在MCS-51 中没有专门的比较指令,但提供了下
20、面 4 条比较不相等转移指令:CJNE A,direct,relCJNE A,data,relCJNE Rn,data,relCJNE Ri,data,rel 这组指令的功能是:比较前面两个操作数的大小,如果它们的值不相等则转移。转移地址的计算方法与上述两条指令相同。如果第一个操作数(无符号整数)小于第二个操作数,则进位标志Cy置“1”,否则清“0”,但不影响任何操作数的内容。,(四)、减 1不为 0转移指令DJNZ Rn,relDJNZ direct,rel 这两条指令把源操作数减 1,结果回送到源操作数中去,如果结果不为 0 则转移(转移地址的计算方法同前)。,(五)、调用及返回指令 在程
21、序设计中,通常把具有一定功能的公用程序段编制成子程序,当主程序需要使用子程序时用调用指令,而在子程序的最后安排一条子程序返回指令,以便执行完子程序后能返回主程序继续执行。,1.绝对调用指令 ACALL addr11 这是一条 2 KB范围内的子程序调用指令。执行该指令时,先将 PC+2 以获得下一条指令的地址,然后将 16 位地址压入堆栈(PCL内容先进栈,PCH内容后进栈),SP内容加 2,最后把 PC的高 5 位PC15PC11与指令中提供的 11 位地址addr11相连接(PC15PC11,100),形成子程序的入口地址送入PC,使程序转向子程序执行。所用的子程序的入口地址必须与 ACA
22、LL下面一条指令的第一个字节在同一个 2 KB区域的存储器区内。,2.长调用指令 LCALL addr16 这条指令无条件调用位于 16 位地址addr16的子程序。执行该指令时,先将PC+3以获得下一条指令的首地址,并把它压入堆栈(先低字节后高字节),SP内容加 2,然后将 16 位地址放入 PC中,转去执行以该地址为入口的程序。LCALL指令可以调用 64 KB范围内任何地方的子程序。指令执行后不影响任何标志。,3.子程序返回指令 RET 这条指令的功能是:恢复断点,将调用子程序时压入堆栈的下一条指令的首地址取出送入PC,使程序返回主程序继续执行。4.中断返回指令 RETI 这条指令的功能
23、与RET指令相似,不同的是它还要清除MCS-51 单片机内部的中断状态标志。,指令中位地址的表达形式有以下几种:(1)直接地址方式:如 0A8H;(2)点操作符方式:如IE.0;(3)位名称方式:如 EX0;(4)用户定义名方式:如用伪指令 BIT定义:WBZD0 BIT EX0经定义后,允许指令中使用WBZD0 代替EX0。,五、位操作类指令,1.位数据传送指令 MOV C,bit MOV bit,C 这组指令的功能是:把源操作数指出的布尔变量送到目的操作数指定的位地址单元中。其中一个操作数必须为进位标志 Cy,另一个操作数可以是任何可直接寻址位。,2.位变量修改指令 CLR C CLR b
24、it CPL C CPL bit SETB C SETB bit 这组指令对操作数所指出的位进行清“0”#,取反#,置“1”的操作,不影响其它标志。,3.位变量逻辑与指令 ANL C,bit ANL C,/bit 这组指令的功能是:如果源位的布尔值是逻辑 0,则将进位标志清“0”;否则,进位标志保持不变,不影响其它标志。bit前的斜杠表示对(bit)取反,直接寻址位取反后用作源操作数,但不改变直接寻址位原来的值。例如指令:ANL C,/ACC.0 执行前ACC.0 为 0,C为 1,则指令执行后 C为 1,而 ACC.0仍为 0。,4.位变量逻辑或指令 ORL C,bit ORL C,/bit 这组指令的功能是:如果源位的布尔值是逻辑 1,则将进位标志置“1”;否则,进位标志保持不变,不影响其它标志。,5.位变量条件转移指令 JC rel;若(Cy)=1,则转移 PC(PC)+2+rel JNC rel;若(Cy)=0,则转移PC(PC)+2+rel JB bit,rel;若(bit)=1,则转移PC(PC)+3+rel JNB bit,rel;若(bit)=0,则转移PC(PC)+3+rel JBC bit,rel;若(bit)=1,则转移PC(PC)+3+rel,并 bit 0,作 业:,P104 1、2、5,