片机原理与应用第二章课件

上传人:鲁** 文档编号:578995619 上传时间:2024-08-25 格式:PPT 页数:144 大小:589.50KB
返回 下载 相关 举报
片机原理与应用第二章课件_第1页
第1页 / 共144页
片机原理与应用第二章课件_第2页
第2页 / 共144页
片机原理与应用第二章课件_第3页
第3页 / 共144页
片机原理与应用第二章课件_第4页
第4页 / 共144页
片机原理与应用第二章课件_第5页
第5页 / 共144页
点击查看更多>>
资源描述

《片机原理与应用第二章课件》由会员分享,可在线阅读,更多相关《片机原理与应用第二章课件(144页珍藏版)》请在金锄头文库上搜索。

1、单片机原理与应用单片机原理与应用EmailEmail:20242024年年8 8月月2525日日第第2章章MCS-51单片机指令系统与汇编语单片机指令系统与汇编语言程序设计言程序设计主要内容:主要内容: MCS-51单片机的寻址方式、指令系统、基本程序结构及汇编语言的开发和调试。重点在于寻址方式、各种指令的应用、程序设计的规范、程序设计的思想及典型程序的理解和掌握。难点在于控制转移、位操作指令的理解及各种指令的灵活应用,以及程序设计的基本方法和针对具体的硬件设计出最合理的软件。 指指令令系系统统:一台计算机所能识别、执行的指令的集合就是它的指令系统。 机机器器语语言言:指令系统是一套控制计算机

2、执行操作的二进制编码,称为机器语言。机器语言指令是计算机惟一能识别和执行的指令。 汇汇编编语语言言:指令系统是利用指令助记符来描述的,称为汇编语言。 计算机的指令系统一般都是利用汇编语言描述的,是由计算机硬件设计所决定的。指令系统没有通用性。 单片机一般是空机,未含任何系统软件。因此在第一次使用前,必须对其进行编程, 2.1 2.1 概述概述 2.1.1 2.1.1 汇编语言指令格式与伪指令汇编语言指令格式与伪指令 1 1常用单位与术语常用单位与术语 位位(bitbit):位位是是计计算算机机所所能能表表示示的的最最小小的的、最最基基本本的的数数据据单单位位,位位通常是指一个二进制位。通常是指

3、一个二进制位。 字字节节(ByteByte):一一个个连连续续的的8 8位位二二进进制制数数码码称称为为一一个个字字节节,即即1Byte=8bit1Byte=8bit。 字(字(WordWord):通常由通常由1616位二进制数码组成,即位二进制数码组成,即1Word=2Byte1Word=2Byte。 字字长长:字字长长是是指指计计算算机机一一次次处处理理二二进进制制数数码码位位的的多多少少。MCS-51MCS-51型型单单片机是片机是8 8位机,所以说它的字长为位机,所以说它的字长为8 8位。位。 MCS-51MCS-51系系列列单单片片机机都都是是以以IntelIntel公公司司最最早早

4、的的典典型型产产品品80518051为为核核心心,增增加加了了一一定定的的功功能能部部件件后后构构成成的的。本本章章以以80518051为为主主介介绍绍MCS-51MCS-51系系列单片机列单片机 。2 2汇编语言指令格式汇编语言指令格式 指指令令格格式式:指令的表示方式称为指令格式,它规定了指令的长度和内部信息的安排。完整的指令格式如下: 标号标号: : 操作码操作码 操作数操作数 , ,操作数操作数 ; ;注释注释 其中: 项是可选项。标号:指本条指令起始地址的符号,也称为指令的符号地址。代表该条指令在程序编译时的具体地址。操作码:又称助记符,它是由对应的英文缩写构成的,是指令语句的关键。

5、它规定了指令具体的操作功能,描述指令的操作性质,是一条指令中不可缺少的内容。操作数:它既可以是一个具体的数据,也可以是存放数据的地址。注释:注释也是指令语句的可选项,它是为增加程序的可读性而设置的,是针对某指令而添加的说明性文字,不产生可执行的目标代码。 伪伪指指令令(也也称称为为汇汇编编程程序序的的控控制制命命令令)是是程程序序员员发发给给汇汇编编程程序序的的命命令令,用用来来设设置置符符号号值值、保保留留和和初初始始化化存存储储空空间间、控控制制用用户户程程序序代码的位置。代码的位置。 伪伪指指令令只只出出现现在在汇汇编编前前的的源源程程序序中中,仅仅提提供供汇汇编编用用的的某某些些控控制

6、制信信息息,不不产产生生可可执执行行的的目标代码,是目标代码,是CPUCPU不能执行的指令。不能执行的指令。 3伪指令 (1)定位伪指令 ORGORG 格式格式:ORG n 其其中中:n通常为绝对地址,可以是十六进制数、标号或表达式。 功功能能:规定编译后的机器代码存放的起始位置。在一个汇编语言源程序中允许存在多条定位伪指令,但每一个n值都应和前面生成的机器指令存放地址不重叠。 例如程序例如程序:ORG1000H START:MOVA,#20H MOVB,#30H 3伪指令 (2 2)结束汇编伪指令)结束汇编伪指令ENDEND 格式:格式: 标号标号: END : END 表达式表达式 功功能

7、能:放放在在汇汇编编语语言言源源程程序序的的末末尾尾,表表明明源源程程序序的的汇汇编编到此结束,其后的任何内容不予理睬。到此结束,其后的任何内容不予理睬。3伪指令 (3 3)赋值伪指令)赋值伪指令EQUEQU 格式:字符名称格式:字符名称x EQU x EQU 赋值项赋值项n n 功功能能:将将赋赋值值项项n n的的值值赋赋予予字字符符名名称称x x。程程序序中中凡凡出出现现该该字字符符名名称称x x就就等等同同于于该该赋赋值值项项n n,其其值值在在整整个个程程序序中中有有效效。赋赋值值项项n n可可以以是是常常数数、地地址址、标标号号或或表表达达式式。在在使使用用时时,必须先赋值后使用。必

8、须先赋值后使用。 “ “字符名称字符名称”与与“标号标号”的区别是的区别是“字符名称字符名称”后无后无冒号,而冒号,而“标号标号”后面有冒号。后面有冒号。3伪指令 (4)定义字节伪指令 DBDB 格式格式:标号: DB x1, x2, xn 功功能能:将8位数据(或8位数据组)x1, x2, xn顺序存放在从当前程序存储器地址开始的存储单元中。xi可以是8位数据、ASCII码、表达式,也可以是括在单引号内的字符串。两个数据之间用逗号“,”分隔。 xi为数值常数时,取值范围为00HFFH。xi为ASCII码时,要使用单引号,以示区别。xi为字符串常数时,其长度不应超过80个字符。 3伪指令 (5

9、 5)定义双字节伪指令)定义双字节伪指令 DWDW 格式:格式: 标号标号: DW x: DW x1 1, x, x2 2, x, xn n 功能:将双字节数据功能:将双字节数据 或双字节数据组或双字节数据组 顺序存放在从标顺序存放在从标号指定地址单元开始的存储单元中。其中,号指定地址单元开始的存储单元中。其中,x xi i为为1616位数值位数值常数,占两个存储单元,先存高常数,占两个存储单元,先存高8 8位(存入低位地址单元位(存入低位地址单元中),后存低中),后存低8 8位(存入高位地址单元中)。位(存入高位地址单元中)。3伪指令 (6 6)预留存储空间伪指令)预留存储空间伪指令DSDS

10、 格式:格式: 标号标号: DS n: DS n 功功能能:从从标标号号指指定定地地址址单单元元开开始始,预预留留n n个个存存储储单单元元,汇汇编编时时不不对对这这些些存存储储单单元元赋赋值值。n n可可以以是是数数据据,也也可可以是表达式。以是表达式。3伪指令 (7 7)定义位地址符号伪指令)定义位地址符号伪指令BITBIT 格式:字符名称格式:字符名称x BIT x BIT 位地址位地址n n 功功能能:将将位位地地址址n n的的值值赋赋予予字字符符名名称称x x。程程序序中中凡凡出出现现该该字字符符名名称称x x就就代代表表该该位位地地址址。位位地地址址n n可可以以是是绝绝对对地地址

11、,也可以是符号地址。址,也可以是符号地址。 3伪指令 (8 8)数据地址赋值伪指令)数据地址赋值伪指令DATADATA 格式:字符名称格式:字符名称x DATA x DATA 表达式表达式n n 功功能能:把把表表达达式式n n的的值值赋赋值值给给左左边边的的字字符符名名称称x x。n n可可以以是是数数据据或或地地址址,也也可可以以是是包包含含所所定定义义的的“字字符符名名称称x”x”在内的表达式,但不能是汇编符号。在内的表达式,但不能是汇编符号。 DATADATA与与EQUEQU的的主主要要区区别别是是:EQUEQU定定义义的的“字字符符名名称称”必必须须先先定定义义后后使使用用,而而DA

12、TADATA定定义义的的“字字符符名名称称”没没有有这这种种限限制制。所所以以,DATADATA伪伪指指令令通通常常用用在在源源程程序序的开头或末尾。的开头或末尾。 3伪指令 2.1.2 指令的分类指令的分类 MCS-51MCS-51指指令令系系统统有有111111条条指指令令,可可按按下下列列几几种种方方式式分分类类:1. 1.按指令字按指令字节节数分数分类类 单单字字节节指指令令(4949条条)、双双字字节节指指令令(4646条条)和和三三字字节节指令(指令(1616条)。条)。2. 2. 按指令按指令执执行行时间时间分分类类 单单机机器器周周期期指指令令(6565条条)、双双机机器器周周

13、期期指指令令(4444条条)和四机器周期指令(和四机器周期指令(2 2条)。条)。3. 3. 按功能分按功能分类类 数数据据传传送送指指令令(2929条条)、算算术术操操作作指指令令(2424条条)、逻逻辑辑操操作作指指令令(2424条条)、控控制制转转移移指指令令(1717条条)和和位操作指令(位操作指令(1717条)。条)。 2.1.3 指令中的常用符号指令中的常用符号 RnRn(n=0n=07 7):表示当前工作寄存器:表示当前工作寄存器R0R0R7R7中的任一个寄存器。中的任一个寄存器。 R Ri i(i=0i=0或或1 1):表表示示通通用用寄寄存存器器组组中中用用于于间间接接寻寻址

14、址的的两两个个寄寄存存器器R0, R1R0, R1。 #data#data:表示:表示8 8位直接参与操作的立即数。位直接参与操作的立即数。 #data16#data16:表示:表示1616位直接参与操作的立即数。位直接参与操作的立即数。 directdirect:表示片内:表示片内RAMRAM的的8 8位单元地址。位单元地址。 addr11addr11:表示:表示1111位目的地址,主要用于位目的地址,主要用于ACALLACALL和和AJMPAJMP指令中。指令中。 addr16addr16:表示:表示1616位目的地址,主要用于位目的地址,主要用于LCALLLCALL和和LJMPLJMP指

15、令中。指令中。 relrel:用用补补码码形形式式表表示示的的8 8位位二二进进制制地地址址偏偏移移量量,取取值值范范围围为为 128128+127+127,主要用于相对转移指令,以形成转移的目的地址。,主要用于相对转移指令,以形成转移的目的地址。 DPTRDPTR:数据指针,用于寄存器间接寻址方式和变址寻址方式。:数据指针,用于寄存器间接寻址方式和变址寻址方式。2.1.3 指令中的常用符号 bitbit:表示片内:表示片内RAMRAM的位寻址区,或者是可以位寻址的的位寻址区,或者是可以位寻址的SFRSFR的位地址。的位地址。 A A(或(或ACCACC)、)、 B B :表示累加器、:表示累

16、加器、 B B寄存器。寄存器。 C C:表示:表示PSWPSW中的进位标志位中的进位标志位C Cy y。 :在间接寻址方式中,表示间接寻址寄存器指针的前缀标志。:在间接寻址方式中,表示间接寻址寄存器指针的前缀标志。 $ $:表示当前的指令地址。:表示当前的指令地址。 / /:在位操作指令中,表示对该位先求反后再参与操作。:在位操作指令中,表示对该位先求反后再参与操作。 (X X):表示由:表示由X X所指定的某寄存器或某单元中的内容。所指定的某寄存器或某单元中的内容。 (X)(X):表示由:表示由X X间接寻址单元中的内容。间接寻址单元中的内容。 :表示指令的操作结果是将箭头右边的内容传送到左

17、边。:表示指令的操作结果是将箭头右边的内容传送到左边。 :表示指令的操作结果是将箭头左边的内容传送到右边。:表示指令的操作结果是将箭头左边的内容传送到右边。 、 、 :表示逻辑或、与、异:表示逻辑或、与、异或。或。 寻寻址址方方式式:在在计计算算机机中中,说说明明操操作作数数所所在在地地址址的的方方法称为指令的寻址方式。法称为指令的寻址方式。 计计算算机机执执行行程程序序实实际际上上是是在在不不断断寻寻找找操操作作数数并并进进行行操作的过程。操作的过程。 每每种种计计算算机机在在设设计计时时已已决决定定了了它它具具有有哪哪些些寻寻址址方方式式,寻寻址址方方式式越越多多,计计算算机机的的灵灵活活

18、性性越越强强,指指令令系系统统也也就就越复杂。越复杂。 MCS-51MCS-51单单片片机机的的指指令令系系统统提提供供了了7 7种种寻寻址址方方式式,分分别别为为立立即即寻寻址址、直直接接寻寻址址、寄寄存存器器寻寻址址、寄寄存存器器间间接接寻寻址址、变变址址寻寻址址、相相对对寻寻址址和和位位寻寻址址。一一条条指指令令可可能能含多种寻址方式。含多种寻址方式。2.2 MCS-512.2 MCS-51单片机的寻址方式单片机的寻址方式 2.2.1 立即寻址立即寻址 定义:将将立立即即参参与与操操作作的的数数据据直直接接写写在在指指令令中中,这这种种寻址方式称为立即寻址。寻址方式称为立即寻址。 特点:

19、指指令令中中直直接接含含有有所所需需的的操操作作数数。该该操操作作数数可可以以是是8 8位位的的,也也可可以以是是1616位位的的,常常常常处处在在指指令令的的第第二二字字节节和和第第三三字字节节的的位位置置上上。立立即即数数通通常常使使用用#data#data或或#data16#data16表表示示,在在立立即即数数前前面面加加“#”#”标标志志,用用以以和和直直接寻址中的直接地址(接寻址中的直接地址(direcdirec或或bitbit)相区别。)相区别。 2.2 MCS-512.2 MCS-51单片机的寻址方式单片机的寻址方式 2.2.2 直接寻址 定定义义:将将操操作作数数的的地地址址

20、直直接接存存放放在在指指令令中中,这这种种寻寻址址方式称为直接寻址。方式称为直接寻址。特特点点:指指令令中中含含有有操操作作数数的的地地址址。该该地地址址指指出出了了参参与与操操作作的的数数据据所所在在的的字字节节单单元元地地址址或或位位地地址址。计计算算机机执执行它们时便可根据直接地址找到所需要的操作数。行它们时便可根据直接地址找到所需要的操作数。寻址范围:寻址范围:ROMROM、片内、片内RAMRAM区、区、SFRSFR和位地址空间。和位地址空间。 2.2 MCS-512.2 MCS-51单片机的寻址方式单片机的寻址方式 2.2.3 寄存器寻址寄存器寻址定定义义:操操作作数数存存放放在在M

21、CS-51MCS-51内内部部的的某某个个工工作作寄寄存存器器RnRn(R0R0R7R7)或部分专用寄存器中,这种寻址方式称为寄存器寻址。)或部分专用寄存器中,这种寻址方式称为寄存器寻址。特特点点:由由指指令令指指出出某某一一个个寄寄存存器器的的内内容容作作为为操操作作数数。存存放放操操作作数数的的寄寄存存器器在在指指令令代代码码中中不不占占据据单单独独的的一一个个字字节节,而而是是嵌嵌入(隐含)到操作码字节中。入(隐含)到操作码字节中。寻寻址址范范围围:四四组组通通用用寄寄存存器器RnRn(R0R0R7R7)、部部分分专专用用寄寄存存器器( A, B, DPTR, Cy A, B, DPTR

22、, Cy )。)。2.2 MCS-512.2 MCS-51单片机的寻址方式单片机的寻址方式 2.2.4 寄存器寄存器间间接接寻寻址址定定义义:指指令令给给出出的的寄寄存存器器中中存存放放的的是是操操作作数数据据的的单单元元地地址址。这种寻址方式称为寄存器间接寻址,简称为寄存器间址。这种寻址方式称为寄存器间接寻址,简称为寄存器间址。特特点点:指指令令给给出出的的寄寄存存器器中中存存放放的的是是操操作作数数地地址址。寄寄存存器器间间接接寻寻址址是是一一种种二二次次寻寻找找操操作作数数地地址址的的寻寻址址方方式式,寄寄存存器器前前边边必须加前缀符号必须加前缀符号“ ”。不能用于寻址特殊功能寄存器。不

23、能用于寻址特殊功能寄存器SFRSFR。 寻寻址址范范围围:内内部部RAMRAM低低128B128B(只只能能使使用用R0R0或或R1R1作作间间址址寄寄存存器器)、外外部部RAMRAM(只只能能使使用用DPTRDPTR作作间间址址寄寄存存器器)。对对于于外外部部低低256256单单元元RAMRAM的的访访问问,除除可可以以使使用用DPTRDPTR外外,还还可可以以使使用用R0R0或或R1R1作间址寄存器。作间址寄存器。2.2 MCS-512.2 MCS-51单片机的寻址方式单片机的寻址方式 2.2.5 变址寻址变址寻址定定义义:操操作作数数存存放放在在变变址址寄寄存存器器(累累加加器器A)和和

24、基基址址寄寄存存器器(DPTR或或PC)相相加加形形成成的的16位位地地址址单单元元中中。这这种种寻寻址址方方式式称称为基址加变址寄存器间接寻址,简称为变址为基址加变址寄存器间接寻址,简称为变址寻址。寻址。 特特点点:指指令令操操作作码码中中隐隐含含作作为为基基址址寄寄存存器器用用的的DPTRDPTR(或或PC PC )和和作作为为变变址址用用的的累累加加器器A A。在在执执行行变变址址寻寻址址指指令令时时,MCS-51MCS-51单单片片机机先先把把基基地地址址( DPTRDPTR或或PC PC 的的内内容容)和和地地址址偏偏移移量量(A A的的内内容容)相相加加,以以形形成成操操作作数数地

25、地址址,再再由由操操作作数数地地址址找找到到操操作作数数,并并完完成成相相应的操作。变址寻址方式是单字节指令。应的操作。变址寻址方式是单字节指令。2.2 MCS-512.2 MCS-51单片机的寻址方式单片机的寻址方式 寻寻址址范范围围:只只能能对对程程序序存存储储器器ROM进进行行寻寻址址,主主要要用于查表性质的访问。用于查表性质的访问。注注意意:累累加加器器A中中存存放放的的操操作作数数地地址址相相对对基基地地址址的的偏偏移移量量的的范范围围为为00HFFH(无无符符号号数数)。MCS-51单片机共有以下三条变址寻址指令:单片机共有以下三条变址寻址指令:MOVC A, A+PC ;(A)(

26、A)+(PC)+1 MOVC A, A+DPTR ;(A)(A)+(DPTR) JMP A+DPTR ;(PC)(A)+(DPTR) 2.2 MCS-512.2 MCS-51单片机的寻址方式单片机的寻址方式 2.2.6 相对寻址相对寻址定定义义:将将程程序序计计数数器器PCPC的的当当前前值值(取取出出本本条条指指令令后后的的PCPC值值)与与指指令令第第二二个个字字节节给给出出的的偏偏移移量量(relrel)相相加加,形形成成新新的的转转移移目目标标地地址址。称为相对寻址方式。称为相对寻址方式。特特点点:相相对对寻寻址址方方式式是是为为实实现现程程序序的的相相对对转转移移而而设设计计的的,为

27、为相相对对转转移指令所使用,其指令码中含有相对地址偏移量,能生成浮动代码。移指令所使用,其指令码中含有相对地址偏移量,能生成浮动代码。如:如: SJMP rel ; ; (PCPC)(PCPC) + 2 + rel+ 2 + rel相对转移指令的目的地址指令地址指令字节数偏移量相对转移指令的目的地址指令地址指令字节数偏移量寻寻址址范范围围:只只能能对对程程序序存存储储器器ROMROM进进行行寻寻址址。相相对对地地址址偏偏移移量量(relrel)是是一一个个带带符符号号的的8 8位位二二进进制制补补码码,其其取取值值范范围围为为 128128127127(以(以PCPC为中间的为中间的25625

28、6个字节范围)。个字节范围)。 2.2 MCS-512.2 MCS-51单片机的寻址方式单片机的寻址方式 2.2.7 位寻址位寻址定定义义:指指令令中中给给出出的的操操作作数数是是一一个个可可单单独独寻寻址址的的位位地地址址,这种寻址方式称为位寻址方式。这种寻址方式称为位寻址方式。特特点点:位位寻寻址址是是直直接接寻寻址址方方式式的的一一种种,其其特特点点是是对对8 8位位二进制数中的某一位的地址进行操作。二进制数中的某一位的地址进行操作。寻寻址址范范围围:片片内内RAMRAM低低128B128B中中位位寻寻址址区区、部部分分SFRSFR(其其中中有有8383位可以位寻址)。位可以位寻址)。可

29、位寻址的位地址的表示形式如下:可位寻址的位地址的表示形式如下:(1 1)直接使用位地址形式。如:)直接使用位地址形式。如: MOV 00H, C ;MOV 00H, C ;(00H00H)(C Cy y) 其中:其中:00H00H是片内是片内RAMRAM中中20H20H地址单元的第地址单元的第0 0位。位。2.2 MCS-512.2 MCS-51单片机的寻址方式单片机的寻址方式 (2 2)字节地址加位序号的形式。如:)字节地址加位序号的形式。如: MOV 20H.0, C ; ; (20H.020H.0)(C Cy y) 其中:其中:20H.020H.0是片内是片内RAMRAM中中20H20H

30、地址单元的第地址单元的第0 0位。位。(3 3)位位的的符符号号地地址址(位位名名称称)的的形形式式。对对于于部部分分特特殊殊功功能能寄寄存存器器,其其各各位位均均有有一一个个特特定定的的名名字字,所所以以可可以以用用它们的位名称来访问该位。如:它们的位名称来访问该位。如: ANL C, P ; ; (C C) (C C)(P P) 其中:其中:P P是是PSWPSW的第的第0 0位,位,C C是是PSWPSW的第的第7 7位。位。 (4 4)字字节节符符号号地地址址(字字节节名名称称)加加位位序序号号的的形形式式。对对于于部部分分特特殊殊功功能能寄寄存存器器(如如状状态态标标志志寄寄存存器器

31、PSWPSW),还还可以用其字节名称加位序号形式来访问某一位。如:可以用其字节名称加位序号形式来访问某一位。如: CPL PSW.6 ; ; (ACAC) ( ) 其中:其中: PSW.6PSW.6表示该位是表示该位是PSWPSW的第的第6 6位。位。2.2 MCS-512.2 MCS-51单片机的寻址方式单片机的寻址方式 例题例题1 指出下列指令的寻址方式指出下列指令的寻址方式 MOV A,R1 ;(A)(R1) 寄存器寻址寄存器寻址 ADD A,#05H ; (A)(A)+立即数立即数 05H 立即寻址立即寻址 MOV A,R1 ; (A) (R1) 寄存器间接寻址寄存器间接寻址 MOV

32、30H,4AH ;( 30H )(4AH) 直接寻址直接寻址 MOVC A,A+DPTR ;(A)(A)+(DPTR) 变址寻址变址寻址 SJMP LP ; (PC)(PC)+ 2 + 偏移量偏移量 相对寻址相对寻址 MOV 65H, C ;(65H)(Cy) 位寻址位寻址2.3 MCS-512.3 MCS-51单片机的指令系统单片机的指令系统 MCS-51指指令令系系统统使使用用44种种助助记记符符,它它们们代代表表着着33种种功功能能,可可以以实实现现51种种操操作作。指指令令助助记记符符与与操操作作数数的的各各种种可可能能的的寻寻址址方方式式的的结结合合一一共共可可构构造造出出111条条

33、指指令。令。 MCS-51单单片片机机指指令令系系统统按按其其功功能能可可分分为为数数据据传传送送类类指指令令、算算术术运运算算类类指指令令、逻逻辑辑运运算算和和移移位位类指令、控制转移类指令和位操作类指令五大类。类指令、控制转移类指令和位操作类指令五大类。学习指令系统时,应注意:学习指令系统时,应注意:(1 1)指令的格式、功能)指令的格式、功能 。(2 2)操作码的含义,操作数的表示方法。)操作码的含义,操作数的表示方法。(3 3)寻址方式,源、目的操作数的范围。)寻址方式,源、目的操作数的范围。(4 4)对标志位的影响。)对标志位的影响。(5 5)指令的适用范围。)指令的适用范围。(6

34、6)正确估算指令的字节数。)正确估算指令的字节数。 一一般般地地: : 操操作作码码占占1 1字字节节;操操作作数数中中,直直接接地地址址derictderict占占1 1字字节节,#data#data占占1 1字字节节,#data16#data16占占两两字字节节;操操作作数数中中的的A A、B B、R0R0R7R7、 R Ri i、DPTRDPTR、 A+ A+ DPTRDPTR、 A+ PCA+ PC等均隐含在操作码中。等均隐含在操作码中。2.2 MCS-512.2 MCS-51单片机的寻址方式单片机的寻址方式 2.3.1 数据传送指令数据传送指令 CPU在在进进行行算算术术和和逻逻辑辑

35、操操作作时时,绝绝大大多多数数指指令令都都有有操操作作数数,所以数据传送是一种最基本、最主要的操作。所以数据传送是一种最基本、最主要的操作。 数数据据传传送送指指令令共共29条条,可可分分为为内内部部RAM数数据据传传送送、外外部部RAM数数据据传传送送、程程序序存存储储器器数数据据传传送送、数数据据交交换换和和堆堆栈栈操操作作等等五类。五类。寻址范围寻址范围:累加器累加器A、片内、片内RAM、SFR、片外、片外RAM。功能功能:(目的地址)(目的地址)(源地址)。(源地址)。可表示为可表示为: 源地址单元的内容不变。源地址单元的内容不变。 对对标标志志位位的的影影响响:除除以以累累加加器器A

36、为为目目的的操操作作数数的的数数据据传传送送指指令令对对P标志位有影响外,其余均不影响标志位。标志位有影响外,其余均不影响标志位。 1内部RAM数据传送指令(16条) 格式:格式:MOV , 其中:其中: 表示目的操作数,表示目的操作数, 表示源操作数。表示源操作数。范围:范围:源、目的操作数均在片内源、目的操作数均在片内RAM、SFR中。中。指令形式:指令形式:按目的操作数可将内部数据传送指令分为以下几类。按目的操作数可将内部数据传送指令分为以下几类。(1 1)以累加器)以累加器A A为目的操作数(为目的操作数(4 4条)条)MOV A , 其其中中: 包包括括Rn、Ri、direct、#d

37、ata。(各各个个符符号号的意义见的意义见2.1.3节指令中的常用符号节指令中的常用符号 ,以下同),以下同)只影响只影响PSW中的中的P标志位,不影响其他标志位。标志位,不影响其他标志位。 (2 2)以工作寄存器)以工作寄存器RnRn为目的操作数(为目的操作数(3 3条)条)MOV Rn , 其中:其中: 包括包括A、direct、#data 。(3 3)以直接地址单元为目的操作数()以直接地址单元为目的操作数(5 5条)条) MOV direct , 其中:其中: 包括包括A、Rn、Ri、direct 、#data 。(4 4)以间址寄存器)以间址寄存器RiRi为目的操作数(为目的操作数(

38、3 3条)条) MOV Ri , 其中:其中: 包括包括A、direct 、#data 。(5 5)1616位数据传送指令(位数据传送指令(1 1条)条) MOV DPTR , #data16注:注:(2)、()、(3)、)、(4)、()、(5)均不影响)均不影响标志位。标志位。 内部数据传送指令内部数据传送指令的传送关系如右图所示。的传送关系如右图所示。2 2外部外部RAMRAM数据传送指令(数据传送指令(4 4条)条) CPUCPU与与外外部部数数据据存存储储器器之之间间进进行行数数据据传传送送时时,必必须须使使用用外外部部传传送送指指令令,只只能能通通过过累累加加器器A A,采采用用寄寄

39、存存器器间间接接寻寻址址(用用R0, R0, R1R1和和DPTRDPTR三个间接寻址的寄存器)方式完成。三个间接寻址的寄存器)方式完成。 指令格式指令格式: MOVX A , MOVX A , MOVX , AMOVX , A 其其中中: 、 包包括括DPTRDPTR、RRi i。R Ri i(R0, R0, R1R1)只只能能访访问问片片外外RAMRAM的的低低256256个个单单元元;DPTRDPTR可可以以访访问问片片外外RAMRAM的的全全部部64KB64KB的空间。的空间。 对对标标志志位位的的影影响响: MOVX MOVX A A , , 指指令令只只影影响响PSWPSW中中的的

40、P P标标志志位位,不不影影响响其其他他标标志志位位; MOVX MOVX , , A A指指令令不不影影响响标标志志位。位。3 3程序存储器(程序存储器(ROMROM)数据传送指令(查表指令)()数据传送指令(查表指令)(2 2条)条) 程程序序存存储储器器的的数数据据传传送送是是单单向向的的,并并且且只只能能读读到到累累加加器器A A中中。这类指令专门用于查表,又称为查表指令。这类指令专门用于查表,又称为查表指令。 指令格式:MOVC A , A+DPTPMOVC A , A+DPTP ; ;(A A)(A A)+ +(DPTRDPTR) MOVC A , A+PCMOVC A , A+P

41、C ; ;(PCPC)(PCPC)+1 +1 (A A)(A A)+ +(PCPC) 两条指令的异同:其功能完全相同,但使用中存在着差异。其功能完全相同,但使用中存在着差异。 (1 1)查表的位置要求不同)查表的位置要求不同 采采用用DPTRDPTR作作为为基基地地址址寄寄存存器器,表表可可以以放放在在64KB64KB程程序序存存储储器器空空间的任何地址,使用方便,故称为远程查表。间的任何地址,使用方便,故称为远程查表。 采采用用PCPC作作为为基基地地址址寄寄存存器器,具具体体的的表表在在程程序序存存储储器器中中只只能能在在查表指令后的查表指令后的256B256B的地址空间中,使用有限制,故

42、称为近程查表。的地址空间中,使用有限制,故称为近程查表。 (2 2)偏移量的计算方法不同)偏移量的计算方法不同 采采 用用 DPTRDPTR作作 为为 基基 地地 址址 寄寄 存存 器器 , 查查 表表 地地 址址 为为(A A)+ +(DPTRDPTR)。采采用用PCPC作作为为基基地地址址寄寄存存器器,查查表表地地址为(址为(A A)+ +(PCPC)+1+1。因此偏移量的计算方法不同。因此偏移量的计算方法不同。 采采用用DPTRDPTR作作为为基基地地址址寄寄存存器器,A A为为欲欲查查数数值值距距离离表表首首地地址址的的值值;采采用用PCPC作作为为基基地地址址寄寄存存器器, A A的

43、的值值必必须预先设置为:须预先设置为: A A的值的值= =表首地址当前指令的表首地址当前指令的PCPC值值1 1 数数据据传传输输时时,若若需需要要保保存存目目的的操操作作数数,则则经经常常采采用数据交换指令。用数据交换指令。(1 1)半字节数据交换指令()半字节数据交换指令(2 2条)条) 指令格式: SWAP ASWAP A ; ;(A A)3 30 0(A A)7 74 4 XCHD A , RiXCHD A , Ri ; ;(A A)3 30 0((Ri)(Ri))3 30 0 (2 2)字节交换指令()字节交换指令(3 3条)条) 指令格式:指令格式:XCH A , XCH A ,

44、 其中:其中: 包括包括RnRn、RiRi、direct direct 。4 4数据交换指令(数据交换指令(5 5条)条)指令格式:指令格式: PUSH direct ; SP(SP)+1 , (SP)(direct) POP derect ;(direct)(SP) , SP(SP)1特点:特点:堆栈操作指令是一种特殊的数据传送指令,是根据栈指针SP中的栈顶地址进行数据操作。堆栈操作指令的实质是以栈指针SP为间址寄存器的间址寻址方式。堆栈区应避开使用的工作寄存器区和其他需要使用的数据区,系统复位后,SP的初始值为07H。为了避免重叠,一般初始化时要重新设置SP。 5 5堆栈操作指令(堆栈操作

45、指令(2 2条)条) 功能:功能:实现RAM单元数据送入栈顶或由栈顶取出数据送至RAM单元。适用场合:适用场合:用于执行中断、子程序调用、参数传递等程序的断点保护和现场保护。书写方式:书写方式:堆栈操作指令是直接寻址指令,直接地址不能是寄存器名,因此应注意指令的书写格式。例如: PUSH ACC(不能写成PUSH A) POP 00H (不能写成POP R0)2.3.2 2.3.2 算术运算指令算术运算指令 算术运算指令的两个参与运算的操作数,一个存放在累加器A中(此操作数也为目的操作数);一个存放在R0R7或Ri(片内RAM)中,或是#data(立即数)。 算术运算指令可以分为加法指令、带进

46、位的加法指令、带借位的减法指令、十进制调整指令、加1指令、减1指令、乘除指令。 1. 1. 加法指令(加法指令(4 4条)条) 指令格式:指令格式: ADD A ,ADD A , ; (A)(A)+ 其中:其中: 包括Rn、Ri、direct、#data。对对标标志志位位的的影影响响:ADD对PSW中的所有标志位均产生影响。 2. 2. 带进位的加法指令(带进位的加法指令(4 4条)条) 指令格式:指令格式: ADDC A ,ADDC A , ; ( A) ( A) + + (Cy) 其中:其中: 包括Rn、Ri、direct、#data。对对标标志志位位的的影影响响:ADDC对PSW中的所有

47、标志位均产生影响。 3. 3. 带借位的减法指令(带借位的减法指令(4 4条)条) 指令格式:指令格式: SUBB A ,SUBB A , ; (A)(A) (Cy) 其中:其中: 包括Rn、Ri、direct、#data。对对标标志志位位的的影影响响:SUBB对PSW中的所有标志位均产生影响。 注注意意:MCS-51指令系统中没有不带借位的减法指令,欲实现不带借位的减法计算,应预先置Cy=0(利用CLR C指令),然后利用带借位的减法指令SUBB实现计算。 4. 4. 十进制调整指令(十进制调整指令(1 1条)条) 功功能能:跟在加法指令ADD或ADDC后面,对运算结果的十进制数进行BCD码

48、修正,使它调整为压缩的BCD码数,以完成十进制加法运算功能。 特特点点:十进制调整指令也称为BCD码修正指令,这是一条专用指令。两个压缩的BCD码按二进制数相加后必须经本指令调整才能得到压缩的BCD码的和。源操作数只能在累加器A中,结果存入A中。 指令格式:DA A 注注意意:十进制调整指令不能对减法指令进行修正。BCD码减法必须采用BCD补码运算法则,变减法为补码加法(被减数+减数的补码,减数的补码=9AH减数)。然后对其进行十进制调整来实现。 5. 5. 加加1 1指令(指令(5 5条)条) 功功能能:加1指令又称为增量指令,其功能是使操作数所指 定的单元的内容加1 。指令格式指令格式:I

49、NC INC ; + 1 其中: 即是源操作数又是目的操作数(即只有一个操作数),包括 A、Rn、direct、Ri、 DPTR 。对对标标志志位位的的影影响响:除对累加器A操作影响P标志位外,其他操作均不影响PSW的各标志位。 6. 6. 减减1 1指令(指令(4 4条)条) 功功能能:减1指令又称为减量指令,其功能是使操作数所指定的单元的内容减1 。指令格式指令格式:DEC DEC ; 1其其中中: 即是源操作数又是目的操作数(即只有一个操作数),包括 A、Rn、direct、Ri。对标志位的影响对标志位的影响:同加1指令。7. 7. 乘除指令(乘除指令(2 2条)条) 功能功能:实现乘法

50、或除法操作。特特点点:乘除指令在MCS-51指令系统中执行时间最长,均为四周期指令。指令格式指令格式: MUL ABMUL AB ;(B)(A)(A)(B) DIV ABDIV AB ; (A)(A)/(B)(B)对对标标志志位位的的影影响响:乘除指令影响PSW中的Cy, OV, P标志位。其中,Cy位总是被清0的,P是由累加器A中1的个数的奇偶性决定的。乘法运算中,若乘积大于FFH,则OV标志位置1,否则清0。除法运算中,若除数为0,则OV标志位置1,否则清0。 2.3.3 2.3.3 逻辑运算和移位指令逻辑运算和移位指令 对对标标志志位位的的影影响响:逻辑运算和移位指令中除了两条带进位的循

51、环移位指令外,其余均不影响PSW中的各标志位。但当目的操作数是累加器A时,影响PSW中的奇偶校验位P。常常用用的的逻逻辑辑运运算算和和移移位位类类指指令令有有:逻辑与、逻辑或、逻辑异或、循环移位、清0、求反(非)等24条指令,它们的操作数都是8位的。逻辑运算都是按位进行的,除用于逻辑运算外,还可用于模拟各种数字逻辑电路的功能,进行逻辑电路的设计。1 1逻辑与运算指令(逻辑与运算指令(6 6条)条) 功能功能:实现两个操作数的逻辑与。指令格式指令格式:ANL A , ANL A , 其中其中: 包括Rn、Ri、direct、#data。 ANL direst , ANL direst , 其中其

52、中: 包括A、#data。适适用用场场合合:实现逻辑与,主要用于操作数的某些位不变(这些位与“1”),某些位置0(这些位与“0”)。 功能功能:实现两个操作数的逻辑或。指令格式指令格式:ORL A , ORL A , 其中其中: 包括Rn、Ri、direct、#data。 ORL direst , ORL direst , 其中其中: 包括A、#data。适适用用场场合合:实现逻辑或,主要用于操作数的某些位不变(这些位或“0”),某些位置1(这些位或“1”)。2 2逻辑或运算指令(逻辑或运算指令(6 6条)条)功功 能能:实现两个操作数的逻辑异或。指令格式指令格式:XRL A , XRL A

53、, 其中其中: 包括Rn、Ri、direct、#data。 XRL direst , XRL direst , 其中其中: 包括A、#data。适适用用场场合合:实现逻辑异或,主要用于操作数的某些位不变(这些位异或“0”),某些位取反(这些位异或“1”)。3 3逻辑异或运算指令(逻辑异或运算指令(6 6条)条) MCS-51单片机的循环移位指令共有不带进位的循环左、右移位(操作码为RL, RR)和带进位的循环左、右移位(操作码为RLC, RRC)指令4条。特点特点:只能对累加器A进行循环移位。指令格式指令格式: 操作码 A功功能能:累加器A中的数据逐位左移一位相当于原内容乘2,而逐位右移一位相

54、当于原内容除以2。循环移位指令示意图如下页图所示。4 4循环移位指令(循环移位指令(4 4条)条)4 4循环移位指令(循环移位指令(4 4条)条)指令格式指令格式: CLR ACLR A ;(A)00H CPL ACPL A ;(A)( )特特 点点:可以节省存储空间,提高程序执行效率。 对对标标志志位位的的影影响响:CLR A指令只影响PSW的P标志位,CPL A指令不影响PSW各标志位。 5 5累加器清累加器清0 0与取反指令(与取反指令(2 2条)条) 2.3.4 2.3.4 控制转移指令控制转移指令 功能功能: 改变程序计数器PC中的内容,控制程序执行的流向,实现程序分支转向。 为了控

55、制程序的执行方向,MCS-51单片机提供了17条控制转移指令。对标志位的影响对标志位的影响: 除了CJNE影响PSW的进位标志位Cy外,其余均不影响PSW的各标志位。 1 1无条件转移指令(无条件转移指令(4 4条)条) 定义定义:不规定条件的程序转移称为无条件转移指令。 指令格式指令格式:长转移指令: LJMP addr16 ; (PC)addr150绝对转移指令: AJMP addr11 ;(PC)(PC)+2, PC 100addr11相对(短)转移指令:SJMP rel ;(PC)(PC)+2+rel间接(散)转移指令:JMP A+DPTR ;(PC)(DPTR)+(A)注意:注意:(

56、1 1)使使用用转转移移指指令令时时,指指令令中中的的地地址址或或偏偏移移量量均均可可采采用用标标号号,只有在执行前才被汇编成实际的二进制地址。只有在执行前才被汇编成实际的二进制地址。(2 2)指令的转移范围:在执行当前转移指令后的)指令的转移范围:在执行当前转移指令后的PCPC值的基础上值的基础上: : 长转移指令长转移指令LJMPLJMP: 64KB64KB 绝对转移指令绝对转移指令AJMP AJMP :2KB2KB 相对(短)转移指令相对(短)转移指令SJMP SJMP : 128128+127+127(用补码表示)(用补码表示) 间接(散)转移指令间接(散)转移指令JMPJMP: 64

57、KB64KB(3 3)相对(短)转移指令)相对(短)转移指令SJMP rel SJMP rel 中地址偏移量的计算:中地址偏移量的计算: rel = rel = 转移目标地址转移指令地址转移目标地址转移指令地址( (当前当前PCPC值值) ) 2 2 1 1无条件转移指令(无条件转移指令(4 4条)条) (4 4)原地踏步(暂停当前的程序,并不是真的停机)的实现)原地踏步(暂停当前的程序,并不是真的停机)的实现 SJMP $SJMP $ 或或 HERE: SJMP HEREHERE: SJMP HERE (5 5)间间接接(散散)转转移移指指令令:JMP JMP A+DPTR A+DPTR 常

58、常用用于于实实现现程程序序的的分分支支转转移移(散散转转)。 DPTRDPTR为为转转移移目目的的的的起起始始地地址址,A A为为转转移移目的的偏移量。目的的偏移量。(6 6)在在编编程程中中,经经常常使使用用短短转转移移指指令令SJMPSJMP和和相相对对转转移移指指令令AJMPAJMP,以便生成浮动代码,并不经常使用长转移指令,以便生成浮动代码,并不经常使用长转移指令LJMPLJMP。 1 1无条件转移指令(无条件转移指令(4 4条)条) 功功能能:在规定的条件满足时进行程序转移,否则程序往下顺序执行。MCS-51单片机中,条件转移指令实质上是累加器A判零指令。指令格式指令格式: JZ r

59、elJZ rel ; 若(A)=0,则转移 (PC) (PC)+2+rel 若(A)0,则顺序执行(PC) (PC) +2 JNZ relJNZ rel ; 若(A)0 ,则转移 (PC) (PC)+2+rel 若(A) =0 ,则顺序执行(PC) (PC) +2 2 2条件转移指令(条件转移指令(2 2条)条) 指指令令的的转转移移范范围围: rel的取值范围是在执行当前转移指令后的PC值基础上的128+127(用补码表示)。 可以采用符号地址表示。偏移量偏移量relrel的计算方法的计算方法: rel = 转移目标地址转移指令地址(当前PC值) 22 2条件转移指令(条件转移指令(2 2条

60、)条) 指令格式指令格式: CJNE CJNE 目的操作数,源操作数,目的操作数,源操作数,relrel其其 中中:当目的操作数为A时,源操作数为#data、direct。当目的操作数为Rn、Ri时,源操作数为#data; 即即:CJNE A, direct, rel CJNE A, #data, rel CJNE Rn, #data, rel CJNE Ri, #data, rel3 3比较转移指令(比较转移指令(4 4条)条) 功功能能:把两个操作数进行比较,以比较的结果作为条件来控制程序的转移 。若(目的操作数)=(源操作数),则程序继续执行,(PC)(PC) +3 若(目的操作数)(源

61、操作数),则程序转移,(PC)(PC) + rel +3,Cy0 若(目的操作数)(源操作数),则程序转移,(PC)(PC) + rel +3,Cy13 3比较转移指令(比较转移指令(4 4条)条) 对标志位影响对标志位影响:影响Cy标志位,不影响其他标志位。指指令令的的转转移移范范围围:rel的取值范围是在执行当前转移指令后的PC值基础上的128+127(用补码表示)。 可以采用符号地址表示。注注意意:比较转移指令的比较是通过两操作数的减法实现的,影响Cy标志位,不保存最后的差值,两个操作数的内容不变。 3 3比较转移指令(比较转移指令(4 4条)条) 功功能能:具有减1判非0则转移的功能。

62、主要用于控制程序循环,实现按循环次数控制循环的目的。特特点点:循环转移指令是一组把减1与条件转移两种功能结合在一起的指令。4 4循环(减循环(减1 1条件)转移指令(条件)转移指令(2 2条)条) 指令格式指令格式: DJNZ , relDJNZ , rel ; 1 若0,则转移 (PC) (PC)+2+rel 若 0,则不转移 (PC) (PC) +2注注意意:条件转移指令均为相对转移指令,因此指令的转移范围十分有限。若要实现64KB范围内的转移,则可以借助于一条长转移指令的过渡来实现。4 4循环(减循环(减1 1条件)转移指令(条件)转移指令(2 2条)条) 定定义义:具有完整功能的程序段

63、定义为子程序,供主程序调用。 功功能能: 供主程序在需要时调用。子程序可以在程序中反复多次使用,以简化源程序的书写。特点特点:子程序可以嵌套,有利于模块化程序设计。5 5子程序调用与返回指令(子程序调用与返回指令(4 4条)条) 主程序与子程序之间的调用关系如下左图所示,两级子程序嵌套的示意图如下右图所示。 5 5子程序调用与返回指令(子程序调用与返回指令(4 4条)条) 子程序调用指令在主程序中使用,而子程序返回指令则是子程序的最后一条指令。调用与返回指令是成对使用的。子子程程序序调调用用指指令令的的功功能能:必须具有自动把程序计数器PC中的断点地址保护到堆栈中,且将子程序入口地址自动送入程

64、序计数器PC中的功能。子子程程序序返返回回指指令令的的功功能能:必须具有自动把堆栈中的断点地址恢复到程序计数器PC中的功能。注注意意:子程序调用时应注意入口参数设置,子程序返回时应注意出口参数的传递。5 5子程序调用与返回指令(子程序调用与返回指令(4 4条)条) (1)绝对短调用指令 ACALL addr11ACALL addr11 ; (PC) (PC) +2, (SP) (SP) +1, (SP)(PC)70 (SP) (SP) +1, (SP) (PC) 158, (PC) 100addr11其其中中: addr11为11位地址,实际编程时可以用符号地址。并且只能在2KB范围以内调用子

65、程序 。5 5子程序调用与返回指令(子程序调用与返回指令(4 4条)条) (2)绝对长调用指令 LCALL addr16LCALL addr16 ; (PC) (PC) +3, (SP) (SP) +1, (SP)(PC)70 (SP) (SP) +1, (SP) (PC) 158, (PC) 150addr16其其中中: addr16为16位地址,实际编程时可以用符号地址。可以在64KB范围以内调用子程序 。5 5子程序调用与返回指令(子程序调用与返回指令(4 4条)条) (3)子程序返回指令 RET RET ; (PC) 158(SP), (SP) (SP) 1, (PC) 70 (SP)

66、 , (SP) (SP) 15 5子程序调用与返回指令(子程序调用与返回指令(4 4条)条) (4)中断返回指令 RETI RETI ; (PC) 158(SP), (SP) (SP) 1, (PC) 70 (SP) , (SP) (SP) 15 5子程序调用与返回指令(子程序调用与返回指令(4 4条)条) 注意注意: 中断服务程序是一种特殊的子程序,它是在计算机响应中断时,由硬件完成调用而进入相应的中断服务程序。RETI指令与RET指令相仿,区别在于RET是从子程序返回,RETI 是从中断服务程序返回。无论是RET还是RETI都是子程序执行的最后一条指令。 5 5子程序调用与返回指令(子程序

67、调用与返回指令(4 4条)条) 指令格式指令格式: NOP NOP ; (PC) (PC) +1功功 能能:不执行任何操作,消耗了一个机器周期,常 用于软件延时或在程序可靠性设计中用来稳定程序。特特 点点:NOP占据一个单元的存储空间,除了使PC的内容加1外,CPU不产生任何操作结果,只是消耗了一个机器周期。6 6空操作指令空操作指令NOP NOP (1 1条)条)2.3.5 2.3.5 位操作指令位操作指令 位位操操作作(布布尔尔变变量量操操作作):操作数不是字节,而是字节中的某个位。每位的取值只能取0或1。指指令令的的寻寻址址范范围围:片内RAM位寻址区20H2FH, SFR中的11个可位

68、寻址特殊寄存器中的83个可寻址位。 特特点点:以进位标志Cy作为位累加器,可以实现布尔变量的传送、运算和控制转移等功能。 指指令令中中的的位位地地址址的的表表达达方方式式:直接地址方式(如0AFH)、特殊功能寄存器名.位序号(如PSW.3)、字节地址.位序号(如0D0H.0)、位名称方式(如F0)和用户定义名称等几种方式。 特特点点:在可寻址位与位累加器Cy之间进行的。不能在两个可寻址位间直接进行传送。 指令格式指令格式: MOV C, bitMOV C, bit ;(Cy)(bit) MOV bit, CMOV bit, C ;(bit) (Cy)1. 1. 位数据传送指令(位数据传送指令(

69、2 2条)条)指令格式指令格式: 操作码操作码 C , C , 其其 中中:操作码包括ANL(逻辑位“与”)、ORL (逻辑位“或”); 包括bit、/bit。 CPL CPL ; 其中: CPL表示取反, 包括Cy、 bit。功功 能能:位逻辑操作指令用于位逻辑操作,还可用于对组合逻辑电路的模拟。采用位操作指令进行组合逻辑电路的设计比采用字节型逻辑指令节约存储空间,运算操作十分方便。 2. 2. 位逻辑操作指令(位逻辑操作指令(6 6条)条) 指令格式指令格式: CLR CLR ; 0 SETB SETB ; 1其其 中中:包括Cy、 bit。3. 3. 位状态(置位、清位状态(置位、清0

70、0)控制指令()控制指令(4 4条)条) 特特 点点:以位的状态作为实现程序转移的判断条件。指令格式指令格式:(1)以进位标志位Cy内容为条件的转移指令 JC rel ; 若(Cy )=1,则转移(PC)(PC)+2+rel , 否则顺序执行 JNC rel ; 若(Cy )=0,则转移(PC)(PC)+2+rel , 否则顺序执行4. 4. 位条件(控制)转移指令(位条件(控制)转移指令(5 5条)条) (2)以位地址bit内容为条件的转移指令指令格式指令格式: JB bit, relJB bit, rel ; 若(bit)=1,则转移(PC) (PC)+3+rel,否则顺序执行 JNB b

71、it, relJNB bit, rel ; 若(bit)=0,则转移(PC) (PC)+3+rel,否则顺序执行 JBC bit, relJBC bit, rel ; 若(bit)=1,则转移(PC) (PC)+3+rel,且(bit )0,否则顺序执行4. 4. 位条件(控制)转移指令(位条件(控制)转移指令(5 5条)条) 2.4 2.4 汇编语言及程序设计汇编语言及程序设计 程序设计:就是编制计算机的程序,即应用计算机所能识别的、接受的语言把要解决的问题的步骤有序地描述出来。 程序设计语言的种类:(1)机器语言:机器语言是用二进制代码表示的计算机惟一能识别和执行的最原始的程序设计语言。

72、(2)汇编语言:利用指令助记符来描述的程序设计语言。(3)高级语言:高级语言接近于人的自然语言,是面向过程而独立于机器的通用语言。2.4 2.4 汇编语言及程序设计汇编语言及程序设计 汇编语言的指令类型: MCS-51单片机汇编语言,包含两类不同性质的指令。(1)基本指令:即指令系统中的指令。它们都是机器能够执行的指令,每一条指令都有对应的机器码。(2)伪指令:汇编时用于控制汇编的指令。它们都是机器不执行的指令,无机器码。汇汇编编语语言言的的语语句句格格式式:汇编语言源程序是由汇编语句(即指令)组成的。典型的汇编语句格式如下: 标号标号: : 操作码操作码 操作数操作数 , ,操作数操作数 ;

73、 ;注释注释 数据的表示方法数据的表示方法:(1)二进制数:由0、1组成,“逢2进1”的数制。如:01011110B (01 后缀:B/b)(2)十六进制数:便于读写记忆的二进制数的简写形式。 (09,AF 后缀:H/h)(3)十进制数:可用二进制数表示(也称为BCD码, 09表示为:00001001B ),也可用十进制数表示(后缀:D/d或无后缀)。2.4 2.4 汇编语言及程序设计汇编语言及程序设计 2.4.1 2.4.1 汇编语言程序设计的步骤汇编语言程序设计的步骤 汇汇编编语语言言程程序序设设计计:根据任务要求,采用汇编语言编制程序的过程称为汇编语言程序设计。汇编语言程序设计的步骤:汇

74、编语言程序设计的步骤:(1)拟订设计任务书 (2)建立数学模型 (3)确定算法 (4)分配内存单元,编制程序流程图 (5)编制源程序 进一步合理分配存储器单元和了解I/O接口地址;按功能设计程序,明确各程序之间的相互关系;用注释行说明程序,便于阅读和修改调试和修改。 (6)上机调试(7)程序优化 编编制制程程序序流流程程图图:是指用各种图形、符号、指向线等来说明程序设计的过程。国际通用的图形和符号说明如下: 椭椭圆圆框框:开始和结束框,在程序的开始和结束时使用。 矩形框矩形框:处理框,表示要进行的各种操作。 菱菱形形框框:判断框,表示条件判断,以决定程序的流向。 流向线流向线:流程线,表示程序

75、执行的流向。 圆圆 圈圈:连接符,表示不同页之间的流程连接。各种几何图形符号如下图所示。2.4.1 2.4.1 汇编语言程序设计的步骤汇编语言程序设计的步骤 2.4.2 2.4.2 顺序程序设计顺序程序设计 特特点点:顺序结构程序是最简单、最基本的程序。程序按编写的顺序依次往下执行每一条指令,直到最后一条。它能够解决某些实际问题,或成为复杂程序的子程序。 例例题题22 将片内RAM 30H单元中的两位压缩BCD码转换成二进制数送到片内RAM 40H单元中。解解:两位压缩BCD码转换成二进制数的算法为: (a1a0)BCD=10a1a0 程序流程图如右图所示。 程序如下:程序如下: ORG 10

76、00HSTART: MOV A, 30H ; 取两位BCD压缩码a1a0送A ANL A, #0F0H ; 取高4位BCD码a1 SWAP A ; 高4位与低4位换位 MOV B, #0AH ; 将二进制数10送入B MUL AB ; 将10a1送入A中 MOV R0, A ; 结果送入R0中保存 MOV A, 30H ; 再取两位BCD压缩码a1a0送A ANL A, #0FH ; 取低4位BCD码a0 ADD A, R0 ; 求和10a1+ a0 MOV 40H, A ; 结果送入40H保存 SJMP $ ; 程序执行完,“原地踏步” END2.4.2 2.4.2 顺序程序设计顺序程序设计

77、 例题例题3利用查表指令将内部RAM中20H单元的压缩BCD码拆开,转换成相应的ASCII码,存入21H、22H中,高位存在22H。解:解: BCD码的09对应的ASCII码为30H39H,将30H39H按大小顺序排列放入表TABLE中,先将BCD码拆分,将拆分后的BCD码送入A,表首址送入DPTR ,然后领用查表指令MOVC A,A+DPTR,查表即得结果,然后存入21H、22H中。程序如下:程序如下: ORG 1000H START:MOV DPTR,#TABLEMOVA,20HANLA,#0FHMOVC A,A+DPTRMOV21H,A2.4.2 2.4.2 顺序程序设计顺序程序设计 M

78、OVA,20HANLA,#0F0HSWAPAMOVC A,A+DPTRMOV22H,ASJMP TABLE:DB 30H,31H,32H,33H,34HDB 35H,36H,37H,38H,39H END2.4.2 2.4.2 顺序程序设计顺序程序设计 2.4.3 2.4.3 分支程序设计分支程序设计特特点点:根据不同的条件,确定程序的走向。它主要靠条件转移指令、比较转移指令和位转移指令来实现。分支程序的结构如右图所示。 分支程序的设计要点如下:分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。 (2)选用合适的条件转移指令。(3)在转移的目的地址处设定标号。 解解:此题有三个条

79、件,所以有三个分支程序。这是一个三分支归一的条件转移问题。 X是有符号数,判断符号位是0还是1可利用JB或JNB指令。判断X是否等于0则直接可以使用累加器A的判0指令。程序流程图如右图所示。 例例题题44 求符号函数的值。已知片内RAM的 40H单元内有一自变量X,编制程序按如下条件求函数Y的值,并将其存入片内RAM 的41H单元中。 1 X0Y= 0 X=0 -1X255,因此单重循环程序无法实现,可采用双重循环的方法编写50ms延时程序。 程序如下:程序如下: ORG 1000H DELAY: MOV R7, #200 ; 设置外循环次数(此条指令需要1个机器周期) DLY1: MOV R

80、6, #123 ; 设置内循环次数 DLY2: DJNZ R6, DLY2 ;(R6)1=0,则顺序执行,否则转回 DLY2继续循环,延时时间为2s123=246s NOP ; 延时时间为1s DJNZ R7,DLY1 ;(R7)1=0,则顺序执行, 否则转回DLY1继续循环,延时时间为 (246211)20021=50.003ms RET ; 子程序结束 END2 2多重循环程序多重循环程序(1 1)循环程序是一个有始有终的整体,它的执行是有条件的,所以要避免从循环体外直接转到循环体内部。(2 2)多重循环程序是从外层向内层一层一层进入,循环结束时是由内层到外层一层一层退出的。在多重循环中,

81、只允许外重循环嵌套内重循环。不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部。(3 3)编写循环程序时,首先要确定程序结构,处理好逻辑关系。一般情况下,一个循环体的设计可以从第一次执行情况入手,先画出重复执行的程序框图,然后再加上循环控制和置循环初值部分,使其成为一个完整的循环程序。(4 4)循环体是循环程序中重复执行的部分,应仔细推敲,合理安排,应从改进算法、选择合适的指令入手对其进行优化,以达到缩短程序执行时间的目的。 3 3编写编写循环程序时应注意的问题循环程序时应注意的问题4 4排序程序设计(冒泡法)排序程序设计(冒泡法) 例例题题77 设MCS-51单片机内部RAM起始

82、地址为30H的数据块中共存有64个无符号数,编制程序使它们按从小到大的顺序排列。解解:设64个无符号数在数据块中的顺序为:e64, e63, e2, e1,使他们从小到大顺序排列的方法很多,现以冒泡法为例进行介绍。 冒泡法又称两两比较法。它先使e64和e63比较,若e64e63,则两个存储单元中的内容交换,否则就不交换。然后使e63和e62比较,按同样的原则决定是否交换。一直比较下去,最后完成e2和e1的比较及交换,经过N1=63次比较(常用内循环63次来实现)后,e1的位置上必然得到数组中的最大值,犹如一个气泡从水低冒出来一样,如下页图所示(图中只画出了6个数的比较过程)。 第二次冒泡过程和

83、第一次完全相同,比较次数也可以是63次(其实只需要62次,因为e1的位置上是数据块中的最大数,不需要再比较),冒泡后在e2的位置上得到数组中的次大数,如上页图所示。如此冒泡(即大循环)共63次(内循环6363次)便可完成64个数的排序。 实际编程时,可通过设置“交换标志”用来控制是否再需要冒泡,若刚刚进行完的冒泡中发生过数据交换(即排序尚未完成),应继续进行冒泡;若进行完的冒泡中未发生过数据交换(即排序已经完成),冒泡应该停止。例如:对于一个已经排好序的数组:1, 2, 3, 63, 64,排序程序只要进行一次循环便可根据“交换标志”的状态而结束排序程序的再执行,这自然可以减少631=62次的

84、冒泡时间。 冒泡法程序流程图如下页图所示。 4 4排序程序设计(冒泡法)排序程序设计(冒泡法) 程序如下:程序如下: ORG 1000HMOV R0, #30H ; 数据区首地址送R0MOV R3, #63H ; 设置外循环次数在R3中LP0: CLR 7FH ; 交换标志位2FH.7清0MOV A, R3 ; 取外循环次数MOV R2, A ; 设置内循环次数LP1: MOV 20H, R0 ; 数据区数据送20H单元中MOV A, R0 ; 20H内容送AINC R0 ; 修改地址指针(R0+1)MOV 21H, R0 ; 下一个地址的内容送21HCLR C ; Cy清0 SUBB A,

85、21H ; 前一个单元的内容与下一个单元的内容比较JC LP2 ; 若有借位(Cy =1),前者小,程序转移到LP2处执行, 若无借位(Cy =0),前者大,不转移,程序往下执行4 4排序程序设计(冒泡法)排序程序设计(冒泡法) MOV R0, 20H ; 前、后内容交换DEC R0MOV R0, 21H INC R0 ; 修改地址指针(R0+1)SETB 7FH ; 置位交换标志位2FH.7为1LP2: DJNZ R2, LP1 ; 修改内循环次数R2(减少), 若R20,则程序转到LP1 处仍执行循环, 若R2=0,程序结束循环,程序往下执行JNB 7FH, LP3 ; 交换标志位2FH.

86、7若为0,则程序转到LP3处结束循环DJNZ R3, LP0 ; 修改外循环次数R3(减少), 若R30,程序转到LP0处, 执行仍循环, 若R3=0,程序结束循环,往下执行LP3: SJMP $ ; 程序执行完,“原地踏步”END4 4排序程序设计(冒泡法)排序程序设计(冒泡法) 2.4.5 2.4.5 查表程序设计查表程序设计 查表:查表:根据存放在ROM中数据表格的项数来查找与它对应的表中值。 适用场合:适用场合:主要应用于数码显示、打印字符的转换、数据转换等场合。 1. 1. 采用采用MOVC A, MOVC A, A+DPTRA+DPTR指令查表程序的设计方法指令查表程序的设计方法(

87、1)在程序存储器中建立相应的函数表(设自变量为X)。(2)计算出这个表中所有的函数值Y。将这群函数值按顺序存放在起始(基)地址为TABLE的程序存储器中。(3)将表格首地址TABLE送入DPTR,X送入A,采用查表指令MOVC A, A+DPTR完成查表,就可以得到与X相对应的Y值于累加器A中。 2. 2. 采用采用MOVC A, MOVC A, A+PCA+PC指令查表程序的设计方法指令查表程序的设计方法 当使用PC作为基址寄存器时,由于PC本身是一个程序计数器,与指令的存放地址有关,查表时其操作有所不同。(1)在程序存储器中建立相应的函数表(设自变量为X)。(2)计算出这个表中所有的函数值

88、Y。将这群函数值按顺序存放在起始(基)地址为TABLE的程序存储器中。(3)X送入A,使用ADD A, #data指令对累加器A的内容进行修正,偏移量data由公式data=函数数据表首地址PC1确定,即data值等于查表指令和函数表之间的字节数。(4)采用查表指令MOVC A, A+PC完成查表,就可以得到与X相对应的Y值于累加器A中。 2.4.5 2.4.5 查表程序设计查表程序设计 例题例题88利用查表的方法编写Y=X2(X=0, 1, 2, 9)的程序。解解:设变量X的值存放在内存30H单元中,求得的Y的值存放在内存31H单元中。平方表存放在首地址为TABLE的程序存储器中。方法一:采

89、用MOVC A, A+DPTR指令实现,查表过程如下图2.所示。2.4.5 2.4.5 查表程序设计查表程序设计 程序如下:程序如下: ORG 1000H START: MOV A, 30H ; 将查表的变量X送入A MOV DPTR, #TABLE ; 将查表的16位基地址TABLE送DPTR MOVC A, A+DPTR ; 将查表结果Y送A MOV 31H, A ; Y值最后放入31H中 TABLE: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 END2.4.5 2.4.5 查表程序设计查表程序设计 方法二:采用MOVC A, A+PC指令实现,查表过

90、程如下页图所示。程序如下:程序如下: ORG 1000H START: MOV A, 30H ; 将查表的变量X送入A ADD A, #02H ; 定位修正 MOVC A, A+PC ; 将查表结果Y送A MOV 31H, A ; Y值最后放入31H中 TABLE: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 END 2.4.5 2.4.5 查表程序设计查表程序设计 2.4.6 2.4.6 子程序设计子程序设计子程序:子程序:能够完成确定任务,并能为其他程序反复调用的程序段称为子程序。特点:特点:子程序可以多次重复使用,避免重复性工作,缩短整个程序,节省程序

91、存储空间,有效地简化程序的逻辑结构,便于程序调试。 主程序:主程序:调用子程序的程序叫做主程序或称调用程序。 1 1子程序的调用与返回子程序的调用与返回 主程序调用子程序的过程:在主程序中需要执行这种操作的地方执行一条调用指令(LCALL或ACALL),转到子程序,而完成规定的操作后,再在子程序最后应用RET返回指令返回到主程序断点处,继续执行下去。 (1)子程序的调用子子程程序序的的入入口口地地址址:子程序的第一条指令地址称为子程序的入口地址,常用标号表示。程程序序的的调调用用过过程程:单片机收到ACALL或LCALL指令后,首先将当前的PC值(调用指令的下一条指令的首地址)压入堆栈保存(低

92、8位先进栈,高8位后进栈),然后将子程序的入口地址送入PC,转去执行子程序。(2)子程序的返回主主程程序序的的断断点点地地址址:子程序执行完毕后,返回主程序的地址称为主程序的断点地址,它在堆栈中保存。子子程程序序的的返返回回过过程程:子程序执行到RET指令后,将压入堆栈的断点地址弹回给PC(先弹回PC的高8位,后弹回PC的低8位),使程序回到原先被中断的主程序地址(断点地址)去继续执行。2.4.6 2.4.6 子程序设计子程序设计注意:注意:中断服务程序是一种特殊的子程序,它是在计算机响应中断时,由硬件完成调用而进入相应的中断服务程序。RETI指令与RET指令相似,区别在于RET是从子程序返回

93、,RETI是从中断服务程序返回。 2 2保存与恢复寄存器内容保存与恢复寄存器内容(1)保护现场 主程序转入子程序后,保护主程序的信息不会在运行子程序时丢失的过程称为保护现场。 保护现场通常在进入子程序的开始时,由堆栈完成。如: PUSH PSW PUSH ACC 2.4.6 2.4.6 子程序设计子程序设计(2)恢复现场 从子程序返回时,将保存在堆栈中的主程序的信息还原的过程称为恢复现场。恢复现场通常在从子程序返回之前将堆栈中保存的内容弹回各自的寄存器。如: POP ACC POP PSW2.4.6 2.4.6 子程序设计子程序设计3 3子程序的参数传递子程序的参数传递 主程序在调用子程序时传

94、送给子程序的参数和子程序结束后送回主程序的参数统称为参数传递。入入口口参参数数:子程序需要的原始参数。主程序在调用子程序前将入口参数送到约定的存储器单元(或寄存器)中,然后子程序从约定的存储器单元(或寄存器)中获得这些入口参数。出出口口参参数数:子程序根据入口参数执行程序后获得的结果参数。子程序在结束前将出口参数送到约定的存储器单元(或寄存器)中,然后主程序从约定的存储器单元(或寄存器)中获得这些出口参数。2.4.6 2.4.6 子程序设计子程序设计(3)传送子程序参数的方法 应用工作寄存器或累加器传递参数。优点是程序简单、运算速度较快,缺点是工作寄存器有限。 应用指针寄存器传递参数。优点是能

95、有效节省传递数据的工作量,并可实现可变长度运算。 应用堆栈传递参数。优点是简单,能传递的数据量较大,不必为特定的参数分配存储单元。 利用位地址传送子程序参数。4 4子程序的嵌套子程序的嵌套 在子程序中若再调用子程序,称为子程序的嵌套。MCS-51单片机允许多重嵌套。如下页图所示。 2.4.6 2.4.6 子程序设计子程序设计5 5编写子程序时应注意的问题编写子程序时应注意的问题 子程序的入口地址一般用标号表示,标号习惯上以子程序的任务命名。例如,延时子程序常以DELAY作为标号。 主程序通过调用指令调用子程序,子程序返回主程序之前,必须执行子程序末尾的一条返回指令RET。 单片机能自动保护和恢

96、复主程序的断点地址。但对于各工作寄存器、特殊功能寄存器和内存单元的内容,则必须通过保护现场和恢复现场实现保护。 子程序内部必须使用相对转移指令,以便子程序可以放在程序存储器64KB存储空间的任何子域并能为主程序调用,汇编时生成浮动代码。 子程序的参数传递方法同样适用于中断服务程序。 2.4.6 2.4.6 子程序设计子程序设计 例题例题99 编制程序实现c=a2+b2,(a, b均为1位十进制数)。解:解:计算某数的平方可采用查表的方法实现,并编写成子程序。只要两次调用子程序,并求和就可得运算结果。设a, b分别存放于片内RAM的30H, 31H两个单元中,结果c存放于片内RAM的40H单元。

97、程序流程图如右图所示。2.4.6 2.4.6 子程序设计子程序设计主程序如下:主程序如下: ORG 1000H SR: MOV A, 30H; 将30H中的内容a送入A ACALL SQR; 转求平方子程序SQR处执行 MOV R1, A; 将a2结果送R1 MOV A, 31H; 将31H中的内容b送入A ACALL SQR; 转求平方子程序SQR处执行 ADD A, R1; a2+b2结果送A MOV 40H, A; 结果送40H单元中 SJMP $; 程序执行完,“原地踏步”求平方子程序如下(采用查平方表的方法):求平方子程序如下(采用查平方表的方法): SQR: INC A MOVC

98、A, A+PC RET TABLE: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 END2.4.6 2.4.6 子程序设计子程序设计2.5 2.5 程序设计举例程序设计举例2.5.1 2.5.1 多字节算术运算程序多字节算术运算程序 例题例题1010 编制程序实现两位16进制数乘法运算: (R7R6)16(R5R4)16(R3R2R1R0)16解:解:MCS-51乘法指令只能完成两个8位无符号数相乘,因此16位无符号数求积必须将它们分解成8位数相乘来实现。其方法有先乘后加和边乘边加两种。现以边乘边加为例设计。程序如下:程序如下: ORG 1000H DMUL

99、: MOV A, R6; 第一个因数的低位送A MOV B, R4; 第二个因数的低位送B MUL AB; 第一个因数的低位乘以第二个因数的低位 MOV R0, A; 积的低位送积的低位送R0R0 MOV R1, B; 积的高位送积的高位送R1 MOV A, R7; 第一个因数的高位送第一个因数的高位送A MOV B, R4; 第二个因数的低位送第二个因数的低位送B MUL AB; 第一个因数的高位乘以第二个因数的低位第一个因数的高位乘以第二个因数的低位 ADD A, R1; 部分积相加,形成进位部分积相加,形成进位Cy MOV R1, A; 部分积相加送部分积相加送R1 MOV A, B;

100、部分积的进位部分积的进位Cy加到高位加到高位 ADDC A, #00H MOV R2, A MOV A, R6; 第一个因数的低位送第一个因数的低位送A MOV B, R5; 第二个因数的高位送第二个因数的高位送B MUL AB; 第一个因数的低位乘以第二个因数的高位第一个因数的低位乘以第二个因数的高位 ADD A, R1; 部分积相加,形成进位部分积相加,形成进位Cy MOV R1, A; 回送部分积回送部分积 MOV A, R22.5.1 多字节算术运算程序多字节算术运算程序 ADDC A, B; 部分积相加 MOV R2, A; 回送部分积 MOV A, #00H ; 部分积的进位Cy加

101、到高位 ADDC A, #00H MOV R3, A; 回送部分积 MOV A, R7; 第一个因数的高位送A MOV B, R5; 第二个因数的高位送B MUL AB; 第一个因数的高位乘以第二个因数的高位 ADD A, R2; 部分积相加,形成进位Cy MOV R2, A; 回送部分积 MOV A, R3 ADDC A, B; 部分积相加 MOV R3, A; 回送部分积 RET END2.5.1 多字节算术运算程序多字节算术运算程序2.5.2 数制转换程序数制转换程序 例题例题1111 将双字节二进制数转换成BCD码(十进制数)。解:解:将二进制数转换成BCD码的数学模型为:(a a15

102、15a a1414a a1 1a a0 0)2 2= =(a a1515221515+a+a1414221414+ +a+a1 1221 1+a+a0 0220 0)1010上式右侧即为欲求的BCD码。它可作如下变换(a a1515221414+a+a1414221313+ +a+a1 1)2+a2+a0 0括号里的内容可变为:(a a1515221313 +a +a1414221212+a+a1313221111+ +a+a2 2)2+a2+a1 1括号里的内容可变为:(a a1515221212+a+a1414221111+a+a1313221010+ +a+a3 3)2+a2+a2 2经

103、过16次的变换后,括号里的内容可变为: (02+a02+a1515)2+a2+a1414 所以括号里的内容的通式为ai+12+ai,即为二进制数转换成BCD码的公因式。 在程序设计中,可利用左移指令(乘以2)实现ai+12,采用循环计算16次公因式的方法来完成二进制数转换成BCD码。入入口口参参数数:16位无符号数送R3, R2。出出口口参参数数:共有5位BCD数,万位R6;千、百位R5;十、个位R4位。程序流程图如右图所示。2.5.2 数制转换程序数制转换程序 程序如下:程序如下: ORG 1000H BINBCD1: CLR A ; A 清0 MOV R4, A ; 清0出口参数寄存器 M

104、OV R5, A MOV R6, A MOV R7, #10H ; 设置循环次数16 LOOP: CLR C ; 标志位Cy清0,为二进制数2作准备 MOV A, R2 ;ai+12 RLC A MOV R2, A MOV A, R3 RLC A MOV R3, A MOV A, R4 2.5.2 数制转换程序数制转换程序 ADDC A, R4 ; 带进位自身相加,相当于乘2 DA A MOV R4, A MOV A, R5 ADDC A, R5 DA A MOV R5, A MOV A, R6 ADDC A, R6 MOV R6, A ; 双字节十六进制数的万位数不超过6, 不用调整 DJN

105、Z R7, LOOP ; 若16位未循环完,转向LOOP继续循环, 否则继续执行 RET END2.5.2 数制转换程序数制转换程序 2.5.3 散转程序散转程序 散散转转程程序序:是一种并行分支程序(多分支程序),它是根据某种输入或运算结果,分别转向各个处理程序。在MCS-51中用JMP A+DPTR指令来实现程序的散转。转移的地址最多为256个。其结构如图下所示。散转程序的设计方法:散转程序的设计方法:(1)应用转移指令表实现的散转程序 直接利用转移指令(AJMP或LJMP)将欲散转的程序组形成一个转移表,然后将标志单元内容读入累加器A,转移表首址送入DPTR中,再利用散转指令JMP A+

106、DPTR实现散转。(2)应用地址偏移量表实现的散转程序 直接利用地址偏移量形成转移表,特点是程序简单、转移表短,转移表和处理程序可位于程序存储器的任何地方。2.5.3 散转程序散转程序 (3)应用转向地址表的散转程序 直接使用转向地址表。其表中各项即为各转向程序的入口。散转时,使用查表指令,按某单元的内容查找到对应的转向地址,将它装入DPTR,然后清累加器A,再用JMP A+DPTR指令直接转向各个分支程序。(4)应用RET指令实现散转程序 用子程序返回指令RET实现散转。其方法是:在查找到转移地址后,不是将其装入DPTR中,而是将它压入堆栈中(先低位字节,后高位字节,即模仿调用指令)。然后通

107、过执行RET指令,将堆栈中的地址弹回到PC中实现程序的转移。2.5.3 散转程序散转程序 例题例题1212 编制程序用单片机实现四则运算。解解:在单片机的键盘上设置“、”四个运算按键。其键值存放在寄存器R2中,当(R2)00H时做加法运算,当(R2)01H时做减法运算,当(R2)02H时做乘法运算,当(R2)03H时做除法运算。 P1口输入被加数、被减数、被乘数、被除数,输出商或运算结果的低8位; P3口输入加数、减数、乘数、除数,输出余数或运算结果的高8位。 2.5.3 散转程序散转程序 程序简化流程图如下图所示。程序简化流程图如下图所示。 程序如下:程序如下: ORG 1000H STAR

108、T: MOV P1, #DATA1H ; 给 P1口、P3口送入数据DATA1, DATA2,用于计算 MOV P3, #DATA2H MOV DPTR, #TABLE ; 将基址TABLE送DPTR CLR C ; Cy清0 MOV A, R2 ; 将运算键键值送A SUBB A, #04H ; 将键值和04H相减,用于产生Cy标志 JNC ERROR ; 若输入按键不合理,程序转ERROR处; 否则,按键合理,程序继续执行 ADD A, #04H ; 还原键值 CLR C ; Cy清0 RL A ; 将A左移,即键值2, 形成正确的散转偏移量 JMP A+DPTR ; 程序跳到(A)+(D

109、PTR)形成的新地址2.5.3 散转程序散转程序 TABLE: AJMP PRG0 ; 程序跳到PRG0处,将要做加法运算 AJMP PRG1 ; 程序跳到PRG1处,将要做减法运算 AJMP PRG2 ; 程序跳到PRG2处,将要做乘法运算 AJMP PRG3 ; 程序跳到PRG3处,将要做除法运算ERROR:(按键错误的处理程序)(略)2.5.3 散转程序散转程序 PRG0: MOV A, P1 ; 被加数送A ADD A, P3 ; 做加法运算,结果送入A,并影响进位Cy MOV P1, A ; 和的低8位结果送P1 CLR A ; A清0 ADDC A, #00H ; 将进位Cy送入A

110、,作为和的高8位 MOV P3, A ; 和的高8位结果送P3 RET ; 返回开始程序 PRG1: MOV A, P1 ; 被减数送A CLR C ; Cy清0 SUBB A, P3 ; 做减法运算,结果送入A,并影响借位Cy MOV P1, A ; 差的低8位结果送P1 CLR A ; A清0 RLC A ; 将借位Cy左移进A,作为差的高8位(负号) MOV P3, A ; 差的高8位(负号)结果送P3 RET ; 返回开始程序2.5.3 散转程序散转程序 PRG2: MOV A, P1 ; 第一个因数送A MOV B, P3 ; 第二个因数送B MUL AB ; 做乘法运算,积的低8位

111、送入A, 高8位送入B,影响Cy, OV标志位 MOV P1, A ; 积的低8位结果送P1 MOV P3, B ; 积的低8位结果送P3 RET ; 返回开始程序 PRG3: MOV A, P1 ; 被除数送A MOV B, P3 ; 除数送B DIV AB ; 做除法运算,商送入A,余数送入B MOV P1, A ; 商送入P1 MOV P3, B ; 余数送入P3 RET ; 返回主程序 END2.5.3 散转程序散转程序 2.6 汇编语言的开发环境汇编语言的开发环境2.6.1 2.6.1 单片机开发系统单片机开发系统 单片机开发系统在单片机应用系统设计中占有重要的位置,是单片机应用系统

112、设计中不可缺少的开发工具。 在单片机应用系统设计的仿真调试阶段,必须借助于单片机开发系统进行模拟,调试程序,检查硬件、软件的运行状态,并随时观察运行的中间过程而不改变运行中的原有数据,从而实现模拟现场的真实调试。单片机开发系统应具备的功能:单片机开发系统应具备的功能: 方便地输入和修改用户的应用程序; 对用户系统硬件电路进行检查和诊断; 将用户源程序编译成目标代码并固化到相应的ROM中去,并能在线仿真; 以单步、断点、连续等方式运行用户程序,能正确反映用户程序执行的中间状态,即能实现动态实时调试。 常用的常用的MCS-51MCS-51开发系统:开发系统:(1)Keil C51单片机仿真器。 (

113、2)广州周立功单片机发展有限公司的TKS系列仿真器。 (3)Flyto Pemulator单片机开发系统。 (4)Medwin集成开发环境。 (5)E6000系列仿真器。 2.6.2 2.6.2 汇编语言的编辑与汇编汇编语言的编辑与汇编 1 1汇编语言的编辑汇编语言的编辑 源源程程序序的的编编辑辑:编写程序,并以文件的形式存于磁盘中的过程称为源程序的编辑。编辑好的源程序应以“ .ASM”扩展名存盘,以备汇编程序调用。计计算算机机上上进进行行源源程程序序的的编编辑辑的的过过程程:利用计算机中常用的编辑软件( EDLIN、PE等)或利用开发系统中提供的编辑环境。2.6 汇编语言的开发环境汇编语言的

114、开发环境2汇编语言的汇编汇编语言的汇编 汇编:汇编:把汇编语言源程序翻译成目标代码(机器码)的过程称为汇编。汇编语言源程序的汇编的分类:汇编语言源程序的汇编的分类:(1)人工汇编:是指利用人脑直接把汇编语言源程序翻译成机器码的过程。其特点是简单易行,但效率低、出错率高。(2)机器汇编:利用软件(称为汇编程序)自动把汇编语言源程序翻译成目标代码的过程。汇编工作由计算机完成,一般的单片机开发系统中都能实现汇编语言源程序的汇编。源程序经过机器汇编后,形成的若干文件中含有两个主要文件,一是列表文件(.LST),另一个是目标码文件(.OBJ)。 工程中应用的程序都是采用机器汇编来实现的。通用的MCS-5

115、1汇编程序是MCS-51.EXE,它能实现对汇编语言源程序的汇编。汇编语言源程序为:文件名.ASM,经汇编程序汇编后生成的打印文件为:文件名.PRT,生成的列表文件为:文件名.LST,生成的目标文件为:文件名.OBJ,最后生成可执行文件为:文件名.EXE。 2.6.3 2.6.3 汇编语言的调试汇编语言的调试 1 1单片机开发系统的调试功能单片机开发系统的调试功能 (1)运行控制功能(2)对应用系统状态的读出功能(3)跟踪功能2.6 汇编语言的开发环境汇编语言的开发环境2. 2. 常见的软件错误常见的软件错误 (1)逻辑错误:主要是语法错误。(2)功能错误:主要是设计思想或算法导致不能实现软件

116、功能的错误。(3)指令错误:是指在编辑应用指令时所产生的错误。如:指令疏漏、位置不妥、指令不当和非法调用等。(4)程序跳转错误:是指程序运行不到指定的地方,或发生死循环等。(5)子程序错误:(6)动态错误:是指系统动态性能没有达到设计指标的错误。如:控制系统的实时响应速度、显示器的亮度、定时器的精度等。(7)上电复位电路的错误:(8)中断程序错误:是指现场的保护与恢复错误、触发方式错误等。2.6 汇编语言的开发环境汇编语言的开发环境3 3单片机开发调试应注意的问题单片机开发调试应注意的问题(1)使用总线不外引的单片机(2)使用中、高档的单片机仿真工具(3)充分利用集成开发平台2.6 汇编语言的开发环境汇编语言的开发环境作业与练习:作业与练习:2.2 2.3 2.5 2.72.8 2.92.11 2.122.15 2.172.19 2.212.22 2.24

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号