收藏 分销(赏)

单片机原理及应用李建忠PPT课件.ppt

上传人:可**** 文档编号:7902410 上传时间:2025-01-25 格式:PPT 页数:85 大小:5.07MB 下载积分:10 金币
下载 相关 举报
单片机原理及应用李建忠PPT课件.ppt_第1页
第1页 / 共85页
单片机原理及应用李建忠PPT课件.ppt_第2页
第2页 / 共85页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,3,章,MCS-51,单片机指令系统和汇编语言程序示例,第,3,章,MCS-51,单片机指令系统,和汇编语言程序示例,3.1 MCS-51,单片机指令系统概述,3.2,寻址方式,3.3,数据传送类指令,3.4,算术运算类指令,3.5,逻辑运算及移位指令,3.6,控制转移类指令,3.7,子程序调用与返回指令,3.8,位操作类指令,3.9,汇编程序格式与伪指令,3.10,汇编程序设计示例,3.1 MCS-51,单片机指令系统概述,指令、指令系统的概念,指令,:计算机内部执行的一种操作,提供给用户编程使用的一种命令。,指令系统,:计算机能够执行的全部操作所对应的指令集合。,指令的三种,属性,功能属性,:每条指令都对应一个特定的操作功能;,时间属性,:一条指令执行所用的时间;,空间属性,:一条指令在程序存储器中存储所占用的字节数。,MCS-51,单片机指令系统及其指令格式,功能,:,数据传送、算术操作、逻辑操作、程序转移、位操作等五大类;,空间属性,:,单字节指令,(49,条,),、双字节指令,(46,条,),和最长的三字节指令,(,只有,16,条,),。,时间属性,:,单机器周期指令,(64,条,),、双机器周期指令,(45,条,),和只有乘、除法两条,4,个机器周期的指令。,结构,:操作码,+,操作数。,操作码,:表示计算机执行该指令将进行何种操作。,操作数,:表示参加操作的数的本身或操作数所在的地址。,(无操作数、单操作数、双操作数),指令格式,:,标号:,操作码助记符,目的操作数,,源操作数,;注释,描述指令的一些符号的约定意义的说明:,Ri,和,Rn,:表示当前工作寄存器区中的工作寄存器,,i,取,0,或,1,,表示,R0,或,R1,。,n,取,07,,表示,R0R7,。,#data,:表示包含在指令中的,8,位立即数。,#data16,:表示包含在指令中的,16,位立即数。,rel,:以补码形式表示的,8,位相对偏移量,范围为,-128127,,主要用在相对寻址的指令中。,addr16,和,addr11,:分别表示,16,位直接地址和,11,位直接地址。,direct,:表示直接寻址的地址。,bit,:表示可位寻址的直接位地址。,(X),:表示,X,单元中的内容。,(X),:表示以,X,单元的内容为地址的存储器单元内容,即,(X),作地址,该地址单元的内容用,(X),表示。,/,和符号:,“,/,”,表示对该位操作数取反,但不影响该位的原值。,“,”,表示操作流程,将箭尾一方的内容送入箭头所指另一方的单元中去。,3.2,寻 址 方 式,寻址方式:,CPU,执行一条指令时怎样找到该指令所要求的操作数的方式。,立即寻址,寄存器寻址,寄存器间接寻址,直接寻址,变址寻址,相对寻址,位寻址,立即寻址,操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分与操作码一起存放在程序存储器中,可以立即得到并执行,不需要经过别的途径去寻找。,*,在一个数的前面冠以,#,符号作前缀。,寄存器寻址,在指令选定的某寄存器中存放或读取操作数,以完成指令规定的操作。,*,ACC,,,DPTR,,,AB,,,Rn,,,Cy,寄存器间接寻址,由指令指出某一寄存器的内容作为操作数地址的寻址方法。,*,寄存器中的内容不是操作数本身,而是操作数的地址,到该地址单元中才能得到操作数。,*,Ri,,,DPTR,*,可寻址内部,RAM,(,Ri,)和外部数据存储器(,Ri,DPTR),图,3.1,寄存器间接寻址示意图,直接寻址,指令中直接给出操作数所在的存储器地址供存取数。,*,直接寻址可用于访问片内数据存储器(低,128,字节,),、,SFR,。,变址寻址,基址寄存器加变址寄存器两者内容的和作为程序存储器地址,再寻址该单元,读取数据。,*,以数据指针寄存器,DPTR,或,PC,作为基址寄存器,累加器,A,作为变址寄存器(,DPTR+A,PC+A),。,*,常用于访问程序存储器中的常数表。,图,3.2,变址寻址示意图,相对寻址,以当前程序计数器,PC,值加上指令中给出的偏移量,rel,,而构成实际操作数地址。,*,用于访问程序存储器,常出现在相对转移指令中。,*,当前,PC,值指相对转移指令的存储地址加上该指令的字节数。,*,偏移量,rel,是有符号的单字节数,以补码表示,范围是,-128,+127,。转移的地址,(,目的地址,),为:,目的地址,=,当前,PC,值,+rel=,指令存储地址,+,指令字节数,+rel,位寻址,在位操作指令中直接给出位操作数的地址。,*,片内,RAM,中的,128,位和特殊功能寄存器,SFR,中的,93,位。,3.3,数据传送类指令,访问片内数据存储器的一般数据传送指令,功能,:实现数在片内,RAM,单元之间、寄存器之间、寄存器与,RAM,单元之间的传送。,格式,:,MOV,,,;目的操作数单元源,操作数,(,或单元,),图,3.3,访问片内,RAM,的一般传送指令操作关系图,表,3.1,访问片内,RAM,的一般传送指令表,片内特殊传送指令,堆栈操作指令,(SP)(SP)-1,修改指针,指向新栈顶,(direct)(SP)+1),把栈顶的数据弹出到直接寻址单元中去,PUSH direct,;,POP direct,;,(SP)direct,把直接地址单元的内容压入,SP,所指单元内,(SP)(SP)+1,修改指针,使其指向栈顶上的一个存数单元,*,机器码分别为:,C0 direct,和,D0 direct,。,数据交换指令,片外数据存储器数据传送指令,指令助记符 操作功能注释 机器码,(H),MOVX A,,,DPTR,;,(A)(DPTR)E6,MOVX A,,,Ri,;,(A)(Ri)E2,、,E3,MOVX DPTR,,,A,;,(DPTR)(A)F0,MOVX Ri,,,A,;,(Ri)(A)F2,、,F3,*,对片外扩展的数据存储器,RAM,或,I/O,口进行数据传送,必须采用寄存器间接寻址的方法,通过累加器,A,来完成。,访问程序存储器的数据传送指令,指令助记符 操作功能注释 机器码,(H),MOVC A,,,A+DPTR,;,(A)(A)+(DPTR)93,MOVC A,,,A+PC,;,(PC)(PC)+1,,,(A)(A)+(PC)83,*,访问程序存储器的数据传送指令又称作查表指令,采用基址寄存器加变址寄存器间接寻址方式。,*前一条指令采用,DPTR,作基址寄存器,数据表格可以存放在程序存储器,64 KB,地址范围的任何地方。,*后一条指令以,PC,作为基址寄存器,查表范围只能在,256,个字节范围内。编程时需要进行偏移量的计算,即,MOVC A,,,A+PC,指令所在地址与表格存放首地址间的距离字节数的计算,并需要一条加法指令进行地址调整。偏移量计算公式为:,偏移量,=,表首地址,-(MOVC,指令所在地址,+1),3.4,算术运算类指令,算术操作类指令共,24,条,包括加法、带进位加法、带减位减法、加,1,、减,1,、乘除及十进制调整指令。,*算术运算结果影响标志位,Cy,、,AC,、,OV,、,P,。,表,3.2,加减法指令表,加、减法指令,图,3.4,加减法指令形式结构图,(a),加减法指令关系图;,(b),加,1,、减,1,指令关系图,十进制调整指令,若,(A),30,9,或,(AC)=1,,则,(A),30,(A),30,+06H,若,(A),74,9,或,(CY)=1,,则,(A),74,(A),74,+06H,DA A,;,*,若,AC=1,,,CY=1,同时发生,或者高,4,位虽等于,9,但低,4,位修正后有进位,则,A,应加,66H,修正。,*,十进制调整指令是一条对二,-,十进制的加法进行调整的指令。两个压缩,BCD,码按二进制相加,必须在加法指令,ADD,、,ADDC,后,经过本指令调整后才能得到正确的压缩,BCD,码和数,实现十进制的加法运算。,*,DA,指令不能对减法进行十进制调整。做减法运算时,可采用十进制补码相加,然后用,DA A,指令进行调整。,机内十进制补码可采用:,x,补,=9AH-x,。,乘、除法指令,MUL AB,;,(B)(A),(B),158,(A)(A),(B),70,CY0,机器码:,A4H,*,乘数放在累加器,A,和寄存器,B,中,乘积,16,位数中的低,8,位存放在,A,中,高,8,位存放在,B,中。,*,若乘积大于,FFH(255),,,OV,置,1,,否则,OV,清零。,*,乘法指令执行后,CY,总是零。,2,除法指令,DIV AB,;,(A),(A),(B),之商,,(B),(A),(B),之余数,(CY),0,,,(,OV,)0,机器码:,84H,*,被,除数放在累加器,A,,除数放在寄存器,B,中,商存于累加器,A,中,余数存于寄存器,B,中。,*,进位标志位,CY,和溢出标志位,OV,均被清零。,*,若,B,中的内容为,0,,,OV,被置,1,,,CY,仍为,0,。,3.5,逻辑运算及移位指令,表,3.3,逻辑操作指令表,表,3.3,逻辑操作指令表,图,3.5,逻辑指令形式结构图,与加、减法指令寻址方式相同的逻辑指令;,(b),与加、减法指令寻址方式不同的逻辑指令,*,逻辑,“,或,”,指令常用来使字节中某些位置,“,1,”,,其它位保持不变。则欲置位的位用,1,与该位相或,保留不变的位用,0,与该位相或。,*,逻辑,异或,指令常用来使字节中某些位进行取反操作,其它位保持不变。欲某位取反该位与,1,相异或;欲某位保留则该位与,0,相异或。还可利用异或指令对某单元自身异或,以实现清零操作。,THANK YOU,SUCCESS,2025/1/25 周六,43,可编辑,*,用移位指令还可以实现算术运算,左移一位相当于原内容乘以,2,,右移一位相当于原内容除以,2,,但这种运算关系只对某些数成立。,3.6,控制转移类指令,控制转移类指令共,17,条,分为无条件转移指令、条件转移指令、子程序调用及返回指令。,3.6,控制转移类指令,无条件转移指令,表,3.4,无条件转移指令,1,LJMP(,长转指令,),LJMP addr16,*,执行后,程序无条件地转向,16,位目标地址,(addr16),处执行,不影响标志位。,*,可以使程序从当前地址转移到,64 KB,程序存储器地址空间的任意地址。,*,执行时间长,字节多。,2,AJMP(,绝对转移指令,),AJMP addr11,*,AJMP,的机器码组成:,a,10,a,9,a,8,0 0 0 0 1 a,7,a,6,a,5,a,4,a,3,a,2,a,1,a,0,*,程序转移的目的地址是由,AJMP,指令所在位置的地址,PC,值加上该指令字节数,2,,构成当前,PC,值。取当前,PC,值的高,5,位与指令中提供的,11,位直接地址形成转移的目的地址。,转移目的地址,(PC),PC,15,PC,14,PC,13,PC,12,PC,11,a,10,a,9,a,8,a,7,a,6,a,5,a,4,a,3,a,2,a,1,a,0,*,程序可转移的位置和,PC,当前值在同一,2 KB,范围内。转移可以向前也可以向后,指令执行后不影响状态标志位。,例:,1,、若,AJMP,指令地址,(PC)=2300H,。执行指令,AJMP 0FFH,后,转移目的地址,(PC)=20FFH,,程序向前转到,20FFH,单元开始执行。,2,、,AJMP,指令地址,(PC)=2FFFH,。执行指令,AJMP 0FFH,后,结果为:转移目的地址,(PC)=30FFH,,程序向后转到,30FFH,单元开始执行。,*,若,addr11,相同,,AJMP,指令的机器码相同,转移的目的地址却可能不同。,3,SJMP(,相对短转指令,),SJMP rel,*,rel,用,8,位带符号数补码表示,转移范围是:相对,PC,当前值向前转,128,字节,向后转,127,字节。,转移目的地址,=SJMP,指令所在地址,+2+rel,*,手工汇编时,,rel,的计算公式:,向前转移:,rel=FEH-(SJMP,指令地址与目的地址差的绝对值,),向后转移:,rel=FEH-(SJMP,指令地址与目的地址差的绝对值,)-2,*SJMP$(80 FEH),造成单指令的无限循环,进入等待状态。,4,JMP A+DPTR(,相对长转移指令,),*,数据指针,DPTR,的内容为基址,以累加器,A,的内容为相对偏移量,在,64 KB,范围内无条件转移。,*,转移地址可以在程序运行中加以改变。,条件转移指令,共有,8,条指令,分为累加器判零条件转移指令、比较条件转移指令和减,1,条件转移指令三类。,*,当某种条件满足时,程序转移执行;条件不满足时,程序仍按原来顺序执行。,*,转移的条件可以是前面指令的执行结果,(,标志位,),,也可以是条件转移指令本身包含的某种运算结果。,*,指令采用相对寻址,程序可在以当前,PC,值为中心的,-128,+127,范围内转移。,表,3.5,条件转移指令,1,判零条件转移指令,以累加器,A,的内容是否为,0,作为转移的条件。,JZ,指令:为,0,转移,不为,0,则顺序执行;,JNZ,指令:不为,0,转移,为,0,则顺序执行。,累加器,A,的内容由这条指令以前的指令执行的结果决定。,指令不作任何运算,也不影响标志位。,2,比较转移指令,*,先对两个规定的操作数进行比较,根据比较的结果来决定是否转移。若两个操作数相等,则不转移,程序顺序执行;若两个操作数不等,则转移。,*,比较是进行一次减法运算,但其差值不保存,两个数的原值不受影响,,标志位要受到影响,。利用标志位,CY,作进一步的判断,可实现三分支转移。,3,减,1,条件转移指令,*,第一操作数减,1,,结果仍保存在第一操作数中,然后判断是否为零。若不为零,则转移到指定的地址单元,否则顺序执行。,*,对于构成循环程序是十分有用的,可以指定任何一个工作寄存器或者内部,RAM,单元作为循环计数器。,3.7,子程序调用与返回指令,子程序调用指令,子程序调用指令有长调用和绝对调用两条,它们都是双周期指令。,*,LCALL,和,ACALL,指令类似于转移指令,LJMP,和,AJMP,,不同之处在于它们在转移前要把执行完该指令的,PC,内容自动压入堆栈后,才将子程序入口地址,addr16(,或,addr11),送,PC,,实现转移。,*,LCALL,可调用,64 KB,范围内的子程序。该指令为,3,字节,所以执行该指令时首先应执行,(PC)(PC)+3,,获得下一条指令地址,并把此时的,PC,内容压入堆栈,(,先压入低字节,后压入高字节,),作为返回地址,堆栈指针,SP,加,2,指向栈顶,然后把目的地址,addr16,送入,PC,。,*,指令执行不影响标志位。,*,ACALL,与,AJMP,一样提供,11,位地址,只能调用与,PC,在同一,2 KB,范围内的子程序。指令为,2,字节指令,执行该指令时应执行,(PC)(PC)+2,以获得下一条指令地址,并把该地址压入堆栈作为返回地址。,*,机器码的组成如下:,a,10,a,9,a,8,1 0 0 0 1 a,7,a,6,a,5,a,4,a,3,a,2,a,1,a,0,*,被调用子程序的目的地址由执行,ACALL,指令的当前,PC,值的高,5,位与指令中提供的,11,位直接地址形成。,返回指令,*,RET,指令必须作子程序的最后一条指令;,RETI,必须作中断服务程序的最后一条指令。,*,RETI,指令除恢复断点地址外,还恢复,CPU,响应中断时硬件自动保护的现场信息。执行,RETI,指令后,将清除中断响应时所置位的优先级状态触发器,使得已申请的同级或低级中断申请可以响应;而,RET,指令只能恢复返回地址。,空操作指令,NOP,;,(PC)(PC)+1,*,在设计延时程序、拼凑精确延时时间及在程序等待或修改程序等场合是很有用的。,3.8,位操作类指令,位地址的表示方法:,直接位地址表示,如,D5H,。,点表示,如,PSW.5,。,位名称表示,如直接用,F0,表示。,用户定义名称表示,如用户定义用,FLG,代替,F0,。,表,3.6,条件转移指令,图,3.6,硬件逻辑电路图,3.9,伪指令,伪指令能够帮助进行汇编,不产生目标程序,不影响程序的执行。,主要用来指定程序或数据的起始位置,给出一些连续存放数据的地址或为中间运算结果保留一部分存储空间以及表示源程序结束等等。,设置目标程序起始地址伪指令,ORG,格式:,符号:,ORG,地址,(,十六进制表示,),功能:放在一段源程序,(,主程序、子程序,),或数据块的前面,规定后面的目标程序或数据块的起始地址。,ORG 2000H,START,:,MOV A,,,#7FH,*,一个源程序中,可以多次使用,ORG,指令来规定不同程序段的起始位置,但各程序段之间不能重叠。,结束汇编伪指令,END,格式:,符号:,END,功能:汇编语言源程序的结束标志,表示汇编结束。,*,一个源程序只能有一个,END,命令,否则就有一部分指令不能被汇编。,END,前面若加标号,应与被结束程序段的起始点的标号一致,表示结束的是该程序段。,定义字节伪指令,DB,格式:,标号:,DB,项或项表,功能:把项或项表的数据,(,字符串按字符顺序以,ASCII,码,),存入从标号地址开始的连续存储单元中。,项或项表指一个字节数据,用逗号分开的字节数据串,或以引号括起来的字符串。,ORG 2000H,TAB1,:,DB 30H,,,8AH,,,7FH,,,73,DB 5,,,A,,,BCD,(2000H)=30H,(2001H)=8AH,(2002H)=7FH,(2003H)=49H,;十进制数,73,以十六进制数存放,(2004H)=35H,;,35H,是数字,5,的,ASCII,码,(2005H)=41H,;,41H,是字母,A,的,ASCII,码,(2006H)=42H,;,42H,是字符串,BCD,中,B,的,ASCII,码,(2007H)=43H,;,43H,是字符串,BCD,中,C,的,ASCII,码,(2008H)=44H,;,44H,是字符串,BCD,中,D,的,ASCII,码,定义字伪指令,DW,格式:,标号:,DW,项或项表,功能:定义字的内容。,项或项表指所定义的一个字,(,两个字节,),或用逗号分开的字串。汇编时,机器自动按高,8,位先存入,低,8,位在后的格式排列。,ORG 1500H,TAB2,:,DW 1234H,,,80H,汇编以后:,(1500H)=12H,(1501H)=34H,(1502H)=00H,(1503H)=80H,预留存储空间伪指令,DS,格式:,标号:,DS,表达式,功能:从标号地址开始,保留若干个字节的内存空间以备存放数据。,保留的字节单元数由表达式的值决定。,ORG 1000H,DS 20H,DB 30H,,,8FH,汇编后:从,1000H,开始,预留,32(20H),个字节的内存单元,从,1020H,开始,按,DB,指令赋值。,(1020H)=30H,(1021H)=8FH,。,等值伪指令,EQU,格式:标号:,EQU,项,功能:将项的值赋予,EQU,前面的标号。,项可以是常数、地址标号或表达式。,TAB1,:,EQU 1000H,TAB2,:,EQU 2000,汇编后:,TAB1,、,TAB2,分别具有值,1000H,、,2000H,。,用,EQU,伪指令对某标号赋值后,该标号的值在整个程序中不能再改变。,位地址定义伪指令,BIT,格式:标号:,BIT,位地址,功能:将位地址赋予,BIT,前面的标号。,赋值后可用该标号代替,BIT,后面的位地址。,PLG,:,BIT F0,AI,:,BIT P1.0,程序中就可以把,FLG,和,AI,作为位地址来使用。,3.10,汇编程序设计示例,THANK YOU,SUCCESS,2025/1/25 周六,85,可编辑,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

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

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

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

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

gongan.png浙公网安备33021202000488号   

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

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

客服