《单片机原理及系统设计实用教程》课件第2章 汇编_第1页
《单片机原理及系统设计实用教程》课件第2章 汇编_第2页
《单片机原理及系统设计实用教程》课件第2章 汇编_第3页
《单片机原理及系统设计实用教程》课件第2章 汇编_第4页
《单片机原理及系统设计实用教程》课件第2章 汇编_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

51系列单片机汇编语言的设计

主要内容

51系列单片机指令系统各条指令的格式和功能

51系列单片机寻址方式及内部结构

51系列单片机汇编程序设计

51系列单片机汇编程序设计示例51系列单片机汇编语言概述

MCS-51单片机的111条指令按功用可以分成以下5类

数据传送类(29条);

算术操作类(24条);

逻辑操作类(24条);

控制程序转移类(17条);布尔变量操作类(17条)

数据传送指令

数据传送类指令一共有29条,除了可以通过累加器进行数据传送之外,还有不通过累加器而在数据存储器之间或寄存器与数据存储器之间直接进行数据传送的指令。

MOV操作符,称为一般传送指令

非MOV操作符,称为特殊传送指令,如:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。本节主要介绍

MOV、XCH、堆栈指令等。

以累加器为目的操作数的指令

基本命令格式如下:MOVA,RnMOVA,directMOVA,@RiMOVA,#data例子

MOVA,R1:将工作寄存器R1中的值送入A,R1中的值保持不变。MOVA,30H:将内存30H单元中的值送入A,30H单元中的值保持不变。MOVA,@R1:先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。MOVA,#34H:将立即数34H送入A中,执行完本条指令后,A中的值是34H。

以寄存器Rn为目的操作的指令

基本命令格式如下:MOVRn,AMOVRn,directMOVRn,#data例子

MOVR3,A:将A中的值送入R3,A中的值保持不变。MOVR4,30H:将内存30H单元中的值送入R4,30H单元中的值保持不变。MOVR7,#0D0H:将立即数0D0H送入R7中,执行完本条指令后,R7中的值是D0H。

以直接地址为目的操作数的指令

基本命令格式如下:MOVdirect,AMOVdirect,RnMOVdirect1,direct2MOVdirect,@RiMOVdirect,#data例子

MOV30H,A:将A中的值送入地址30H中,

A中的值保持不变。MOV30H,R1:将寄存器R1中的值送入地址30H中,寄存器R1中的值保持不变。MOV30H,40H:将直接地址40H中的值送入地址30H中。

以间接地址为目的操作数的指令

基本命令格式如下:MOV@Ri,AMOV@Ri,directMOV@Ri,#data例子

MOV@R0,A:将A中的值送入R0中的值为地址的单元中,A中的值保持不变。MOV@R1,21H:。MOV@R1,21H:将地址为21H的单元中的值送入以R1中的值作为地址的单元中。

MOV@R1,#34H:将34H这个值送入以R1中的值作为地址的单元中。

十六位数的传递指令

基本命令格式如下:MOVDPTR,#data168051是一种八位机,这是惟一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。其中高八位送入DPH,低八位送入DPL。

例子

MOVDPTR,#4567H:执行完之后DPH中的值为45H,DPL中的值为67H。累加器A与片外RAM之间的数据传递类指令

基本命令格式如下:MOVXA,@RiMOVX@Ri,AMOVXA,@DPTRMOVX@DPTR,A例子

将外部RAM中200H单元中的内容送入外部RAM中300H单元中。MOVDPTR,#0200HMOVXA,@DPTRMOVDPTR,#0300HMOVX@DPTR,A程序存储器向累加器A传送指令

基本命令格式如下:MOVCA,@A+DPTR本指令是将ROM中的数送入A中。本指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格。

例子

下面通过一个例子加以说明:有一个数在R0中,要求用查表的方法确定它的平方值(此数的取值范围是0~5)MOVDPTR,#TABLEMOVA,R0MOVCA,@A+DPTR……TABLE:DB0,1,4,9,16,25字节交换指令

基本命令格式如下:XCHA,RnXCHA,directXCHA,@Ri例子

设(A)=10H,(R7)=20HXCHA,R7则命令执行后(A)=20H,(R7)=10H半字节交换指令

XCHDA,@Ri堆栈指令

1)进栈指令PUSH基本命令格式如下:PUSHdirect例子下面通过一个例子加以说明:MOVSP,#4FHMOVB,#200MOVA,#30PUSHAPUSHB1)出栈指令POP基本命令格式如下:POPdirect例子接上例:POPAPOPB算术操作指令

与同类八位微处理器相比,MCS-51的算术运算指令增加了除法和乘法指令,但是没有16位数运算指令。这主要是由MCS-51单片机的寄存器只有八位决定的

算术操作类指令用到的助记符有ADD、ADDC、INC、DA、SUBB、DEC、MUL和DIV8种

不带进位位的加法指令

格式如下:ADDA,#DATAADDA,directADDA,RnADDA,@Ri带进位位的加法指令

格式如下:ADDCA,RnADDCA,directADDCA,@RiADDCA,#data带借位的减法指令

格式如下:SUBBA,RnSUBBA,directSUBBA,@RiSUBBA,#data乘法指令格式如:MULAB除法指令格式如:DIVAB

加1指令

格式如下:INCAINCRnINCdirectINC@RiINCDPTR减1指令

格式如下:DECADECRnDECdirectDEC@Ri十进制调整指令

格式如:DAA逻辑运算类指令

逻辑操作类指令包括与、或、异或、清除、求反、左右移位等逻辑操作,该类指令共有24条。逻辑操作类指令用到的助记符有CLR、CPL、RRC、RR、RLC、RL、XRL、ORL和ANL逻辑与指令

格式如下:ANLA,RnANLA,directANLA,@RiANLA,#dataANLdirect,AANLdirect,#data或指令

ORLA,Rn:A和Rn中的值按位“或”,结果送入A中;ORLA,direct:A和与间址寻址单元@Ri中的值按位'或',结果送入A中;ORLA,#data:A和立direct中的值按位'或',结果送入A中;ORLA,@Ri:A和即数data按位'或',结果送入A中;ORLdirect,A:direct中值和A中的值按位'或',结果送入direct中;ORLdirect,#data:direct中的值和立即数data按位'或',结果送入direct中

异或指令

XRLA,Rn:A和Rn中的值按位'异或',结果送入A中;XRLA,direct:A和direct中的值按位'异或',结果送入A中;XRLA,@Ri:A和间址寻址单元@Ri中的值按位'异或',结果送入A中;XRLA,#data:A和立即数data按位'异或',结果送入A中;XRLdirect,A:direct中值和A中的值按位'异或',结果送入direct中;XRLdirect,#data:direct中的值和立即数data按位'异或',结果送入direct中。控制转移类指令这类指令用到的助记符有AJMP、ACALL、LJMP、LCALL、SJMP、JMP、JZ、JNZ、CJNE、DJNZ无条件转移类指令

无条件转移类指令是相对条件转移类指令而言的,它主要包括下面三条指令:l

短转移类指令:AJMPaddr11l

长转移类指令:LJMPaddr16l

相对转移指令:SJMPrel条件转移指令条件转移指令是指在满足一定条件时进行相对转移

判A内容是否为0转移指令

比较转移指令

CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel循环转移指令

循环转移指令的基本格式如下:DJNZRn,relDJNZdirect,rel调用与返回指令

1)调用指令调用指令包括:

LCALLaddr16:长调用指令;ACALLaddr11:短调用指令返回指令ret空操作指令nop

布尔变量操作类指令

位传送指令位传送指令的基本格式如下:MOVC,BITMOVBIT,C

位修正指令

位清0指令CLRC:使CY=0CLRbit:使指令的位地址等于0。位置1指令

SETBC:使CY=1。SETBbit:使指定的位地址等于1。位取反指令

CPLC:使CY等于原来的相反的值,由1变为0,由0变为1。CPLbit:使指定的位的值等于原来相反的值,由0变为1,由1变为0。

位逻辑运算指令

位与指令ANLC,bit:CY与指定的位地址的值相与,结果送回CY。ANLC,/bit:先将指定的位地址中的值取出后取反,再和CY相与,结果送回CY,但要注意:指定的位地址中的值本身并不发生变化。位或指令ORLC,bitORLC,/bit

单片机内部结构及寻址方式

方块图和总体结构图

其基本特征如下:l

8位CPU,片内振荡器;l

4KB/8KB的只读存贮器ROM,128B/256B的读写存贮器RAM;

l

32条I/O(输入/输出)总线;l

21个特殊功能寄存器;l

可寻址各64K的外部数据、程序存贮器空间;l

2个16位的定时器/事件计数器;l

具有两个优先级,5个中断源的嵌套中断结构;l

一个全双工UART(通用异步接收发送器)的串行I/O口;有位寻址功能,适于布尔处理的位处理器

寻址方式

寄存器寻址

寄存器寻址方式可用于访问选定寄存器区的工作寄存器R0~R7例如:MOVA,R1SUBA,R0直接寻址直接寻址指的是指令中含有操作数的直接地址。

专用寄存器

MOVTCON,AMOVSBUF,A内部数据存贮器

MOVA,78H位地址空间

SETBEASETBEX0寄存器间接寻址

该类寻址方式由指令指出某一个寄存器的内容作为操作数的地址。

MOVA,@R0MOVXA,@R1MOVXA,@DPTR立即寻址

该类指令的操作数由指令操作数直接给出,它是惟一一种不把源操作数表示作地址的寻址方式。它在常数前冠以#号,以表明它是立即进行操作的数,而非地址。例如:MOVA,#20H。基址寄存器加变址寄存器间接寻址

这种寻址方式用于访问程序存贮器中的一个字节,该字节的地址由基址寄存器(DPTR或PC)的内容与变址寄存器(A)的内容之和。例如:MOVCA,@A+PCMOVCA,@A+DPTR相对寻址

例:SJMPrel:

位寻址在MCS-51系统中,位地址可以用以下几种方式表达:l

直接使用00H~FFH范围内的某一位来表示;l

采用第几单元第几位的表达方式,例如,20H.4表示20H单元的D4位;l

对于专用寄存器,可以直接用寄存器名加位数的表示方法,例如TCON.3,P1.2等。伪指令

伪指令与指令的概念不同,指令指示计算机完成某种操作,在汇编过程中要生成可执行的目标代码。伪指令则不同,它并不生成可执行的目标代码,只是对汇编过程进行某种控制或提供某些汇编信息。定位伪指令ORGORG1000H 定义字节数据伪指令DBTAB1:DB50H,30H,2定义字数据伪指令DWTAB1:DW2347H,2CH符号定义伪指令EQUNAMEEQUEXPRESSION汇编结束伪指令END位地址符号定义伪指令BITSIGBITP2.151单片机汇编程序设计

MCS-51汇编语言格式与其他汇编语言格式类似,通常由标号、操作码、操作数和注释四项内容组成,其表示格式为:标号

操作码

操作数

;注释

标号:操作码

操作数

;注释

MCS-51程序设计步骤

程序设计的一般步骤为:根据实际任务建立数学模型;绘制程序流程图;编写程序和汇编。

子程序设计

子程序是程序设计中经常使用的程序结构,通过把一些固定的、经常使用的功能做成子程序的形式,可以使源程序及目标程序大大缩短,提高程序设计的效率和可靠性。对于一个子程序,应该注意它的入口参数和出口参数。入口参数是由主程序传给子程序的参数,而出口参数是子程序运算完传给主程序的结果。另外,子程序所使用的寄存器和存储单元往往需要保护,以免影响返回后主程序的运行。

子程序设计及参数传递方法。

例2.1:在MAA单元有两个十六进制数,将它们分别转换成ASCII码,存入ASC及ASC+1单元。因为要进行两次转换,所以可用子程序来完成,参数传递用堆栈来完成。

结构化程序设计

顺序结构程序设计顺序结构程序是指一种无分支的直线程序(程序的执行是按程序计数器PC自动加1的顺序执行)。它主要用数据传送指令和数据运算类指令。

分支程序设计

在一个实际的应用程序中,程序始终是直线执行的情况是很少见的,通常都会有各种分支。所谓分支程序就是利用条件转移指令,使程序执行某一指令后,根据条件是否满足来改变程序执行的次序。在MCS-51指令系统中直接用于判断分支条件的指令有:累加器判零条件转移指令JZ(JNZ)、比较条件转移指令CJNE和位条件转移指令JC(JNC)、JB(JNB)、JBC等指令。

循环程序设计

循环体

循环结束条件

循环初态

计数器控制循环

条件控制的循环常见程序的编写

运算程序

数据转换程序

查表程序

散转程序

1.MCS-51有哪几种寻址方式?简述各寻址方式的功能。2.布尔操作指令中采用了什么寻址方式?3.要访问特殊功能寄存器、寄存器、外部存储器各采用什么寻址方式?4.请写出完成以下操作的指令序列。(1)R7的内容传送到R1。(2)R7的内容传送到A。(3)R7的内容传送到外部存储单元1000H。(4)外部存储单元1000H送到R7。(5)P1.2的内容传送到C。5.比较两个无符号数a、b的大小,根据a>b、a=b、a<b三种不同情况分别转向标号为DAYU、DEYU、XIAOYU的处理程序段,请写相应程序。6.设(A)=58H,(R0)=20H,(R1)=3DH,(R5)=7AH,(40H)=2CH,(20H)=0ECH,请写出下列指令独立执行之后有关寄存器和存储单元的内容,并给出CY、AC和OV的值。(1)MOVA,@R0(2)ANL40H,04FH(3)ADDA,R5(4)DECR57.编程序,将R1中的低4位与40H中的高4位合并成一个8位数并存放在R0中。8.有两个16位无符号数分别存放在内部RAM的40H、41H和50H、51H(低位数在低地址单元),请写出:(1)两个16位数的加法程序,和存于R3、R1中。(R3中存放高位数)

温馨提示

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

最新文档

评论

0/150

提交评论