ImageVerifierCode 换一换
格式:PPT , 页数:80 ,大小:974.50KB ,
资源ID:13990535      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/13990535.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(Lecture 4 (8051 Instruction Set)_Chinese Rv01.ppt)为本站上传会员【s4****5z】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

Lecture 4 (8051 Instruction Set)_Chinese Rv01.ppt

1、Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Click to edit Master title style,*,第四讲,8051,指令集,8051,指令集,导言,CIP-51,结构和存储器组织概览,寻址方式,寄存器寻址,直接寻址,间接寻址,立即数寻址,相对寻址,绝对寻址,长寻址,索引寻址,指令类型,算术操作,逻辑操作,数据传送指令,布尔变量指令,编程分支指令,CIP-51,体系结构浏览,导言,计算机指令是由一个操作码与,0,,,1,,或者,2,字节的操作数组成的,操作码用

2、来识别操作的类型,操作数用来识别源数据和目的数据,操作数可以是,:,数据值,一个,CPU,寄存器,一个存储单元,一个,I/O,口,如果指令和多于一个的操作数相关时,格式经常如下:,指令 目的操作数,源操作数,存储器组织,C8051F020,的存储器与标准的,8051,相似,程序和数据储存使用同一寻址空间,但通过不同指令类型访问,内部数据储存器,特殊功能寄存器,F8,SPI0CN,PCA0H,PCA0CPH0,PCA0CPH1,PCA0CPH2,PCA0CPH3,PCA0CPH4,WDTCN,F0,B,SCON1,SBUF1,SADDR1,TL4,TH4,EIP1,EIP2,E8,ADC0CN,

3、PCA0L,PCA0CPL0,PCA0CPL1,PCA0CPL2,PCA0CPL3,PCA0CPL4,RSTSRC,E0,ACC,XBR0,XBR1,XBR2,RCAP4L,RCAP4H,EIE1,EIE2,D8,PCA0CN,PCA0MD,PCA0M0,PCA0CPM1,PCA0CPM2,PCA0CPM3,PCA0CPM4,D0,PSW,REF0CN,DAC0L,DAC0H,DAC0CN,DAC1L,DAC1H,DAC1CN,C8,T2CON,T4CON,RCAP2L,RCAP2H,TL2,TH2,SMB0CR,C0,SMB0CN,SMB0STA,SMB0DAT,SMB0ADR,ADC0GT

4、L,ADC0GTH,ADC0LTL,ADC0LTH,B8,IP,SADEN0,AMX0CF,AMX0SL,ADC0CF,P1MDIN,ADC0L,ADC0H,B0,P3,OSCXCN,OSCICN,P74OUT,FLSCL,FLACL,A8,IE,SADDR0,ADC1CN,ADC1CF,AMX1SL,P3IF,SADEN1,EMI0CN,A0,P2,EMI0TC,EMI0CF,P0MDOUT,P1MDOUT,P2MDOUT,P3MDOUT,98,SCON0,SBUF0,SPI0CFG,SPIODAT,ADC1,SPI0CKR,CPT0CN,CPT1CN,90,P1,TMR3CN,TMR3RL

5、L,TMR3RLH,TMR3L,TMR3H,P7,88,TCON,TMOD,TL0,TL1,TH0,TH1,CKCON,PSCTL,80,P0,SP,DPL,DPH,P4,P5,P6,PCON,0(8),Bit addressable,1(9),2(A),3(B),4(C),5(D),6(E),7(F),寻址模式,C8051F020,有,8,个不同的寻址模式,不同寻址模式决定了操作数字节被选择的方式,寻址模式,指令,寄存器,MOV A,B,直接,MOV 30H,A,间接,ADD A,R0,立即数,ADD A,#80H,相对*,SJMP AHEAD,绝对*,AJMP BACK,长*,LJMP F

6、AR_AHEAD,索引,MOVC A,A+PC,*,与程序分支指令相关,寄存器寻址,寄存器寻址指令包含了寄存器间的信息传递,举例,:,MOVR0,A,这条指令将累加器,A,的内容传给寄存器,R0.,在执行此指令前必须要指定寄存器分区,(,分区,0,1,2,3),直接寻址,这种方式允许用户指定操作数,这个操作数可以是它的实际存储地址,(,一般用,16,进制数指定,),或它的缩写名称,(,例如,:P3),注意,:SFR,的缩写是在,“C8051F020.inc”,头文件中定义的,例子,:,MOVA,P3,;,将,P3,的内容传给累加器,MOV A,020H,;,将,RAM,中,20H,的内容传给累

7、加器,间接寻址,这种方式是使用一个指针保存操作数的有效地址,只有寄存器,R0,R1,和,DPTR,可以用于指针寄存器,R0,和,R1,保存的是,8,位地址,而,DPTR,可以保存,16,位地址,例子,:,MOVR0,A,;,将累加器,A,的内容保存到,R0,寄存器所指向的地,;,址,R0,存储的是,8,位地址,比如,:60H,MOVXA,DPTR,;,将,DPTR,所指向地址的内容保存到累加器,A,中,;DPTR,存储的是,16,位地址,比如,:1234H.,立即数寻址,这种方式是使用,8,位或,16,位的常数作为源操作数,这个常量是在指令中指定,而不是一个寄存器或一个存储单元,目的寄存器的数

8、据长度要与源操作数的长度是一致的,.,Examples,:,ADD A,#030H,;,将,30H,写到,A,累加器中,(8,位寄存器,),MOV DPTR,#0FE00H,;,将,16,位的数据,FE00H,写到,16,位的数据指,;,针,DPTR,中,.,相对寻址,这种寻址方式主要用于跳转指令,比如,SJMP(,短跳转,),和条件跳转,(JNZ),这些指令实现程序的相对转移,由于使用的是,8,位偏移地址,所以目的地址的范围是以当前指令所在地址的,-128,到,+127,字节范围内,例如,:,GoBack,:DECA,;A,减,1,JNZ,GoBack,;,如果,A,不为,0,跳到,GoBa

9、ck,绝对寻址,与这种方式寻址的两条相关指令是,ACALL,和,AJMP,指令,这是,2,字节的指令,由操作数指定,11,位的绝对地址,16,位,PC,地址的高,5,位没有被修改,.,低,11,位地址由这条指令给出,.,因此,分支地址必须在当前地址的,2K,字节范围内,(2,11,=2048),例子,:,ACALLPORT_INIT,;PORT_INIT,应在,2K,字节内,.,PORT_INIT:MOV P0,#0FH,;PORT_INIT,子程序,长寻址,这种寻址方式主要用于,LCALL,和,LJMP,指令,这是,3,字节的指令,后,2,个字节指定了程序分支的,16,位目的地址,它的寻址范

10、围是,64 K,程序空间,无论当前程序在哪里,程序将总是跳到分支处执行,举例,:,LCALL TIMER_INIT,;TIMER_INIT,是由操作数指定的,16,位地址,;,在,C,语言中,这是函数调用,Timer_Init,().,TIMER_INIT:ORL TMOD,#01H,;TIMER_INIT,子程序,索引寻址,索引寻址方式在使用查表方法查找数据时是很有用的,.,16,位寄存器,(,数据指针,),保存基地址,累加器,A,保存,8,位的索引偏移地址,这两个寄存器的和组成有效的地址提供给,JMP,或,MOVC,指令,例子,:,MOVA,#08H,;,表启始的偏移地址,MOVDPTR,

11、01F00H,;,表的启始地址,MOVCA,A+DPTR,;,从表基地址,+,偏移地址处取数据放到,A,中,.,执行完上面的指令,程序将从地址,1F08H(1F00H+08H),处取数并放到累加器中,(,从查询表中,),指令类型,C8051F020,的指令按功能可以分为以下,5,类,:,算术运算,逻辑运算,数据传送指令,布尔操作指令,控制转移类指令,算术运算,对于算术运算指令,C8051F020,没有特殊的数据格式,(e.g.,有符号二进制数,无符号二进制数,二进制编码的十进制数,ASCII,码,等,.),当满足条件时,PSW,中的相应状态位会被置位,.,这可以使用户采用软件的方式管理不同的

12、数据格式,Ri,是指,R0,或,R1,所指向地址的内容,Rn,是,指当前所选择的寄存器分页中的,R0-R7,逻辑运算,逻辑指令对数据按位进行布尔操作,(AND,OR,XOR,和,NOT),例子,:,ANLA,#02H,;Mask bit 1,ORLTCON,A,;TCON=TCON-,OR,-A,数据传送指令,数据传送指令可以不通过累加器实现内部,RAM,与,SFR,之间的数据传送,也可以使用间接寻址的方法实现内部,RAM,与外部,RAM,的数据传送,高,128,字节的,RAM,只能使用间接寻址方式访问,SFRs,只能通过直接寻址方式访问,Mnemonic,Description,MOV ,R

13、i,direct,Ri,=direct,MOV ,Ri,#data,Ri,=immediate data,MOV DPTR,#data 16,DPTR=immediate data,MOVC A,A+DPTR,A=Code byte from A+DPTR,MOVC A,A+PC,A=Code byte from A+PC,MOVX,A,Ri,A=Data byte from external ram,Ri,MOVX A,DPTR,A=Data byte from external ram DPTR,MOVX ,Ri,A,ExternalRi,=A,MOVX DPTR,A,ExternalDP

14、TR=A,PUSH direct,Push into stack,POP direct,Pop from stack,XCH,A,Rn,A=,Rn,Rn,=A,XCH A,direct,A=direct,direct=A,XCH A,Ri,A=,Rn,Rn,=A,XCHD,A,Ri,Exchange low order digits,布尔操作指令,C8051F020,处理器可以执行单位的操作,布尔操作包括,:,set,clear,and,or,和,取补指令,同时也包括位传送和条件跳转指令,所有位的访问是使用的直接寻址方式,例子,:,SETBTR0,;Start Timer0.,POLL:JNB

15、TR0,POLL,;Wait till timer overflows.,Mnemonic,Description,CLR C,Clear C,CLR bit,Clear direct bit,SETB C,Set C,SETB bit,Set direct bit,CPL C,Complement c,CPL bit,Complement direct bit,ANL C,bit,AND bit with C,ANL C,/bit,AND NOT bit with C,ORL C,bit,OR bit with C,ORL C,/bit,OR NOT bit with C,MOV C,bit

16、MOV bit to C,MOV bit,C,MOV C to bit,JC,rel,Jump if C set,JNC,rel,Jump if C not set,JB,bit,rel,Jump if specified bit set,JNB,bit,rel,Jump if specified bit not set,JBC,bit,rel,if specified bit set then clear it and jump,控制转移类指令,程序转移指令是用于控制程序执行的流程,一些指令在转移前提供了条件判断功能,(,条件跳转,),Mnemonic,Description,ACALL

17、addr11,Absolute subroutine call,LCALL addr16,Long subroutine call,RET,Return from subroutine,RETI,Return from interrupt,AJMP addr11,Absolute jump,LJMP addr16,Long jump,SJMP,rel,Short jump,JMP A+DPTR,Jump indirect,JZ,rel,Jump if A=0,JNZ,rel,Jump if A NOT=0,CJNE,A,direct,rel,Compare and Jump if Not Eq

18、ual,CJNE,A,#data,rel,CJNE,Rn,#data,rel,CJNE ,Ri,#data,rel,DJNZ,Rn,rel,Decrement and Jump if Not Zero,DJNZ,direct,rel,NOP,No Operation,附录,8051,指令,算术运算,Ri,是指,R0,或,R1,所指向地址的内容,Rn,是,指当前所选择的寄存器分页中的,R0-R7,ADDA,ADDC A,ADD,将源操作数所指定的数据与累加器相加,结果保存到累加器中,ADDC,将源操作数所指定的数据与进位标志和累加器相加,结果保存到累加器中,ADD,和,ADDC,两条指令的操作都

19、会影响到进位标志,(CY),辅助进位标志,(AC),和溢出标志,(OV),CY=1,第,7,位有进位,;,否则清,0,AC=1,低,4,位有进位,例如,:,从第,3,位进位,.,否则清,OV=1,如果有符号数的结果不能用目的操作数的数据位内表达时溢,出,.,否则清,0,SUBB A,SUBB,从,A,中减去进位标志和指定的数据字节,结果保存到,A,中,CY=1,如果第,7,位有借位,则,CY,置,1,;否则清,0,AC=1,如果第,3,位有借位,则,CY,置,1,;否则清,0,OV=1,如果第,7,位和第,6,位中有一位需要借位,而另一个不需要借位,则,OV,置,1,;否则清,0,例子,:,A

20、保存数据,0C1H(11000001B),寄存器,1,保存数据,40H(01000000B),和,e CY=1.,SUBBA,R1,结果,70H(01110000B),保存在,A,中,同时,CY=0,AC=0,但,OV=1,INC,将数据变量加,1.,这条指令用于寄存器,直接或寄存器直接寻址方式,例子,:,INC6FH,如果内部,RAM,的,6FH,地址的内容是,30H,这条指令将这个值加,结果,31H,保存到,6FH,中,例子,:,MOVR1,#5EINCR1INCR1,如果,R1=5E(01011110),内部,RAM,地址,5FH,的内容是,20H,这条指令将,5FH,存储到,R1,同

21、时将,5FH,的内容加,1,为,21H,DEC,数据变量减,1,指令用于累加器,寄存器,直接或寄存器直接寻址方式,数据,00H,在执行此操作后下溢为,FFH,不影响各个标志位,INCDPTR,16,位数据指针加,1,DPTR,是唯一的一个可以执行此操作的,16,位寄存器,这条指令直接将,DPTR,的内容加,1,MUL AB,将,A,与,B,中的两个数相乘,16,位的,B15-8,A7-0,将,A,和,B,中的两个,8,位无符号数相乘,.,16,位的结果的低,8,位保存在,A,中,高,8,位地址保存在,B,寄存器中,如果结果大于,255(FFH),溢出标志被置,1;,否则溢出标志清,0.,进位标

22、志总是清,0.,如果,ACC=85(55H),和,B=23(17H),这条指令的结果,1955(07A3H),所以,B,为,07H,累加器,A,为,A3H.,溢出标志被置位进位标志被清,0.,DIV AB,A,除以,B,商的整数部分存储在,A,中,余数存储在,B,寄存器中,如果,ACC=90(5AH),和,B=05(05H),由于,90/5=18(,商,),和,00(,余数,),所以指令的结果,18(12H),保存在,ACC,中,B,中保存的值为,00(00H),进位与溢出标志都被清,0,如果在执行除操作前,B,中保存,00H,那么保存在,ACC,与,B,中的数据是不确定的,溢出标志被置,1.

23、进位标志被清,0,DA A,这是二,-,十进制调整指令,这条指令是将,ADD,或,ADDC,的存储在,ACC,中的结果调整为两个,4,位数据,(,压缩,BCD,码,),效率高,这条指令根据,ACC,的原始数据和,PSW,的状态,决定对,A,进行加,00H,06H,60H,或,66H,的操作,如果,ACC,位,A3-0,大于,9(xxxx1010-xxxx1111),或如果,AC=1,那么,6,被加到,ACC,以将,ACC,的低位调整为正确的,BCD,码,如果,CY=1,因为高位,A7-4,大于,9(1010 xxxx-1111xxxx),那么高位将加,6,以将,ACC,的高位调整为正确的,B

24、CD,码,但不清进位标志,逻辑操作,逻辑指令对数据按位执行布尔操作,(AND,OR,XOR,和,NOT),ANL,这条指令是对源操作数与目的操作数执行的逻辑,”,与,”,操作,结果保存在目的变量中,不影响标志位,例子,:,ANLA,R2,如果,ACC=D3H(11010011),和,R2=75H(01110101),执行这条指令的结果是,ACC=51H(01010001),当需要屏蔽一个字节时,下面的指令就很有用了,例子,:,ANLP1,#10111001B,ORL,这条指令是对源操作数与目的操作数执行的逻辑,”,或,”,操作,结果保存在目的变量中,不影响标志位,例子,:,ORLA,R2,如果

25、ACC=D3H(11010011),和,R2=75H(01110101),执行这条指令的结果是,ACC=F7H(11110111),例子,:,ORLP1,#11000010B,这条指令将端口,1,的位,7,6,1,输出为,1,XRL,这条指令是对源操作数与目的操作数执行的逻辑,”,异或,”,操作,结果保存在目的变量中,不影响标志位,例子,:,XRLA,R0,如果,ACC=C3H(11000011),和,R0=AAH(10101010),执行这条指令的结果为,ACC=69H(01101001),例子,:,XRLP1,#00110001,这条指令对端口,1,的位,5,4,和,0,位取反,CLR

26、A,和,CPL A,CLR A,这条指令清,0,累加器,(,所有位设置为,0),不影响标志位,如果,ACC=C3H,执行这条指令后,ACC=00H,CPL A,对累加器的内容逐位取反,(,每一位的反,),不影响标志位,如果,ACC=C3H(11000011),执行此指令的结果为,ACC=3CH(00111100),RL A,将累加器的内容逐位循环左移一位,.,位,7,的内容移到位,0,中,.,不影响标志位,如果,ACC=C3H(11000011),执行此指令后的结果为,ACC=87H(10000111),不影响进位标志位,RLC A,将累加器的内容和进位标志位一起循环左移一位,.,累加器位,7

27、的内容移入进位标志位,进位标志位的内容移到位,0,不影响除进位标志位外的其它位,如果,ACC=C3H(11000011),进位标志位为,1,执行此指令的结果为,ACC=87H(10000111),同时进位标志位置,1,RR A,将累加器的内容逐位循环右移一位,.,位,0,的内容移到位,7,中,.,不影响标志位,如果,ACC=C3H(11000011),执行此指令后的结果为,ACC=E1H(11100001),不影响进位标志位,RRC A,将累加器的内容和进位标志位一起循环右移一位,.,累加器位,0,的内容移入进位标志位,进位标志位的内容移到位,7,不影响除进位标志位外的其它位,如果,ACC=

28、C3H(11000011),进位标志位为,0,执行此指令的结果为,ACC=61H(01100001),同时进位标志位置,1,SWAP A,这条指令是将累加器,ACC,的低,4,位,(A3-0),与高,4,位,(A7-4),的内容互换,这条指令可以理解为一个,4,位的移位指令,不影响标志位,如果,ACC=C3H(11000011),执行此指令后的结果为,ACC=3CH(00111100),数据传送指令,数据传送指令可以实现不通过累加器的内部,RAM,与,SFR,之间的数据传送,也可以实现间接寻址方式的内部,RAM,与外部,RAM,的数据传送,高,128,字节的,RAM,只能通过间接寻址方式访问,

29、SFRs,只能通过直接寻址方式访问,数据传送指令,Mnemonic,Description,MOV ,Ri,direct,Ri,=direct,MOV ,Ri,#data,Ri,=immediate data,MOV DPTR,#data 16,DPTR=immediate data,MOVC A,A+DPTR,A=Code byte from A+DPTR,MOVC A,A+PC,A=Code byte from A+PC,MOVX,A,Ri,A=Data byte from external ram,Ri,MOVX A,DPTR,A=Data byte from external ram

30、DPTR,MOVX ,Ri,A,ExternalRi,=A,MOVX DPTR,A,ExternalDPTR=A,PUSH direct,Push into stack,POP direct,Pop from stack,XCH,A,Rn,A=,Rn,Rn,=A,XCH A,direct,A=direct,direct=A,XCH A,Ri,A=,Rn,Rn,=A,XCHD,A,Ri,Exchange low order digits,MOV,这条指令的功能是把源字节的内容送到目的字节,源字节的内容不变,也不影响其它寄存器和标志,例子,:,MOVR1,#60,;R1=60H,MOVA,R1,;

31、A=60H,MOVR2,#61,;R2=61H,ADDA,R2,;A=A+61H,MOVR7,A,;R7=A,如果内部,RAM,中,60H=10H,和,61H=20H,执行此指令后的结果为,R7=A=30H.60H,与,61H,地址的内容不变,.,MOV DPTR,#data 16,这条指令将,16,位的常数传送给数据指针,不影响标志位,例子,:,MOVDPTR,#1032,这条指令实现将数据,1032H,传送给数据指针,DPH=10H,和,DPL=32H.,MOVC A,A+,这条指令将程序存储器中的代码值移到累加器,ACC,中,读取字节的有效地址是,8,位累加器的内容与基址的和,基址可以是

32、数据指针,(DPTR),也可以是程序指针,(PC),16,位的地址相加不影响标志位,这条指令用于在程序存储器中查表,If the PC is used,it is incremented to the address of the following instruction before being added to the ACC,Example,:,CLRA,LOC1:INCA,MOVC A,A+PC,RET,Look_upDB10H,DB20H,DB30H,DB40H,这段子程序读取用,DB(,定义字节,),伪指令定义的,4,个值中的一个,并送给累加器,执行完这段子程序的操作后,ACC=

33、20H,MOVX,这条指令在,ACC,与外部数据存储器的一个字节之间传送数据,这条指令有两种类型,它们的唯一区别是,:,是使用,8,位还是,16,位的间接地址访问外部数据存储器,8,位的,MOVX,指令使用特殊功能寄存器,EMI0CN,确定高,8,位的有效地址,R0,或,R1,的内容确定低,8,位的访问地址,例子,:,MOVEMI0CN,#10H,;,高位地址装载到,EMI0CN.,MOVR0,#34H,;,低位地址装载到,R0(,或,R1),MOVXA,R0,;,将,1034H,单元的内容传给,ACC,MOVX,16,位的,MOVX,指令通过访问,DPTR,寄存器所指向的外部存储器的内容,例

34、子,:,MOVDPTR,#1034H,;,加载,16,位的地址,(1034H).,MOVX A,DPTR,;,将,1034H,的内容传给,ACC.,上面的指令使用立即数寻址指令,MOV DPTR,设置,DPTR,的内容,DPTR,也可以通过访问,DPTR,的高,8,位特殊功能寄存器,DPH,和,DPTR,的低,8,位特殊功能寄存器,DPL,的方式访问,PUSH Direct,这条指令将堆栈指针,(SP),加,1,Direct,的内容可以是内部存储器的地址或,SFR,它们被复制到堆栈指针所指向的内部,RAM,的地址内,不影响标志位,例子,:,PUSH22H,PUSH23H,SP,的初始地址为,4

35、FH,内部,RAM,中,22H,与,23H,的内容分别是,11H,和,12H.,执行完上面的指令后,SP=51H,内部,RAM,中,50H,笔,51H,分别保存,11H,和,.,POPDirect,这条指令读取堆栈指针,(SP),所指向的地址的内容并将堆栈指针,(SP),减,.,被 读取的数据被送入,Direct,所指向的地址,它可以是内部存储器或,SFR,.,不影响标志位,.,例子,:,POPDPH,POPDPL,如果,SP=51H,内部,RAM,的地址,4FH,50H,和,51H,中的内容分别为,30H,11H,和,12H,执行上面的指令后,SP=4FH,和,DPTR=1211H,POPS

36、P,如果继续执行上面的指令,那么,SP=30H.,在这种情况下,SP,在加载弹出的,(30H),之前首先减到,4EH,XCH A,这条指令是将,ACC,的内容与源操作数的内容互换,例子,:,XCHA,R0,假设,R0=2EH,ACC=F3H(11110011),同时内部,RAM,地址,2EH,的值为,2EH=76H(01110110).,上面指令执行的结果为,2EH=F3H,和,ACC=76H.,XCHD,A,Ri,这条指令是将,Ri,间接寻址单元的低,4,位内容与累加器,ACC,的低,4,位内容互换,它们的高,4,位的内容,(,位,7-4),保持不变,不影响标志位,例子,:,XCHDA,R0

37、如果,R0=2EH,ACC=76H(01110110),内部,RAM,的内容,2EH=F3H(11110011),执行上面指令的结果为,2EH=F6H(11110110),和,ACC=73H(01110011),逻辑运算指令,C8051F020,处理器可以执行单位的操作,逻辑运算指令包括,:,置位,清,0,与,或和取反,也包括移位与条件跳转指令,所有的位是通过直接寻址方式访问,助词符,描述,CLR C,清除,C,CLR bit,清除直接寻址位,SETB C,置位,C,SETB bit,置位直接寻址位,CPL C,取反,c,CPL bit,取反直接寻址位,ANL C,bit,直接寻址位与,C,

38、的,”,与,”,ANL C,/bit,直接寻址位与,C,的,”,与非,”,ORL C,bit,直接寻址位与,C,的,”,或,”,ORL C,/bit,直接寻址位与,C,的,”,或非,”,MOV C,bit,直接寻址位直接传送给,C,MOV bit,C,C,直接传送给直接寻址位,JC,rel,如果,C,置位跳转,JNC,rel,如果,C,没有置位跳转,JB,bit,rel,如果直接寻址位置,1,跳转,JNB,bit,rel,如果直接寻址位没有置,1,跳转,JBC,bit,rel,如果直接寻址位置,1,跳转并清除此位,CLR,清,0,指令,(,复位为,0),清除指令中的指定位,不影响标志位,CLR

39、指令可以清除进位标志位及所有可以直接寻址的位,例子,:,CLRP2.7,如果,Port 2,已经写入,DCH(11011100),执行此操作后端口的值为,5CH(01011100),SETB,这条指令将指定位置,1,SETB,指令可以操作进位标志位和所有可直接寻址的位,不影响其它标志,例子,:,SETBC,SETBP2.0,如果进位标志已经清除和端口,2,的值为,24H(00100100),执行上面的指令后进位标志位被置,1,端口,2,的值更新为,25H(00100101),CPL,此指令对操作数中的位取反,不影响标志位,CPL,指令可以操作进位标志及所有可直接寻址的位,例子,:,CPLP2

40、1,CPLP2.2,如果端口,2,的值在执行上面的指令前为,53H(01010011),则执行上面的指令后端口的值被置为,55H(01010101),ANLC,这条指令将位地址与进位标志位,”,与,”,操作,并将结果保存在进位标志位,如果源操作数的位是,0,那么这条指令清除进位标志位;否则进位标志位保持原值不变,如果在源操作数的位前加斜线,则源操作数为源操作数的取反,但源操作数的位不变,不影响标志位,例子,:,MOVC,P2.0,;,将,P2.0,的状态装入,C,ANLC,P2.7,;,进位标志与,P2,的第,7,位,”,与,”,操作,MOVP2.1,C,;,将,C,传送给,P2,的位,1,

41、ANLC,/OV,;”,与,”OV,标志的反,.,如果,P2.0=1,P2.7=0,和,OV=0,执行上面的指令后,P2.1=0,CY=0,和,OV,的值不变,OV=0,ORLC,这条指令将位地址与进位标志位,”,或”操作,并将结果保存在进位标志位,This,如果源操作数的位是,1,那么这条指令置位进位标志位;否则进位标志位保持原值不变,如果在源操作数的位前加斜线,则源操作数为源操作数的取反,但源操作数的位不变,不影响标志位,例子,:,MOVC,P2.0,;,将,P2.0,的状态装入,C,ORLC,P2.7,;,进位标志与,P2,的第,7,位,”,或,”,操作,MOVP2.1,C,;,将,C,

42、传送给,P2,的位,1,ORLC,/OV,;”,或,”OV,标志的反,.,MOV,这条指令是将源操作位的内容送到目的操作位,两个操作数必须有一个进位标志位,另外一个可以是任何一个可寻址位,不影响其它寄存器或标志位,例子,:,MOVP2.3,C,MOVC,P3.3,MOVP2.0,C,如果,P2=C5H(11000101),P3.3=0,和,CY=1,执行上面的指令后,P2=CCH(11001100),和,CY=0.,JC,rel,这条指令的功能是如果进位标志位为,1,则跳转到标号对应的地址,否则程序继续执行下一条指令,不影响标志位,例子,:,CLRC,SUBBA,R0,JCARRAY1,MOV

43、A,#20H,首先清除进位标志位,.,执行完,SUBB,指令后,如果,A,的值小于,则这条指令置位进位标志位同时程序跳转到,ARRAY1,的地址,否则继续执行,MOV,指令,JNC,rel,这条指令的功能是如果进位标志位没有置,1,则跳转到标号对应的地址,否则程序继续执行下一条指令,不影响标志位,.,也不修改进位标志位,.,例子,:,CLRC,SUBBA,R0,JNCARRAY2,MOVA,#20H,在上面的指令中如果,A,的值大于,R0,则跳转到,ARRAY2,否则继续执行,MOV,指令,.,JB,rel,这条指令的功能是如果目的位为,1,则跳转到,rel,指定的地址,否则继续执行下一条指令

44、不影响标志位,.,被检测位没有被修改,例子,:,JBACC.7,ARRAY1,JBP1.2,ARRAY2,如果累加器的值是,01001010,和 端口,1=57H(01010111),执行上面的指令将使程序跳转到,ARRAY2,JNB,rel,这条指令的功能是如果目的位为,0,则跳转到,rel,指定的地址,否则继续执行下一条指令,不影响标志位,.,被检测位没有被修改,例子,:,JNBACC.6,ARRAY1,JNBP1.3,ARRAY2,如果累加器的值是,01001010,和 端口,1=57H(01010111),执行上面的指令将使程序跳转到,ARRAY2,JBC,rel,如果源操作数的位是

45、1,这条指令清除源操作数并跳转到,rel,指定的地址,如果被检测位已经是,0,则不修改此位,不影响标志位,例子,:,JBCP1.3,ARRAY1,JBCP1.2,ARRAY2,如果,P1=56H(01010110),上面的指令将使程序跳转到,ARRAY2,并将,P1,修改为,52H(01010010),控制转移指令,程序跳转指令用于程序的流程控制,一些指令提供了条件判断 跳转,例如条件跳转和无条件跳转,助记符,描述,ACALL addr11,绝对子程序调用,LCALL addr16,长子程序调用,RET,从子程序返回,RETI,从中断服务程序返回,AJMP addr11,绝对跳转,LJMP

46、addr16,长跳转,SJMP,rel,短跳转,JMP A+DPTR,间接跳转,JZ,rel,如果,A=0,跳转,JNZ,rel,如果,A,不等于,0,跳转,CJNE,A,direct,rel,比较如果不相等跳转,CJNE,A,#data,rel,CJNE,Rn,#data,rel,CJNE ,Ri,#data,rel,DJNZ,Rn,rel,减,1,不为,0,跳转,DJNZ,direct,rel,NOP,空操作,ACALL addr11,这条指令无条件调用给出地址处的子程序,这条指令使,PC,指针加,2,并将,16,位的,PC,指针压入堆栈,(,低字节在前,),同时堆栈指针加,2,PC,指针

47、指向,addr11,所给出的地址,程序从新地址开始执行,所以被调用的子程序必须在同一个,2K,区域内,不影响标志位,例子,:,ACALLLOC_SUB,如果,SP=07H,标号,“LOC_SUB”,在程序存储器的,0567H,地址处,执行此指令是在,0230H,地址处,执行此指令后,SP=09H,内部,RAM,的地址,08H,和,09H,的内容分别是,32H,和,02H PC,指针为,PC=0567H,LCALL addr16,这条指令调用给出地址处的子程序,执行此指令将使,PC,加,3,并将,16,位的,PC,指针压入堆栈,(,低字节在前,),堆栈指针加,2,PC,指针指向,addr16,所

48、给出的地址,程序从新地址开始执行,由于这是长调用,所以子程序可以是,64K,程序范围内的任一地址,不影响标志位,例子,:,LCALLLOC_SUB,如果,SP=07H,和标号,“LOC_SUB”,在程序存储器的,2034H,地址处,.,执行此指令的程序位于,0230H,地址处,执行此指令后,SP=09H,内部,RAM,地址,08H,和,09H,的内容分别是,33H,和,02H,同时,PC=2034H,RET,这条,指令从一个子程序处返回,RET,指令从堆栈中弹出,PC,指针的高字节与低字节,同时,SP,减去2,这条,指令的执行将导致程序恢复到“,CALL”,指令的下一条指令处,不影响标志位,假

49、设,SP=0BH,而且内部,RAM,的,地址为0,AH,与0,BH,的,内容分别为30,H,和,02H.,执行此指令的结果是,SP=09H,程序将继续从0230,H,处,开始执行,RETI,这条,指令将程序从中断子程序中返回,RETI,从,堆栈中将,PC,的高,字节与低字节地址弹出,同时恢复中断逻辑以接收其它的中断,SP,指针减2,其它寄存器不受影响,然而,PSW,不能自动恢复中断前的状态,执行完,RETI,程序将立即恢复到中断产生前的下一条指令,假设,SP=0BH,程序在执行到0213,H,处时,检测到一个中断,内部,RAM,位于0,AH,和0,BH,地址的内容分别是14,H,和,02,H,

50、RETI,指令将使,SP=09H,程序从0234,H,处,重新开始执行,AJMP addr11,AJMP,指令将程序跳转到目的地址,此地址是短范围内的绝对地址(短范围是指11位地址),因此目的地址必须在2,KB,的,范围内,例子,:,AJMPNEAR,如果标号,NEAR,位于程序存储器的,0120H,AJMP,指令位于,0234H,上面的指令将,PC,的值改变为,0120H,LJMP addr16,LJMP,指令是将程序跳转到目的地址,目的地址定位是绝对长范围的距离内,(,长范围是指16位的地址),所以目的地址可以是全部,64,kB,程序存储空间内的任何一个地址,不影响标志位,例子,:,LJM

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服