单片机原理及应用第二章1_第1页
单片机原理及应用第二章1_第2页
单片机原理及应用第二章1_第3页
单片机原理及应用第二章1_第4页
单片机原理及应用第二章1_第5页
已阅读5页,还剩139页未读 继续免费阅读

下载本文档

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

文档简介

第2章 MCS-51单片机指令系统与汇编语言程序设计,主要内容:MCS-51单片机的寻址方式、指令系统、基本程序结构及汇编语言程序的开发与调试。 重 点:寻址方式、各种指令的应用、程序设计的规范、程序设计的思想及典型程序的理解和掌握。 难 点:控制转移、位操作指令的理解,各种指令的灵活应用,程序设计的基本方法以及针对具体的硬件设计出最合理的软件。 要 求: 抽时间自学Keil,C51。,第2章 MCS-51单片机指令系统与 汇编语言程序设计,2.1 概述 2.2 MCS-51单片机的寻址方式 2.3 MCS-51单片机的指令系统 2.4 汇编语言及程序设计 2.5 程序设计举例 2.6 汇编语言的开发环境,指令系统:一台计算机所能识别、执行的指令的集合。 机器语言:指令系统是一套控制计算机执行操作的二进制编码,称为机器语言。特点:机器语言指令是计算机惟一能直接识别和执行的指令。 汇编语言:利用指令助记符来描述指令系统的一套计算机指令。 特点:计算机的指令系统一般都是利用汇编语言描述的,是由计算机硬件设计所决定的。指令系统没有通用性。,2.1 概述,单片机一般是空机,未含任何系统软件。因此在第一次使 用前,必须对其进行编程。,2.1.1 汇编语言指令格式与伪指令 2.1.2 指令的分类 2.1.3 指令中的常用符号,2.1 概述,2.1.1 汇编语言指令格式与伪指令,1常用单位与术语 位(bit):计算机所能表示的最小的、最基本的数据单位,指一个二进制位。 字节(Byte):一个连续的8位二进制数码,1Byte=8bit。 字(Word):通常由16位二进制数码组成,即1Word=2Byte。 字长:计算机一次处理二进制数码的位数。,MCS-51系列单片机都是以Intel公司最早的典型8位产品8051 为核心,增加了一定的功能部件后构成的。本章以8051为主介绍 MCS-51系列单片机。,2汇编语言指令格式,指令格式:指令的表示方式,规定了指令的长度和内部信息的安排。 标号: 操作码 操作数 ,操作数 ;注释 其中: 项是可选项。 标号(符号地址):本条指令起始地址的符号,代表该条指令在程序编译时的具体地址。 操作码(助记符):英文字母、单词表征指令,一般是对应英文的缩写。特点:规定了指令具体的操作功能,描述指令的操作性质,是指令语句的关键,是一条指令中不可缺少的内容。 操作数:一个具体的数据,或存放数据的地址。 注释:针对某指令而添加的说明性文字,增加程序的可读性,不产生可执行的目标代码。,伪指令:汇编程序的控制命令。是程序员发给汇编程序的命令。功能:设置符号值、保留和初始化存储空间、控制用户程序代码的位置。,3伪指令,伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控 制信息,不产生可执行的目标代码,是CPU不能实际执行的指令。,(1)定位伪指令ORG,格式:ORG n 其中:n绝对地址,十六进制数、标号或表达式。 功能:规定编译后的机器代码存放的起始位置。 规定:在一个汇编语言源程序中允许存在多条定位伪指令,但每一个n值都应和前面生成的机器指令存放地址不重叠。例如: ORG 1000HSTART:MOV A,#20HMOV B,#30H,(2)结束汇编伪指令END 格式:标号: END 表达式 功能:源程序的汇编到此结束,其后的任何内容不予理睬。放在汇编语言源程序的末尾。 (3)赋值伪指令EQU 格式:字符名称x EQU 赋值项n 功能:将赋值项n的值赋予字符名称x。程序中凡出现该字符名称x就等同于该赋值项n,其值在整个程序中有效。 规定:在使用时,必须先赋值后使用。赋值项n可以是常数、地址、标号或表达式。,“字符名称”与“标号”表示形式的区别: “字符名称”后无冒号,而“标号”后面有冒号。,(4)定义字节伪指令DB 格式:标号: DB x1, x2, xn 功能:将8位数据(数据组)x1, x2, xn顺序存放在从当前程序存储器地址开始的存储单元中。 规定:xi8位常数(00HFFH )、ASCII码(字符在单引号内)、表达式,字符串(在单引号内,长度80个字符)。两个数据之间用逗号“,”分隔。,(5)定义双字节伪指令DW,格式:标号: DW x1, x2, xn 功能:将双字节数据(数据组)顺序存放在从标号指定地址单元开始的存储单元中。 规定:xi16位数值常数,先存高8位入低位地址单元。 (6)预留存储空间伪指令DS 格式:标号: DS n 功能:从标号指定地址单元开始,预留n个存储单元。 规定:汇编时不对预留存储单元赋值。n数据,表达式。 注意:DB、DW、DS伪指令只能对程序存储器进行赋值和初始化工作,不能用来对数据存储器进行赋值和初始化工作。,(7)定义位地址符号伪指令BIT 格式:字符名称x BIT 位地址n 功能:将位地址n的值赋予字符名称x。 规定:程序中凡出现该字符名称x就代表该位地址。位地址n绝对地址,符号地址。 (8)数据地址赋值伪指令DATA 格式:字符名称x DATA 表达式n 功能:把表达式n的值赋值给左边的字符名称x。 规定: n数据或地址,包含所定义的“字符名称x”在内的表达式,但不能为汇编符号。 DATA与EQU的主要区别是:EQU必须先定义后使用,DATA无限制。 EQU 源程序的开头,DATA源程序的开头或末尾。,2.1.2 指令的分类,MCS-51指令系统有111条指令,分类如下: 1. 按指令字节数分类单字节(49条),双字节(46条),3字节(16条)。 2. 按指令执行时间分类单机器周期指令(65条)、双机器周期指令(44条)和四机器周期指令(2条)。 3. 按功能分类数据传送指令(29条)、算术操作指令(24条)、逻辑操作指令(24条)、控制转移指令(17条)和位操作指令(17条)。,4. 指令的字节数:指令操作码1字节;直接地址1字节,8位数据1字节, 16位数据2字节;操作数中的A、B、R0R7、 C、 Ri、DPTR、 A+ DPTR、 A+ PC等均隐含在操作码中。 (1)1字节指令(单字节指令) 指令中只有操作码。 NOP RET 操作数的寄存器号隐含在指令码中。MOV A,Rn;指令码11101 rrrINC DPTR ;指令码A3H (2)2字节指令(双字节指令)指令的格式:操作码 操作数(操作码为第一字节,操作数为第二字节)MOV A,#data;指令码为0111 0100 #data (3) 3字节指令(三字节指令)指令的格式:操作码 目的操作数,源操作数(三字节:操作码,目的操作数,源操作数)ANL direct,#data;指令码0101 0011 direct #data,SWAP A,2,3,2,2,1,2,3,2,1,1,2,MOV DPTR,#1000H,MOV A,20H,ANL A,#0FH,MOVC A,A+DPTR,MOV 21H,A,MOV SP,#60H,ANL A,#0F0H,MOVC A,A+PC,MOV 22H, A,SJMP ,注:部分特殊功能寄存器SFR占一个字节。,2.1.3 指令中的常用符号,MCS-51指令系统共有44种助记符,类似于8086。常用符号如下: Rn(n=07):工作寄存器组R0R7中的任一个寄存器。 Ri(i=0或1):工作寄存器组中用于间址的寄存器R0, R1。 #data:8位直接参与操作的立即数。 #data16:16位直接参与操作的立即数。 direct:片内RAM的8位单元地址。 addr11:11位目的地址,主要用于ACALL和AJMP指令中。 addr16:16位目的地址,主要用于LCALL和LJMP指令中。 rel:8位二进制地址偏移量(补码),取值范围为128+127,主要用于相对转移指令,以形成转移的目的地址。 DPTR:数据指针,用于寄存器间接寻址方式和变址寻址方式。,bit:片内RAM的位寻址区、可以位寻址的SFR的位地址。 A(或ACC):累加器。 B :B寄存器。 C:PSW中的进位标志位Cy。 :用于间接寻址寄存器指针的前缀标志。 $:当前指令的地址。 /:在位操作指令中,对该位先求反后再参与操作。 (X):由X所指定的某寄存器或某单元中的内容。(X):由X间接寻址单元中的内容。 :指令的操作结果是将箭头右边的内容传送到左边。 :指令的操作结果是将箭头左边的内容传送到右边。 、 、 :表示逻辑或、与、异或。,寻址方式:说明操作数所在地址的方法。或指令按地址获得操作数的方式。计算机在设计时决定了它的寻址方式,寻址方式越多,计算机的灵活性越强,指令系统也就越复杂。MCS-51单片机的指令系统提供了七种寻址方式,分别为:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。一条指令可能含多种寻址方式。,2.2 MCS-51单片机的寻址方式,计算机执行程序实际上是在不断寻找操作数并进行操作的过程。,2.2.1 立即寻址,定义:立即参与操作的数据(立即数)直接写在指令中。 特点:指令中直接含有所需8位/16位的操作数。处于指令的第二字节和第三字节的位置上。 立即数表示方法:#data8,#data16。 MOV A,#2DH ;(A) 立即数2DHMOV A,2DH ;(A) 内部RAM的2DH单元内容ADD A,#05H ;(A)(A)+立即数 05HMOV DPTR,#1000H ; ( DPTR)立即数 1000H,2.2.2 直接寻址,定义:操作数的地址直接写在指令中。 特点:指令中含有操作数的地址指出了参与操作的数据所存放在存储器单元(位)的地址。 寻址范围:ROM、片内RAM、SFR和位地址空间。 MOV R1,2DH ;(R1) (2DH)MOV 30H,4AH ;(30H)(4AH) 注意:MOV A, SP ; (A) (SP) MOV A, 81H ; (A) (SP) MOV P1, #5AH ; (P1)(#5AH) MOV 90H, #5AH ; (P1)(#5AH),2.2.3 寄存器寻址 定义:操作数存放在MCS-51内部的Rn或部分专用寄存器中。 特点:指令中指出的寄存器的内容作为操作数。 寻址范围:四组通用寄存器Rn(R0R7)、部分专用寄存器( A, B, DPTR, Cy )。MOV A,R7 ; (A) (R7)MOV 30H,B ;(30H)(B)MOV DPTR,#1000H ; (DPTR) 1000H,存放操作数的寄存器在指令代码中不占据单独的一个字节, 嵌入(隐含)到操作码字节中。,2.2.4 寄存器间接寻址(寄存器间址) 定义:指令的寄存器中存放的是操作数据的单元地址。 特点:二次寻找操作数地址的寻址方式。 寻址范围:内部RAM低128B(只能用R0或R1),外部RAM(R0、R1,DPTR)。MOV R1,#30H ; (R1) 立即数30H MOV R1,#0FH ; (30H)立即数0FHMOV A,R1 ; (A)(30H)=立即数0FH,寄存器间接寻址,寄存器前边必须加前缀符号“”, 不能用于寻址特殊功能寄存器SFR。,2.2.5 变址寻址(基址加变址寄存器间接寻址) 定义:操作数存放在变址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址单元中。 特点:单字节指令,指令操作码中隐含基址寄存器和变址寄存器。执行时,基地址+偏移地址操作数地址操作数完成相应的操作。 寻址范围:ROM,主要用于查表性质的访问。 注意:A中存放的偏移地址的范围为00HFFH(无符号数)。MCS-51单片机共有以下三条变址寻址指令:MOVC A, A+PC ;(A)(A)+(PC)+1)MOVC A, A+DPTR ;(A)(A)+(DPTR)JMP A+DPTR ;(PC)(A)+(DPTR),如:(DPTR)= 1234H,(A)= 50H,ROM的(1284H)= 65H。执行MOVC A, A+DPTR 过程:(A)+(DPTR)= 1284H(1284H)= 65H (A)=65H,2.2.6 相对寻址 定义:将程序计数器PC的当前值(取出本条指令后的PC值)与+rel新的转移目标地址。 特点:用于程序的相对转移,易于生成浮动代码。 如: SJMP rel ; (PC)(PC) + 2 + rel 双字节指令 相对转移指令的目的地址指令地址指令字节数偏移量 寻址范围:ROM。,相对地址偏移量(rel):8位二进制补码,范围为128127。 在程序中,“rel” 通常用“标号”代替。,分析指令SJMP 06H的执行过程及执行结果。 执行的过程如下图所示。,2.2.7 位寻址 定义:指令中给出的操作数是一个可单独寻址的位地址。 特点:直接寻址方式的一种,对8位二进制数中的某一位的地址进行操作。 寻址范围:片内RAM低128B中位寻址区、部分SFR(83位)。 可位寻址的位地址的表示形式: (1)直接使用位地址。如: MOV 00H, C ;(00H)(Cy)其中:00H是片内RAM中20H地址单元的第0位。,(2)字节地址加位序号的形式。如:MOV 20H.0, C ; (20H.0)(Cy) 其中:20H.0是片内RAM中20H地址单元的第0位。 (3)位的符号地址(位名称)的形式。利用部分特殊功能寄存器各位的特定名称来访问该位。如: ANL C, P ; (C) (C)(P)其中:P是PSW的第0位,C是PSW的第7位。 (4)字节符号地址(字节名称)加位序号的形式。利用部分特殊功能寄存器名称加位序号形式来访问该位。 如: CPL PSW.6 ; (AC) ( )其中: PSW.6表示该位是PSW的第6位。,例题1 指出下列指令中源操作数的寻址方式,寄存器寻址,立即寻址,寄存器间接寻址,直接寻址,变址寻址,相对寻址,位寻址,MOV A,R1 ;(A)(R1),ADD A,#05H ; (A)(A)+立即数 05H,MOV A,R1 ; (A) (R1),MOV 30H,4AH ;( 30H )(4AH),MOVC A,A+DPTR ;(A)(A)+(DPTR),SJMP LP ; (PC)(PC)+ 2 + 偏移量,MOV 65H, C ;(65H)(Cy),2.3 MCS-51单片机的指令系统,MCS-51指令系统:44种助记符,33种功能,51种操作,111条指令(指令助记符与操作数的各种寻址方式的结合)。MCS-51单片机指令系统按其功能可分为五类:数据传送类指令算术运算类指令逻辑运算和移位类指令控制转移类指令位操作类指令,学习指令系统时,应注意:(1)指令的格式、功能;(2)操作码的含义,操作数的表示方法;(3)寻址方式,源、目的操作数的范围;(4)对标志位的影响;(5)指令的适用范围;(6)正确估算指令的字节数。,操作码1字节。操作数中: 直接地址derict1字节,#data1字节,#data16两字节; A、B、R0R7、 C、 Ri、DPTR、 A+ DPTR、 A+ PC等 均隐含在操作码中。特殊功能寄存器SFR一个字节。,2.3 MCS-51单片机的指令系统,2.3.1 数据传送类指令(29条) 2.3.2 算术运算类指令(24条) 2.3.3 逻辑运算及移位类指令(24条) 2.3.4 控制转移类指令(17条) 2.3.5 位操作(布尔操作)类指令(17条),2.3.1 数据传送指令,最基本、最主要的操作指令。29条,可分为五类: 内部RAM间传送: (MOV16条) 外部RAM与累加器间传送:(MOVX4条) ROM向累加器传送:(MOVC2条) 数据交换:( SWAP, XCH,XCHD5条) 堆栈操作: (PUSH,POP2条) 寻址范围:累加器A、片内RAM、SFR、片外RAM、ROM。 功能:(目的地址)(源地址),表示为: 源地址单元的内容不变。 对标志位的影响:除以累加器A为目的操作数的数据传送指令对P标志位有影响外,其余均不影响标志位。,1内部RAM数据传送指令(16条) 格式: MOV , 范围:片内RAM、SFR中。 指令形式:按目的操作数可将内部数据传送指令分为五类。 (1)以累加器A为目的操作数(4条)MOV A , 其中: 包括Rn、Ri、direct、#data。影响P标志。如:MOV A,30H (A)(30H) (2)以工作寄存器Rn为目的操作数(3条)MOV Rn , 其中: 包括A、direct、#data 。如:MOV R7,#30H (R7) #30H,(3)以直接地址单元为目的操作数(5条)MOV direct , 其中: 包括A、Rn、Ri、direct 、#data 。如: MOV 30H, 20H; (30H) (20H) (4)以间址寄存器Ri为目的操作数(3条)MOV Ri , 其中: 包括A、direct 、#data 。如: MOV R1,A ;(R1) (A) (5)16位数据传送指令(1条)MOV DPTR , #data16如: MOV DPTR,#1000H; (DPTR ) #1000H注意:(2)、(3)、(4)、(5)均不影响标志位。,内部数据传送指令的传送关系图,MCS-51允许在两个内部RAM的直接地址之间进行传送数据, 不允许在两个工作寄存器之间直接进行传送数据。,2外部RAM数据传送指令(4条),特点:只能通过A,采用寄存器间址(R0, R1和DPTR)。 指令格式: MOVX A , MOVX , A其中: 、 包括DPTR、Ri (R0, R1) 。 Ri片外RAM的低256个单元;DPTR片外RAM。 对标志位的影响: MOVX A , 只影响P标志; MOVX , A不影响标志位。如: MOVX A , R1 ;(A) (R1) MOVX DPTR,A ;(DPTR) (A),3程序存储器(ROM)数据传送指令(查表指令)(2条),特点:单向传送,只能读到累加器A中。专用于查表。 指令格式:MOVC A , A+DPTP ;(A)(A)+(DPTR) MOVC A , A+PC ;(PC)(PC)+1(A)(A)+(PC) 两条指令的异同:功能相同,使用中存在着差异。(1)查表的位置要求不同 A+DPTR(远程查表):表可放在64KB ROM的任何地址,使用方便。 A+PC (近程查表):表只能放在ROM中查表指令后的256B的地址空间中。,(2)偏移量的计算方法不同 查表地址:A+DPTP(远程查表):(A)+(DPTR) 。A+PC (近程查表):(A)+(PC)+1 偏移量的计算方法:A+DPTP(远程查表):A为欲查数距离表首地址的值。A+PC (近程查表):A的值必须预先设置为:A表首地址当前指令的PC值1这两条指令到程序设计时再详细讲解。,4数据交换指令(5条),功能:保存目的操作数。分两类: (1)半字节数据交换指令(2条) 指令格式: SWAP A ;(A)30(A)74 XCHD A , Ri ;(A)30(Ri)30 (2)字节交换指令(3条) 指令格式:XCH A , 其中: 包括Rn、Ri、direct 。,5堆栈操作指令(2条),指令格式: PUSH direct ; SP(SP)+1 , (SP)(direct)POP direct ;(direct)(SP) , SP(SP)1 特点:特殊的数据传送指令,根据SP中的栈顶地址进行操作。 实质:以栈指针SP为间址寄存器的间址寻址方式。 注意:堆栈区应避开使用的工作寄存器区和其他需要使用的数据区,系统复位后,SP的初始值为07H。一般初始化时要重新设置SP。,如:已知:(40H)=0F0H; (41H)=11H ; (SP)60H 执行下面程序PUSH 40H PUSH 41H POP 42H POP 43H,堆栈指令工作过程,SP,SP,SP,F0H,11H,43H 42H 41H 40H,F0H,11H,11H,F0H,如:设(A)=7BH; (35H)=11H已知(SP)60H 执行下面程序,则:PUSH ACC PUSH 35H POP ACC POP 5AH,; (61H) #7BH,; (62H) (35H) 即:(62H) #11H,; (A) (62H) 即:(A) #11H,; (5AH) (61H) 即:(5AH) #7BH,这是字节交换的一种方式。,2.3.2 算术运算指令 (24条),操作数:目的操作数A中;源操作数在Rn、片内RAM(direct,Ri)中,或#data。算术运算指令可分为: 加法运算: (ADD4条) 带进位加法运算: (ADDC4条) 带借位减法运算: (SUBB4条) 加1/减1操作: (INC,DEC9条) 单字节乘/除法运算: (MUL,DIV2条) 十进制调整: (DA A1条),1.加法指令(4条),指令格式: ADD A , ; (A)(A)+ 包括Rn、Ri、direct、#data。 对标志位的影响:影响PSW中的所有标志位。 2. 带进位的加法指令(4条) 指令格式: ADDC A , ; (A)(A)+ + (Cy)包括Rn、Ri、direct、#data。 对标志位的影响:影响PSW中的所有标志位。,3. 带借位的减法指令(4条),指令格式: SUBB A , ; (A)(A) (Cy)包括Rn、Ri、direct、#data。 对标志位的影响:影响PSW中的所有标志位。 注意:MCS-51指令系统中无不带借位的减法指令, 不带借位的减法: CLR C( Cy=0)SUBB。,4. 十进制调整指令(BCD码修正指令)(1条),功能:跟在ADD、ADDC后面,对运算结果进行压缩BCD码修正,完成十进制加法运算功能。 指令格式:DA A 特点:专用指令。两个压缩的BCD码按二进制数相加后必须经本指令调整才能得到压缩的BCD码的和。 操作数:源操作数只能在累加器A中,结果存入A中。 注意:只适用加法,不能对减法指令进行修正。,5. 加1指令(增量指令)(5条),功能:操作数所指定的单元的内容加1 。 指令格式:INC ; + 1包括 A、Rn、direct、Ri、 DPTR 操作数:只有一个操作数,即是源操作数又是目的操作数。 对标志位的影响:除对累加器A操作影响P标志位外,其余均不影响PSW的各标志位。,6. 减1指令(减量指令)(4条) 功能:操作数所指定的单元的内容减1 。 指令格式:DEC ; 1包括 A、Rn、direct、Ri。(DPTR无减1) 操作数:只有一个操作数。 对标志位的影响:同加1指令。,7. 乘除指令(2条),功能:实现乘法或除法操作。 特点:在指令系统中执行时间最长,均为四周期指令。 指令格式: MUL AB ;(B)(A)(A)(B)DIV AB ; (A)(A)/(B)(B) 对标志位的影响:影响PSW中的Cy, OV, P标志位,注意乘除运算后结果保存的位置!,2.3.3 逻辑运算和移位指令 ( 24条),对标志位的影响:除了两条带进位的循环移位指令外,其余均不影响PSW中的各标志位;目的操作数是A时影响P标志位。 分类:5种,24条。逻辑与运算:(ANL6条)逻辑或运算:(ORL6条)逻辑异或运算:(XRL6条)累加器清零/取反:(CLR,CPL2条)累加器移位操作: (RL,RLC,RR,RRC4条) 功能:逻辑运算,模拟各种数字逻辑电路的功能,进行逻辑电路的设计。,1逻辑与运算指令(6条) 功能:实现两个操作数的逻辑与。 指令格式:ANL A , ; 包括Rn、Ri、direct、#dataANL direct , ; 包括A、#data 适用场合:逻辑与,用于操作数的某些位不变(这些位与“1”),某些位置0(这些位与“0”)。 2逻辑或运算指令(6条) 功能:实现两个操作数的逻辑或。 指令格式:ORL A , ; 包括Rn、Ri、direct、#dataORL direct , ; 包括A、#data 适用场合:逻辑或,用于操作数的某些位不变(这些位或“0”),某些位置1(这些位或“1”)。,3逻辑异或运算指令(6条) 功能:两个操作数的逻辑异或。 指令格式:XRL A , ; 包括Rn、Ri、direct、#dataXRL direct , ; 包括A、#data 适用场合:逻辑异或,用于操作数的某些位不变(这些位异或“0”),某些位取反(这些位异或“1”)。 4循环移位指令(4条)不带进位的循环左、右移位(操作码为RL, RR)带进位的循环左、右移位(操作码为RLC, RRC) 特点:只能对累加器A进行循环移位。 指令格式: 操作码 A 功能:A中的数据逐位左移1位乘2,逐位右移1位除以2。,5累加器清0与取反指令(2条) 指令格式:CLR A ;(A)00HCPL A ;(A)( ) 特点:节省存储空间,提高程序执行效率。 对标志位的影响:CLR 只影响P标志位,CPL 不影响标志位。,循 环 移 位 指 令 示 意 图,2.3.4 控制转移指令 (17条),功能:改变PC中的内容,控制程序执行的流向,实现程序分支转向。 分类:4种,17条。无条件转移:(LJMP,AJMP,SJMP,JMP4条)条件转移(判断跳转):(JZ,JNZ,CJNE,DJNZ8条)子程序调用及返回:(LCALL,ACALL,RET,RETI4条)空操作: (NOP1条) “耗时”一个机器周期。 对标志位的影响:除了CJNE影响Cy外,其余均不影响标志位。,1无条件转移指令(4条) 定义:不规定条件的程序转移。 指令格式:长转移指令: LJMP addr16 ;(PC)addr150绝对转移指令: AJMP addr11 ;(PC)(PC)+2, PC100 addr11相对(短)转移指令:SJMP rel ;(PC)(PC)+2+rel间接(散)转移指令:JMP A+DPTR ;(PC) (DPTR)+(A),注意: (1)指令中的地址或偏移量均可采用标号,只有在执行前才被汇编成实际的二进制地址。 (2)指令的转移范围:在执行当前转移指令后的PC值的基础上:LJMP: 64KBAJMP :2KBSJMP : 128+127(用补码表示)JMP : 64KB,(3)SJMP rel 中地址偏移量rel的计算方法:rel = 转移目标地址转移指令地址(当前PC值) 2 (4)原地踏步(暂停当前的程序)的实现SJMP $或 LP: SJMP LP (5)JMP A+DPTR 功能:实现程序的分支转移(散转), DPTR为转移目的的起始地址,A为转移目的的偏移量。 (6)在编程中,经常使用短转移指令SJMP和相对转移指令AJMP,以便生成浮动代码,并不经常使用长转移指令LJMP。,2条件转移指令(2条) 功能:实质上是A判零指令。在规定的条件满足时进行程序转移,否则程序往下顺序执行。 指令格式:JZ rel ; 若(A)=0,则转移 (PC) (PC)+2+rel若(A)0,则顺序执行(PC) (PC) +2 JNZ rel ; 若(A)0 ,则转移 (PC) (PC)+2+rel若(A) =0 ,则顺序执行(PC) (PC) +2 指令的转移范围:rel的取值范围为128+127(用补码表示)。 可以采用符号地址表示。 偏移量rel的计算方法:rel = 转移目标地址转移指令地址(当前PC值) 2,3比较转移指令(4条) 指令格式: CJNE 目的操作数,源操作数,rel 操作数:目的操作数为A时,源操作数为#data、direct。目的操作数为Rn、Ri时,源操作数为#data;即:CJNE A, direct, relCJNE A, #data, relCJNE Rn, #data, relCJNE Ri, #data, rel (源为#data时,目的为 A 、 Rn 、 Ri;源为 direct ,目的为A。) 用途:比较两个操作数作为条件控制程序的转移 。 若(目的操作数)=(源操作数),则程序继续执行,(PC)(PC) +3 若(目的操作数)(源操作数),则程序转移,(PC)(PC) + rel +3,Cy0 若(目的操作数)(源操作数),则程序转移,(PC)(PC) + rel +3,Cy1,功能:比较两个操作数的大小。 对标志位影响:影响Cy标志位,不影响其他标志位。 指令的转移范围:rel的取值范围128+127(用补码表示)。 可以采用符号地址表示。 注意:比较是通过不存最后的差值结果的减法实现的,影响Cy标志位,指令执行后两个操作数的内容不变。,4循环(减1条件)转移指令(2条) 功能:减1判非0则转移。主要用于控制循环程序的循环次数。 特点:减1与条件转移两种功能结合在一起。 指令格式: DJNZ , rel ; 1若0,则转移 (PC) (PC)+2+rel 若0,则不转移 (PC) (PC) +2其中: 为Rn、direct,条件转移指令、比较转移指令、循环(减1条件)转移指令 均为相对转移指令,指令的转移范围有限128+127。 若要实现64KB范围内的转移,可借助于LJMP的过渡来实现。,5子程序调用与返回指令(4条) 定义:具有完整功能的程序段定义为子程序。 功能: 供主程序在需要时调用。 特点:子程序可以在程序中反复多次使用,以简化源程序的书写;可以嵌套,有利于模块化程序设计。 主程序调用子程序,必须有:子程序调用指令:在主程序中使用;子程序返回指令:子程序的最后一条指令。调用与返回指令是成对使用的。 子程序调用指令自动实现:PC中的断点地址堆栈,子程序入口地址PC。 子程序返回指令自动实现:堆栈中的断点地址PC。 注意:子程序调用时应注意入口参数设置,子程序返回时应注意出口参数的传递。,主程序调用子程序,两级子程序嵌套,指令格式: (1)绝对短调用指令ACALL addr11 ; (PC) (PC) +2,(SP) (SP) +1,(SP)(PC)70(SP) (SP) +1, (SP) (PC) 158, (PC) 100addr11其中: addr11为11位地址,实际编程时可以用符号地址,只能在2KB范围以内调用子程序 。 (2)绝对长调用指令 LCALL addr16 ; (PC) (PC) +3,(SP) (SP) +1,(SP)(PC)70(SP) (SP) +1, (SP) (PC) 158, (PC) 150addr16其中: addr16为16位地址,实际编程时可以用符号地址。可以在64KB范围以内调用子程序 。,(3)子程序返回指令 RET ; (PC) 158(SP), (SP) (SP) 1,(PC) 70 (SP) , (SP) (SP) 1 (4)中断返回指令RETI ; (PC) 158(SP), (SP) (SP) 1,(PC) 70 (SP) , (SP) (SP) 1 注:中断服务程序是一种特殊的子程序,它是在计算机响应中断时,由硬件完成调用而进入相应的中断服务程序。 RETI与RET:指令相仿,都是子程序执行的最后一条指令。区别在于RET是从子程序返回,RETI 是从中断服务程序返回。,6空操作指令NOP (1条) 指令格式:NOP ; (PC) (PC) +1 功能:不执行任何操作,消耗了一个机器周期。 适用场合:常用于软件延时或在程序可靠性设计中用来稳定程序。 特点:NOP占据一个单元的存储空间,除了使PC的内容加1外,CPU不产生任何操作结果,只是消耗了一个机器周期。,2.3.5 位操作指令,位操作(布尔变量操作):操作数不是字节,而是字节中的某个位。每位的取值只能取0或1。 寻址范围:片内RAM位寻址区20H2FH,SFR中的可寻址位。 特点:以进位标志Cy作为位累加器,可以实现布尔变量的传送、运算和控制转移等功能。,分类:以位为单位进行逻辑运算及操作,可分为4种: 位传送:(MOV2条) 位清零/置位:(CLR,SETB4条) 位逻辑与/或/非运算:(ANL,ORL,CPL6条) 位条件转移: (JC,JNC,JB,JNB,JBC5条) 指令中的位地址的表达方式:直接地址方式(如0AFH)、字节地址.位序号(如0D0H.0)、位名称方式(如F0) 、特殊功能寄存器名.位序号(如PSW.3)等几种方式。,1. 位数据传送指令(2条) 特点:在可寻址位与位累加器Cy之间进行的。不能在两个可寻址位间直接进行传送。 指令格式:MOV C, bit ;(Cy)(bit)MOV bit, C ;(bit) (Cy),2. 位逻辑操作指令(6条) 指令格式:操作码 C , ;操作码包括ANL、ORL , 包括bit、/bit。CPL ; ;CPL表示取反, 包括Cy、 bit。 功能:位逻辑操作,组合逻辑电路模拟。采用位操作指令进行组合逻辑电路的设计比采用字节型逻辑指令节约存储空间,运算操作十分方便。 3. 位状态(置位、清0)控制指令(4条) 指令格式:CLR ; 0SETB ; 1; 包括Cy、 bit。,4. 位条件(控制)转移指令(5条) 特点:以位的状态作为实现程序转移的判断条件。 指令格式: (1)以进位标志位Cy内容为条件的转移指令 JC rel ; 若(Cy )=1,则转移(PC)(PC)+2+rel , 否则顺序执行 JNC rel ; 若(Cy )=0,则转移(PC)(PC)+2+rel , 否则顺序执行 (2)以位地址bit内容为条件的转移指令JB bit, rel ; 若(bit)=1,则转移(PC) (PC)+3+rel,否则顺序执行 JNB bit, rel ; 若(bit)=0,则转移(PC) (PC)+3+rel,否则顺序执行 JBC bit, rel ; 若(bit)=1,则转移(PC) (PC)+3+rel,且(bit )0, 否则顺序执行,2.4 汇编语言及程序设计,程序设计:编制计算机的程序。应用计算机所能识别的、接受的语言把要解决的问题的步骤有序地描述出来。 程序设计语言的种类: (1)机器语言:用二进制代码表示的计算机惟一能识别和执行的最原始的程序设计语言。 (2)汇编语言:利用指令助记符描述的程序设计语言。 (3)高级语言:用接近于人的自然语言描述的程序设计语言,是面向过程而独立于机器的通用语言。,汇编语言的指令类型: (1)基本指令:即指令系统中的指令。可执行指令,每一条指令都有对应的机器码。 (2)伪指令:汇编时用于控制汇编的指令。非执行指令,无指令机器码。 汇编语言的语句格式:标号: 操作码 操作数 ,操作数 ;注释 数据的表示方法: (1)二进制数:由0、1组成,“逢2进1”的数制。(0 1,后缀B) (2)十六进制数:便于读写记忆的二进制数的简写形式。(09,AF,后缀:H) (3)十进制数:可用二进制数表示(也称为BCD码, 09表示为: 00001001B ),也可用十进制数表示(后缀D或无后缀)。,2.4 汇编语言及程序设计,2.4.1 汇编语言程序设计的步骤 2.4.2 顺序程序设计 2.4.3 分支程序设计 2.4.4 循环程序设计 2.4.5 查表程序设计 2.4.6 子程序设计,2.4.1 汇编语言程序设计的步骤,汇编语言程序设计:根据任务要求,采用汇编语言编制程序的过程。 汇编语言程序设计的步骤:(1)拟订设计任务书 (2)建立数学模型 (3)确定算法 (4)分配内存单元,编制程序流程图 (5)编制源程序:合理分配存储器单元、I/O接口地址;明确各程序之间的相互关系;编写注释。(6)上机调试(7)程序优化,编制程序流程图:用各种图形、符号、指向线等来说明程序设计的过程。,编制程序流程图通用的图形符号,2.4.2 顺序程序设计,特点:最简单、最基本的程序设计。顺序执行每一条指令。可为复杂程序的子程序。 例题1 将片内RAM 30H单元中的两位压缩BCD码转换成二进制数送到片内RAM 40H单元中。 解:两位压缩BCD码转换成二进制数的算法为:(a1a 0)BCD=10a1a0,程序设计过程,2.4.3 分支程序设计,特点:根据条件,确定程序的走向。 采用指令:条件转移指令、比较转移指令和位转移指令。,分支程序的设计要点如下:(1)建立可供转移指令测试的条件;(2)选用合适的转移指令;(3)在转移的目的地址处设定标号。,解:此题有三个条件,所以有三个分支程序。这是一个三分支归一的条件转移问题。 X是有符号数,判断符号位是0还是1可利用JB或JNB指令。判断X是否等于0则直接可以使用累加器A的判0指令。,例题2 求符号函数的值。已知片内RAM的 40H单元内有一自变量X,编制程序按如下条件求函数Y的值,并将其存入片内RAM 的41H单元中。1 X0Y= 0 X=0 -1 X0,程序设计过程,2.4.4 循环程序设计,特点:程序中含有可以重复执行的程序段(循环体)。 作用:有效地缩短程序,减少程序占用的内存空间,使程序的结构紧凑、可读性好。 组成: (1)循环初始化:位于开头,循环前的准备工作。包括设置各工作单元的初始值以及循环次数等。 (2)循环体:位于循环体内,循环程序的主体(工作程序),多次重复使用。要求编写简练,提高程序的执行速度。 (3)循环控制:位于循环体内,包括循环修改、循环次数修改、条件语句等,控制循环次数和修改每次循环时的参数。 (4)循环结束:位于结尾,存放程序结果,恢复各工作单元。,循环程序的结构:,先处理后控制,先控制后处理,循环程序按结构可分为单重循环与多重循环 1单重循环程序 定义:循环体内部不包括其他循环的程序。,例题3 已知片内RAM 30H3FH单元中存放了16个二进制无符号数,编制程序求它们的累加和,并将其和数存放在R4, R5中。 解:每次求和的过程相同,可以用循环程序实现;16个二进制无符号数求和,循环程序的循环次数应为16次(存放在R2中);和放在R4, R5中(R4存高8位,R5存低8位)。,程序设计过程,例题4 编制程序将片内RAM的30H4FH单元中的内容传送至片外RAM的2000H开始的单元中。,解:每次传送数据的的过程相同循环程序。 30H4FH共32个单元,循环次数应为32次R2中,为了方便每次传送数据时地址的修改间接寻址,送片内RAM数据区首地址R0,片外RAM数据区首地址DPTR。,程序设计过程,2多重循环程序(循环嵌套),定义:循环中还包括有循环。 例题5 编制程序设计50ms延时程序。 单片机主频12MHz。 解:延时程序与MCS-51指令执行时间(机器周期数)和晶振频率fOSC有直接的关系;当fOSC=12MHz时,机器周期为1s,执行一条DJNZ指令需要2个机器周期,时间为2s; 50ms 2s255,单重循环程序无法实现,采用双重循环。,程序设计过程,延时时间为:( 2123 1 21)20021=50.003ms,3设计循环程序时应注意的问题 (1)有始有终,循环执行的条件,避免从循环体外直接转到循环体内部。 (2)多重循环程序从外向内进入,结束时由内向外退出。只允许外循环嵌套内循环。不允许循环相互交叉及从循环程序的外部跳入内部。 (3)确定程序结构,处理好逻辑关系。第一次执行情况画出重复执行的程序框图循环初值循环控制。 (4)优化循环体,改进算法、优选指令,缩短程序执行时间。,4排序程序设计(冒泡法),例题6 设MCS-51单片机内部RAM起始地址为30H的数据块中共存有64个无符号数,编制程序使它们按从小到大的顺序排列。 解:设64个无符号数在数据块中的顺序为:e64, e63, e2, e1,排序方法很多,现以经典的冒泡法为例进行介绍。 冒泡法(两两比较法):e64和e63比较e64e63交换,否则不交换e63和e62比较,是否交换一直比较N01=63次e1位置为数据块中最大值。一个气泡从水底冒出来冒泡法,第二次冒泡过程同第一次,冒泡后在e2位置为数据块中的次大数。e1中为最大数,不需要再比较,比较次数N2=N11=62。如此冒泡共N=N01=63次,实现64个数的排序。 循环次数:冒泡次数N=N01=63次外循环每次冒泡时循环次数N(i) =N(i-1)1 内循环 优化方法:设置“交换标志”,控制是否再需要冒泡。刚进行完的冒泡中发生过数据交换继续冒泡。刚进行完的冒泡中未发生过数据交换停止冒泡。 例如:对于一个已经排好序的数组:1, 2, 3, 63, 64,排序程序根据“交换标志”的状态只要进行一次循环,结束排序程序的再执行。,第一次冒泡排序过程,第二次冒泡排序过程,程序设计过程,2.4.5 查表程序设计,查表:根据给定查找存放在ROM中数据表中与其对应的值。 适用场合:数码显示、打印字符转换、数据转换、函数求值、非线性传感器输出等。 1. 采用MOVC A, A+DPTR指令查表程序的设计方法 (1)自变量X,函数值Y,计算Y; 在ROM中建立函数表(自变量为X)。 (2)在ROM中建立函数表TABLE ,将Y按顺序存放在起始(基)地址为TABLE的ROM中,X A 。 (3)表首地址TABLE DPTR,执行查表指令查表 Y A。,2. 采用MOVC A, A+PC指令查表程序的设计方法与MOVC A, A+DPTR指令的 (1)、(2)相同。 (3)X A,执行ADD A, #data指令修正A。data=函数表首地址PC1 (4)执行查表指令查表 Y A。 例题7利用查表的方法编写Y=X2(X=0,

温馨提示

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

评论

0/150

提交评论