第二章 MCS-51系列单片机的指令系统及汇编语言程序设计.ppt_第1页
第二章 MCS-51系列单片机的指令系统及汇编语言程序设计.ppt_第2页
第二章 MCS-51系列单片机的指令系统及汇编语言程序设计.ppt_第3页
第二章 MCS-51系列单片机的指令系统及汇编语言程序设计.ppt_第4页
第二章 MCS-51系列单片机的指令系统及汇编语言程序设计.ppt_第5页
已阅读5页,还剩125页未读 继续免费阅读

下载本文档

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

文档简介

1、第二章是MCS-51系列单片机的指令系统和汇编语言程序设计,2.1指令格式和寻址方式2.1.1指令格式2 . 1 . 2 MCS-51单片机指令中常用的符号含义2 . 1 . 3 MCS-51单片机的寻址方式,MCS-51单片机汇编语言的指令格式为:2.1.1指令格式,MCS-51单片机汇编语言指令由以下部分组成:标记操作码操作数或操作数地址标签由18个字符组成,第一个字符必须是英文字母,而不是数字或其他符号;标签后必须使用冒号;在程序中,它不能被重用。操作码操作码指示指令的操作类型,并指定指令的具体操作。例如:添加(添加操作)、MOV(数据传输操作)。操作数或操作数地址操作数或操作数地址代表

2、参与运算的数据或数据地址。操作数和操作码必须用逗号分隔。操作数一般有以下几种形式:没有操作数项,操作数隐藏在操作码中,如RET指令;只有一个操作数,例如CPL A指令;有两个操作数,如MOV A,#00H指令,用逗号分隔;有三个操作数,如cjne a,# 00h和next指令,操作数也用逗号分隔。注释注释是对指令的解释,以提高程序的可读性;注释必须以“;”开头并且可以在每个指令之后设置注释。2.1.2指令中符号含义的描述,Rn的当前工作寄存器之一,即R0R7;Ri R0或r 1直接微控制器内存中较低的128字节中的一个字节的地址,或一个特殊寄存器的名称;#data 8位(1字节)立即数# da

3、ta16位(2字节)立即数addr16位目标地址,addr11位目标地址用于LJMP和LCALL指令,Rel仅用于AJMP和ACALL指令,相对于传输指令中的偏移量。DPTR数据指针(由DPH和DPL组成)位内部随机存取存储器(包括特殊寄存器)中可寻址位的地址或名称,以及位地址前加的累加器的间接寻址标志位地址指示位状态被反转(x)寄存器或单元的内容(x)单元的内容由x间接寻址,2 . 1 . 3 MCS-51单片机的寻址方式有七种不同的寻址方式:直接寻址直接寻址寄存器寻址寄存器间接寻址位索引寻址相对寻址,1。立即寻址,MOV a40h;40H立即数被传送到累加器ACC,符号“#”被称为立即数符

4、号,40H在这里被称为立即数。例如,MOV DPTR,#6789H MOV R0,#23H,A,XX,40H,2。直接地址:MOV 30H;将内部RAM30H装置中的号码转移至蓄能器ACC。例如,MOV 60H ADA,30H INC 70H MOV 30H,70H DEC 50H:MOV 30H;如果(30H)=55H、30H、XX、A、55H、MOV A、R0数据存储在R0R7的通用寄存器或特殊寄存器中。例如:MOV A,R7 MOV A,SBUF ADD A,R0,3,寄存器寻址,操作过程:MOV A,R0;让R0是40H,R0,A,XX,40H,4。寄存器间接寻址在51微控制器中有两个

5、寄存器可用于间接寻址,它们是R0和R1。当指向64KB的片外内存地址空间时,DPTR可以用作间接寄存器。MOV A,R0如果R0寄存器中的数据是50H,上述指令意味着将内部随机存取存储器中50H单元中的数字传送到累加器ACC。如果R1的数字是70H,存储在内部内存70H单元中的数据是00H,执行以下指令后,外部内存3FFFH单元的内容是00H。MOV A,R1 MOV DPTR,# 3FFFH MOFX DPTR,A,其中R0作为地址间寄存器:MOV A,R0,其中DPTR作为地址间寄存器:5。位寻址,当单片机需要操作位二进制数时,可以采用位寻址。Exp: setbc指令含义:将特殊寄存器PS

6、W中的CY位置设置为1。CLR P1.0将单片机的P1.0清零。SETB p 1.0;将单片机的P1.0设置为“1”。,6,索引寻址,exp: movca,A DPTR指令含义:假设在执行该指令之前,数据指针DPTR中的数据是1000H,累加器ACC中的数据是50H,由上述指令执行的操作是将程序存储器1050H单元中的数据传送到累加器ACC。还有两个具有相同寻址模式的指令:MOVC A、个人电脑JMP A、DPTR,它们通常用于编写查找表程序。指令:MOVC A,DPTR A工作过程:7,相对寻址,跳转程序中有一个相对寻址模式,程序的编写模式为:SJMP rel程序含义:程序执行上述语句时,根

7、据当前语句位置向前或向后跳转到rel中指示的位置。示例JZ rel cjne a,# data,rel djnzr0,rel,MCS-51单片机指令系统包括111条指令,根据功能可分为以下五类:数据传输与交换指令(29)算术运算指令(24)逻辑运算指令(24)控制转移指令(17)位运算指令(17),2.2 MCS-51单片机指令系统,2.2.1数据传输与交换指令, 常用助记符:MOV微控制器内部内存中MOVX累加器和微控制器外部数据存储器之间的数据传输MOVC累加器和程序存储器XCH累加器之间的数据传输与内部内存单元交换数据XCHD累加器与内部内存单元交换低位半字节数据PUSH将内部内存单元的

8、数据推入堆栈PO P弹出堆栈中的数据。 数据传输和交换指令主要包括:内部数据传输指令、数据指针分配指令、片外数据传输指令、只读存储器数据访问指令、堆栈操作指令和数据交换指令。1.内部随机存取存储器单元之间的数据传输:MOV #数据;一个数据MOV一个,直接;(直接)MOV注册护士;阿(Rn) MOV阿,日;A (Ri),eg:mov a,30h,eg:mov a,# 10h,eg:mov a,r0,eg:mov a,R2,注意:当Ri用于地址间寻址时,只能使用R0和R1。普通注册Rn的转让指令:MOV Rn,A;注册护士(甲)MOV注册护士,直接;Rn(直接)MOV Rn,#数据;Rndata

9、,eg:movr2,a,eg:movr2,30h,eg3360movr2,# 30h,直接地址转移指令:MOV直接,#数据;直接数据MOV直接1,直接2;直接1(直接2) MOV直接,甲;直接(一)直接,日;直接(Ri) MOV直接,Rn;直接(RN),EG:MOV30H,# 33H,EG:MOV30H,31H,EG:MOV30H,R0,EG:MOV30H,A,EG3360MOV30H,R3,通用寄存器间接地址转移指令:MOV Ri,A;(日)(一)MOV日,直接;(日)(直接)MOV日,#数据;(ri)数据,eg:movr1,a,eg:movr1,30h,eg3360movr1,# 30h,

10、2。数据指针分配指令(16位数据指针),当访问片外随机存取存储器和输入输出接口时,或者当查找表时,通常分配DPTR。命令是:MOVDPTR,#data16,Eg:将数据指针DPTR指向存储在只读存储器中的表头地址。MOVDPTR,#TABLE,Eg:将数据指针DPTR指向外部随机存取存储器的2000小时单位。MOVDPTR,2000年3月。片外数据传输指令,使用和Ri间接寻址MOVX A,(DPTR)片外MOVX(Ri)片外MOVX DPTR,a;(DPTR)片外(A)MOFX Ri,A;(日)片外(一)注:本指令用于单片机与外部随机存取存储器和扩展输入输出之间的数据传输;当使用Ri时,只有低

11、8位地址是00HFFH地址段;使用DPTR时,可以访问0000小时FFFFH地址字段。应用程序示例:示例:MOV DPTR,#2003H MOV A,# 00H MOFX DPTR,一个指令执行过程:注意:只有累加器A可以将数据传输到外部内存或接收从外部数据内存返回的数据。例如,MOVX 20H、DPTR MOFX DPTR、SBUF MOFX DPTR、R2 MOFX DPTR、R1都是错误的想法:如果你想把内部内存中40H单元的数据转移到外部内存中2000H单元,你应该怎么做?试着写相应的程序。第四,查找表指令(只读存储器数据传输指令),指令格式:MOVC A,data(甲)(甲)(DPT

12、R) MOVC甲,甲个人电脑;例如,A (a) (PC)、eg:mov dptr、# 3000hov a、# 55h movc a、a dptr:累加器a中09之间有一个特定的数字,因此需要找出该数字的7段公共负显示代码,并将代码返回给累加器。解决方法:在程序内存中画一个区域来存储09的7段公共负显示代码,例如,在0400H的开头存储代码。程序如下:movdptr,# 0400hmovca,a dptr org 0400hdb3fh0的7段显示代码db06h1的7段显示代码db5bh2的7段显示代码db4fh3个显示代码的7个段共66h;7第4段以否定的方式显示代码。注意:我们只能传输(读取)

13、程序存储器中的数据,而不能传输(写入)数据到程序存储器中。因此,声明:MOVC A DPTR,MOVC A个人电脑,都是错误的。思考问题:MCS-51单片机的操作能力相对较差。想一想你是否可以使用查找表来执行函数y=sin(x)的运算?5.堆栈操作指令,包括推送和弹出。在使用堆栈之前,请为堆栈指针分配一个值。指令格式:PUSH直接POP直接注:先进先出原理程序示例:MOV SP,# 30H PUSH SBUF速度(速度)1,31H(速度单位)推力60HSP (SP) 1,32H(60H)POP 60H;60H (32H),SP(SP)-1 POP SBUF;SBUF (31H),SP (SP)

14、-1,VI。字节交换指令。字节交换指令是指内存中某个单元与累加器a之间的数据交换,可以是一个整字节,也可以是半字节。有三种切换模式:1 .全字节交换指令:XCH A,Rn;(一)(二)XCH甲,直接;(一)(直接)阿、日;(一) (日),2。半字节交换指令;(a) 30 (ri) 30、3、累加器A的交换指令SWAP A,例如:如果(A)=指令执行前70H,(A)=指令执行后07H。2-2-2算术运算指令,包括加法、减法、乘法和除法。除了加1和减1的指令之外,所有指令都将影响PSW的标志位。程序状态字PSW,1。无进位加法指令;直接的;直接的。阿(阿)(直接)加阿,日;甲(甲)(日)加甲,#数

15、据;数据示例:将内存中40H和41H单元的数量相加,然后将总和发送到42H单元。MOV A,40H ADD A,41H MOV 42H,A,加法运算对PSW标志位1的影响。在上面的例子中,如果运算结果超过FFH(255),将产生进位相移的CY位将被设置为1。2.如果预先声明有符号的数字被放置在40H和41H中,则在执行操作指令“ADD A,41H”之后,检查PSW中溢出位OV的状态。如果OV位为1,则运算结果是错误的。溢出条件:如果D6位和D7位之一有进位,而另一位没有进位,OV=1将溢出。二是带进位的加法运算,这种指令主要用于多字节加法运算ADDC A,Rn;ADDC,直接;阿(阿)(直接)(CY)阿,日;甲(甲) (乙)(丙)(丙)ADDC甲,#数据;如果加数和加数是无符号数,请注意进位是否在计算后生成。如果加数和加数是有符号数,计算后要注意它们是否溢出。如果它们溢出,计算结果是错误的;如果没有溢出,注意是否有进位。例如:加

温馨提示

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

评论

0/150

提交评论