单片机第四章(指令)_第1页
单片机第四章(指令)_第2页
单片机第四章(指令)_第3页
单片机第四章(指令)_第4页
单片机第四章(指令)_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

单片机应用技术讲义(第三版),北京工业大学电控学院张印春,2005.10,第四章MCS-51指令系统,第四章MCS-51指令系统,4.1概述,4.1.1基本概念,指令:控制计算机运行的代码,以二进制数字或助记符表示,指令系统:全部指令的集合,指令周期:指令运行的时间,大于等于1个机器周期。,指令运行过程:,指令存储器,(程序),取指令,指令寄存器,指令译码器,单片机运行控制信号,指令分类:,存储长度-字节,13(参见P269附录C),执行时间-机器周期,14(参见P269附录C),功能-5大类,指令专用符号:,上表续:,4.1.2指令格式,指令分为:,操作码-定义操作内容,操作数-指示操作对象(数据或地址),单字节指令,双字节指令,三字节指令,操作码,操作数,同在一字节,操作码,操作数,操作码,操作数1,操作数2,操作码,操作数1,操作数2,单操作数指令,双操作数指令,操作码,操作数2,操作数3,操作数1,3操作数指令,4.1.3寻址方式,寻址方式:指令中表明数据所在位置的方式,直接寻址:直接确定数据所在位置,间接寻址:通过中间环节确定数据所在位置,1.直接寻址方式,立即寻址(限ROM操作),指令操作数为立即数#data或#data16的直接寻址操作。,例如:MOVA,#0DBH,直接将数据11011011送入累加器A,#data来自程序存储器ROM。,累加器A,11011011,(#data),直接寻址(限内部RAM和SFR操作),指令操作数为数据存放地址direct的直接寻址操作。,将内部RAM地址为40H单元中数据11011011送入累加器A。,累加器A,11011011,内部RAM,40H,(direct),例如:MOVA,40H,寄存器寻址(限寄存器名的操作),指令操作数为Rn,A,B,DPTR等寄存器名的直接寻址操作。,将内部RAM中工作寄存器R0(00H)单元中数据11011011送入累加器A。,累加器A,11011011,内部RAM,00H,(R0),例如:MOVR0,#11011011B,MOVA,R0,位寻址(操作数为可寻址位),指令操作数为位数据存放地址的直接寻址操作。,CY,PSW,07,06,05,04,03,02,01,00,20H,内部RAM,(Bit),1,1,0,1,1,0,1,1,07H,将位可寻址区07H中的位数据1送进位位CY,例如:MOVC,07H,累加器A,2.间接寻址方式,寄存器Ri间接寻址(限内部RAM和外部RAM前256字节的操作,不能用于SFR),指令操作数为通用寄存器名Ri,Ri中存有数据存放的8位地址。,内部RAM,11011011,01000000,40H,自R0获得数据存放地址40H,然后将40H单元中的数据送累加器A。,(R0),例如:MOVR0,#40H,MOVA,R0,寄存器DPTR间接寻址(限外部RAM操作),指令操作数为数据指针DPTR,DPTR中存有数据存放的16位地址。,外部RAM,累加器A,8080H,11011011,DPTR,8080H,自DPTR获得数据存放地址8080H,然后将8080H单元中的数据送累加器A。,例如:MOVDPTR,#8080H,MOVXA,DPTR,堆栈指针SP间接寻址(限内部RAM),指令操作数为堆栈指针SP,SP中存有数据存放的8位地址。实际操作指令中SP为隐含操作数。,内部RAM,累加器A,60H,11011011,SP,60H,自SP获得数据存放地址60H,然后将60H单元中的数据送累加器A。,SFR(81H),例如:MOVSP,#60H,POPA,基址+变址寄存器寻址(限程序存储器ROM操作),指令操作数为PC或DPTR与累加器A,PC或DPTR中存放16位基地址,累加器A存放8位偏移量。,ROM,累加器A,8080H,11011011,A,80H,自DPTR+A获得数据存放地址8080H,然后将8080H单元中的数据送累加器A。,DPTR,8000H,+,例如:MOVDPTR,#8000H,MOVA,#80H,MOVCA,A+DPTR,相对寻址(限程序存储器ROM操作),指令操作数为PC(程序计数器)+rel(偏移量),用于程序运行中的相对转移操作。,例如:JP1:MOVA,#100;2字节,SJMPJP1;2字节,8000H,8001H,8002H,8003H,8004H,MOV,A,#100,SJMP,JP1,+,8004H,-4,8000H,PC,PC,rel,在执行相对跳转的指令时,将当前PC值与跳转距离(rel)相加,产生新的PC值继续运行程序。,4.2指令分析,MCS-51单片机指令按功能分为五大类,数据传送指令(28),算数操作指令(24),逻辑操作指令(25),控制转移指令(17),布尔变量操作指令(17),4.2.1数据传送指令分析,1.数据传送的对象及操作指令助记符,MOV-内部RAM数据传送指令助记符,MOVX-外部RAM数据传送指令助记符,MOVC-ROM数据传送指令助记符,内部,外部,外部,内部,ROM,ROM,RAM,RAM,SFR,I/O,扩展,MOV,MOVC,MOVX,不同区域之间的数据传送必须经过累加器A周转,不能直接进行。外部RAM之间、扩展I/O之间的数据传送,也必须经过累加器A周转。,ROM,外部RAM,内部RAM,A,内部RAM,内部RAM,SFR,外部RAM,外部RAM,A,I/O,I/O,PUSH-压栈指令助记符,POP-退栈指令助记符,XCH-字节数据交换指令助记符,XCHD-低半字节数据交换指令助记符,SWAP-累加器内半字节数据交换指令助记符,下面五种操作为特殊的数据传送操作,并且局限于内部RAM和SFR之中。,2.内部RAM和SFR数据传送指令(MOV)分析,数据传送指令通常包括2个操作数,源操作数(后)-被传送数据的存放地址或数据,目的操作数(前)-数据传送的目的地址,操作数种类,DPTR、Rn、A、SP-寄存器直接寻址,direct-直接寻址,Ri-寄存器间接寻址,#data、#data16-立即寻址,操作数组合方式,源、目的不为相同操作数(direct除外),Rn、Ri不互为操作数,DPTR只为目的操作数,源操作数为#data16,#data、#data16不为目的操作数,内RAM80HFFH只使用Ri作为源和目的操作数,SFR只使用direct作为源和目的操作数。,direct,Ri、direct,Ri,内RAM,80HFFH,内RAM,00H7FH,SFR,80HFFH,用寻址方式区分地址范围同为80HFFH的内RAM和FSR操作,例如:,MOVA,R0,MOVR0,#80H,MOV40H,A,MOV40H,80H,MOVR0,R1,MOVDPTR,#80H,MOVR0,R0,MOV#40H,80H,错,MOV0FFH,80H,3.外部RAM数据传送指令(MOVX)分析,操作数种类,A-寄存器直接寻址,DPTR-寄存器间接寻址(0FFFF范围),操作数组合方式,源、目的不为相同操作数,MOVXA,DPTR,MOVXDPTR,A,(A)(DPTR),(DPTR)(A),例如:,Ri-寄存器间接寻址(0FFH范围),MOVXA,Ri,(A)(Ri),MOVXRi,A,(Ri)(A),4.程序存储器ROM数据传送指令(MOVC)分析,操作数种类,A-寄存器直接寻址,A+DPTR、A+PC-基址+变址寄存器间接寻址,操作数组合方式,程序存储器ROM地址不为目的操作数,MOVCA,A+DPTR,MOVCA,A+PC,(A)(A+DPTR),(A)(A+PC),例如:,5.其它数据传送指令(内部RAM和SFR操作)分析,堆栈操作,源操作数:direct-直接寻址,目的操作数:(SP)-SP间接寻址(内RAM前128字节),PUSH(压栈)操作过程:,(SP)(SP)+1,(SP)(direct),8051单片机的堆栈为先进后出结构,由压栈操作指令PUSH和退栈操作指令POP实现堆栈操作。,SFR,SP,10H,55H,R0,55H,11H,(SP),内部RAM,例如:,MOVSP,#10H,MOVR0,#55H,PUSH0,(SP)+1,11H,SFR,PUSH,POP(退栈)操作过程:,(SP)(SP)-1,(direct)(SP),目的操作数:direct-直接寻址,源操作数:(SP)-SP间接寻址(内RAM前128字节),例如:,POP0,堆栈操作在子程序或中断服务程序中,主要用于现场保护。所以压栈、退栈操作指令必须成对使用,否则会使程序运行产生难以预料的结果。,SFR,SP,11H,55H,R0,55H,11H,(SP),内部RAM,(SP)-1,10H,SFR,POP,数据互换操作XCH,源操作数:Rn、Ri、direct,目的操作数:A,例如:,MOVA,#0AAH,MOVR0,#55H,XCHA,R0,R0,内部RAM,A,55H,AAH,R0,内部RAM,A,55H,AAH,XCH,低半字节数据互换操作XCHD,源操作数:Ri,目的操作数:A,例如:,MOVA,#5AH,MOVR0,#01H,XCHDA,R0,A,A5H,5AH,XCHD,内部RAM,01H,A,AAH,55H,内部RAM,01H,MOVR1,#0A5H,累加器内半字节数据互换操作SWAP,源操作数:A,目的操作数:A,例如:,MOVA,#5AH,SWAPA,A,5AH,SWAP,A,A5H,4.2.2算数运算指令分析,1.指令助记符,大部分算数运算指令会影响标志位,作为运算结果的辅助说明。,2.加运算,例如:,MOVR0,#39H,MOVA,#73H,ADDA,R0,A,39H,73H,内部RAM,0H,A,ACH,+,一字节加ADD,十进制调整指令DA,例如:一字节BCD加法运算,MOVR0,#39H,MOVA,#73H,ADDA,R0,A,39H,73H,内部RAM,0H,A,ACH,+,DAA,A,12H,1,C,十进制调整,A.3A.2A.1A.0,A.7A.6A.5A.4,AC=1orA3-09,(A)(A)+06,C=1orA7-49,(A)(A)+06,十进制调整操作过程,带进位一字节加ADDC,例如:,MOV10H,#0A0H,MOV11H,#0A0H,MOVR0,#11H,MOVA,10H,A,A0H,A0H,内部RAM,10H,A,40H,+,1,CY,40H,10H,内部RAM,MOV20H,#40H,MOV21H,#40H,MOVR0,A,MOVA,20H,ADDCA,21H,MOV11H,A,A,40H,40H,内部RAM,21H,A,81H,+,+,1,CY,81H,11H,40H,10H,内部RAM,内部RAM,可以借助CY做多字节加法运算。,ADDA,R0,MOVR0,#10H,增1操作INC,例如:,MOV10H,#200,INC10H,MOVR0,#10H,INCR0,201,200,内部RAM,10H,+1,10H,内部RAM,202,201,内部RAM,10H,+1,10H,内部RAM,3.减运算,带借位一字节减SUBB,例如:,CLRC,MOV10H,#02H,MOVA,#01H,SUBBA,10H,2,1,内部RAM,10H,A,255,-,1,CY,0,CY,A,可以借助CY判断2数的大小,或做多字节减法运算。,减1操作DEC,例如:,MOV10H,#200,DEC10H,MOVR0,#10H,DECR0,199,200,内部RAM,10H,-1,10H,内部RAM,188,199,内部RAM,10H,-1,10H,内部RAM,4.一字节无符号乘法运算MUL,例如:,MOVA,#80H,MOVB,#80H,MULAB,80H,80H,A,B,00H,40H,A,B,5.一字节无符号除法运算DIV,例如:,MOVA,#0FFH,MOVB,#07H,MULAB,07H,FFH,A,B,03H,24H,B,A,商,余数,4.2.3逻辑运算指令分析,1.指令助记符,2.双操作数“与”“或”“异或”运算,第一类以A寄存器为第一操作数及结果存放地,第二类以direct寄存器为第一操作数及结果存放地,操作数组合方式,举例,累加器A“与”内RAM20H单元,MOVA,#11110000B,MOV20H,#10101010B,ANLA,20H,A,20H,A,第一操作数,第二操作数,按位相与结果,“与”,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,累加器A“或”(R0)所指单元,MOVA,#11110000B,MOVR0,#20H,ORLA,R0,A,20H,A,第一操作数,第二操作数,按位相或结果,“或”,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,MOV20H,#101010101B,20H“异或”立即数10101010B,MOV20H,#11110000B,XRL20H,#10101010B,20H,#data,20H,第一操作数,第二操作数,按位异或结果,“或”,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,内部RAM,3.以累加器A为操作数的逻辑操作指令,清0,CLRA,A,A,0,0,0,0,0,0,0,0,CLR,逻辑“非”,CPLA,A,A,1,0,1,0,1,0,1,0,CPL,0,1,0,1,0,1,0,1,累加器循环左移一位,RLA,A,带进位移位,RLCA,RRA,D7,D6,D5,D4,D3,D2,D1,D0,移位,累加器循环右移一位,A,D7,D6,D5,D4,D3,D2,D1,D0,带进位累加器循环左移一位,A,D7,D6,D5,D4,D3,D2,D1,D0,CY,RRCA,带进位累加器循环右移一位,A,D7,D6,D5,D4,D3,D2,D1,D0,CY,4.2.4控制转移指令分析,1.控制转移指令功能,例1:A/D转换控制程序流程,启动A/D转换,转换结束?,读A/D转换结果,循环结构,包括:,循环体,循环判定条件,程序流程结构举例,循环过程控制,N,Y,例2:温度控制程序流程,取当前温度值,温度高于设定值?,升温数据处理,降温数据处理,控温数据送D/A,分支结构,包括:,分支判定条件,分支过程控制,控制转移操作-改变程序流程,Y,N,2.指令助记符,3.转移操作,无条件转移指令,AJMP执行过程,PCA10A0,程序按新的PC值继续运行,PC,PC15PC11,PC10PC9PC8PC7PC1PC0,A10A9A8A7A1A0,不改变,例如:PC15PC11为00000B,对应跳转范围为000007FFH。,PC15PC11:将64KB程序存储空间分为32个块,每块2KB,决定跳转的范围。,PC15PC11为00001B,对应跳转范围为08000FFFH。,A10A0:决定在2KB范围内具体的跳转位置。,例如:PC15PC11为00001B,,PC为00001000

温馨提示

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

最新文档

评论

0/150

提交评论