第三章 单片机汇编程序设计 课件.ppt

上传人:rrsccc 文档编号:9288314 上传时间:2021-02-15 格式:PPT 页数:119 大小:1.85MB
返回 下载 相关 举报
第三章 单片机汇编程序设计 课件.ppt_第1页
第1页 / 共119页
第三章 单片机汇编程序设计 课件.ppt_第2页
第2页 / 共119页
第三章 单片机汇编程序设计 课件.ppt_第3页
第3页 / 共119页
第三章 单片机汇编程序设计 课件.ppt_第4页
第4页 / 共119页
第三章 单片机汇编程序设计 课件.ppt_第5页
第5页 / 共119页
点击查看更多>>
资源描述

《第三章 单片机汇编程序设计 课件.ppt》由会员分享,可在线阅读,更多相关《第三章 单片机汇编程序设计 课件.ppt(119页珍藏版)》请在三一文库上搜索。

1、1,2021/2/15,单片机原理与应用电子课件,第 3 章,单片机汇编语言程序设计,2021/2/15,2,本章主要内容: 3.1 51系列单片机指令系统概述 3.2 51系列单片机寻址方式 3.3 51系列单片机指令系统 3.4 51系列单片机汇编指令格式及标识 3.5 51系列单片机汇编程序常用伪指令 3.6 51系列单片机汇编程序设计,2021/2/15,3,3.1 51系列单片机指令系统概述,指令:就是计算机可以直接识别和执行的某种操作命令。 指令系统:一台计算机中所有指令的集合。,一条指令的结构用如下形式表示:,操作码字段表征指令的操作特性与功能,而地址码字段通常指定参与操作的操作

2、数的地址。,在51单片机中的指令系统中,有单字节、双字节、三字节等不同长度的指令。 单字节指令只有一个字节,操作码和操作数都在这个字节中。51指令系统共有单字节指令49条。,3.1 51系列单片机指令系统概述,双字节指令包括两个字节,其中一个字节是操作码,第二个字节是操作数。51指令系统共有双字节指令45条。 三字节指令中,操作码占一个字节,操作数占两个字节,其中操作数既可能是数据,也可能是地址。51指令系统共有三字节指令45条。,3.2 51系列单片机寻址方式,MCS-51单片机的寻址方式按操作数的类型,可分为数的寻址和指令寻址. 数的寻址有:常数寻址(立即寻址)、寄存器数寻址(寄存器寻址)

3、、存储器数寻址(直接寻址方式、寄存器间接寻址方式、变址寻址方式)和位寻址. 指令的寻址有:绝对寻址和相对寻址。,操作数是常数,常数又称为立即数,使用时直接出现在指令中,紧跟在操作码的后面,作为指令的一部分。在汇编指令中,立即数前面以“#”符号作前缀。在程序中通常用于给寄存器或存储器单元赋初值,例如: MOV A,#20H 其功能是把立即数20H送给累加器A,其中源操作数20H就是立即数。指令执行后累加器A中的内容为20H。,3.2 51系列单片机寻址方式,3.2.1 立即寻址,2021/2/15,7,3.2.2 寄存器寻址,操作数在寄存器中,使用时在指令中直接提供寄存器的名称,这种寻址方式称为

4、寄存器寻址。 在汇编指令中,寄存器寻址在指令中直接提供寄存器的名称,如R0、R1、A、DPTR等。例如: MOV A,R0 其功能是把R0寄存器中的数送给累加器A,在指令中,源操作数R0为寄存器寻址,传送的对象为R0中的数据。,3.2 51系列单片机寻址方式,3.2 51系列单片机寻址方式,3.2.3 直接寻址,直接寻址是指数据在存储器单元中,在指令中直接提供存储器单元的地址。 这种寻址方式针对的是片内数据存储器和特殊功能寄存器。在汇编指令中,指令中直接以地址数的形式提供存储器单元的地址。例如: MOV A,20H 其功能是把片内数据存储器20H单元的内容送给累加器A。,直接寻址方式的寻址范围

5、包括: 1.低128单元。在指令中直接以单元地址形式给出。 2.专用寄存器。专用寄存器除了以单元地址形式给出外,还可以以寄存器符号形式给出。直接寻址是访问专用寄存器的唯一方法。例如指令: MOV A, SBUF SBUF是专用寄存器名。,3.2 51系列单片机寻址方式,3.2 51系列单片机寻址方式,3.2.4 寄存器间接寻址,寄存器间接寻址是指数据存放在存储单元中,而存储单元地址存放在寄存器中,在指令中通过提供存放存储单元地址的寄存器来使用对应的存储单元。形式为:寄存器名 例如:MOV A,R1 该指令的功能是将以工作寄存器R1中的内容为地址的片内RAM单元的数据传送到累加器A中去。,3.2

6、 51系列单片机寻址方式,寄存器间接寻址,若R1中的内容为80H,片内RAM地址为80H的单元中的内容为20H,则执行该指令MOV A,R1 后,累加器A的内容为20H。寄存器间接寻址示意图如图所示。,寄存器间接寻址用到的寄存器只能是通用寄存器R0、R1和数据指针寄存器DPTR,它能访问的数据是片内数据存储器和片外数据存储器。 其中,片内数据存储器只能用R0和R1作指针间接访问; 片外数据存储器,低端的256字节单元,既可以用两位十六进制地址以R0或R1作指针间接访问,也可用四位十六进制地址以DPTR作指针间接访问. 而高端的字节单元则只能以DPTR作指针间接访问。,3.2 51系列单片机寻址

7、方式,对于片内RAM和片外RAM的低端256字节都可以用R0和R1作指针访问,它们之间用指令来区别。片内RAM访问用MOV指令,片外RAM访问用MOVX指令。,3.2.5相对寻址,相对寻址是把指令中给定的地址偏移量与程序计数器PC的当前值相加,得到真正的程序转移地址。相对寻址方式主要是解决程序转移而专门设置的。 例如:JC 80H,若C=0,则PC值不变,若C=1,则以当前PC值为基地址,加上偏移量80H得到新的PC值。 这里的偏移量是一个带符号的二进制补码数,所能表示的数的范围是-128+127,因此相对转移是以转移指令的下条指令为基点,向前最大可能转移127个字节,向后最大可能转移128个

8、字节。,3.2.6 变址寻址,变址寻址是指操作数的地址由基址寄存器的地址加上变址寄存器的地址得到。 它是以数据指针寄存器DPTR或程序计数器PC为基址,累加器A为变址,两者相加得存储单元的地址,所访问的存储器为程序存储器。 MOVC A,A+DPTR MOVC A, A+PC,3.2 51系列单片机寻址方式,变址寻址,设指令执行前数据指针寄存器DPTR的值为2000H,累加器A的值为05H,程序存储器2005H单元的内容为30H,则指令执行后,累加器A中的内容为30H。示意图如图所示。,3.2 51系列单片机寻址方式,3.2.7 位寻址,51指令系统有位处理功能,可以对数据位进行操作,因此就有

9、相应的位寻址方式。 位寻址的范围包括: (1)内部RAM中的位寻址区。单元地址为20H2FH,共16个单元128位,位地址是00H7FH。 (2)专用寄存器的可寻址位。可以位寻址的专用寄存器共有11个,实有寻址位83位。,3.3 51系列单片机指令系统,3.3.1 数据传送指令,数据传送指令属于复制,传送后,源操作数不变,不影响别的寄存器和标志。 传送指令包括“MOV”、“MOVX”、 “MOVC”。数据传送指令的约定是从右向左,左边是目的操作数,右边是源操作数。 源操作数可以是:累加寄存器、通用寄存器、直接地址、间接地址和立即数。目的操作数除了不能用立即数,其它和源操作数一样。,3.3.1.

10、1 片内数据存储器传送指令MOV,指令格式:MOV 目的操作数,源操作数 其中:源操作数可以为A、Rn、Ri、direct、#data,目的操作数可以为A、Rn、Ri、direct,组合起来总共16条,按目的操作数的寻址方式划分为五组:,(1)以A为目的操作数 MOV A,Rn;A (Rn) MOV A,direct;A(direct) MOV A,Ri;A((Ri)) MOV A,#data;A #data,3.3 51系列单片机指令系统,(2)以Rn为目的操作数 MOV Rn,A;Rn (A) MOV Rn,direct;Rn (direct) MOV Rn,#data;Rn #data

11、(3)以直接地址direct为目的操作数 MOV direct,A;direct (A) MOV direct,Rn;direct (Rn) MOV direct,direct ;direct (direct) MOV direct,Ri;direct ((Ri)) MOV direct,#data;direct #data,3.3 51系列单片机指令系统,(4)以间接地址Ri为目的操作数 MOV Ri,A;(Ri) (A) MOV Ri,direct;(Ri) (direct) MOV Ri,#data;(Ri) #data (5)以DPTR为目的操作数 MOV DPTR,#data16 ;

12、DPTR #data16 注意,源操作数和目的操作数中的Rn和Ri不能相互配对。如不允许有“MOV Rn,Rn”,“MOV Ri,Rn”这样的指令,在MOV指令中,不允许在一条指令中同时出现工作寄存器,无论它是寄存器寻址还是寄存器间接寻址。,3.3 51系列单片机指令系统,3.3.1.2 片外数据存储器传送指令MOVX,在MCS-51系统中只能通过累加器A与片外数据存储器进行数据传送,访问时,只能通过Ri和DPTR以间接寻址方式进行。MOVX指令共有四条: MOVX A,DPTR;A ((DPTR)) MOVX DPTR,A;(DPTR) (A) MOVX A,Ri;A ((Ri)) MOVX

13、 Ri,A;(Ri) (A) 其中前两条指令通过DPTR间接寻址,可以对整个64K片外数据存储器访问。后两条指令通过Ri间接寻址,只能对片外数据存储器的低端的256字节访问,访问时将低8位地址放于Ri中。,3.3 51系列单片机指令系统,3.3.1.3 程序存储器数据传送指令MOVC,程序存储器传送指令只有两条,一条用DPTR基址变址寻址。一条用PC基址变址寻址。 MOVC A,A+DPTR;A (A+DPTR) MOVC A,A+PC;A (A+PC) 这两条指令通常用于访问表格数据,因此称为查表指令。,3.3 51系列单片机指令系统,【例3-1】写出完成下列功能的程序段。 (1)将R0的内

14、容送R6中 程序为:MOV A,R0 MOV R6,A (2)将片内RAM 30H单元的内容送片外60H单元中 程序为:MOV A,30H MOV R0,#60H MOVX R0,A (3)将片外RAM 1000H单元的内容送片内20H单元中 程序为:MOV DPTR,#1000H MOV A,DPTR MOV 20H,A,3.3 51系列单片机指令系统,(4)将ROM 2000H单元的内容送片内RAM的30H单元中 程序为:MOV A,#0 MOV DPTR,#2000H MOVC A,A+DPTR MOV 30H,A,3.3 51系列单片机指令系统,3.3.1.4 数据交换指令,普通传送指

15、令实现将源操作数的数据传送到目的操作数,指令执行后源操作数不变,数据传送是单向的。数据交换指令数据作双向传送,传送后,前一个操作数原来的内容传送到后一个操作数中,后一个操作数原来的内容传送到前一个操作数中。 数据交换指令要求第一个操作数须为累加器A,共有5条。 XCH A,Rn;A Rn XCH A ,direct;Adirect XCH A,Ri;A(Ri) XCHD A,Ri;A03(Ri)03 SWAP A;A03A47,3.3 51系列单片机指令系统,【例3-2】若R0的内容为30H,片内RAM 30H单元的内容为23H,累加器A的内容为45H, 则执行XCH A,R0指令后片内RAM

16、 30H单元的内容为45H,累加器A中的内容为23H。 若执行SWAP A指令,则累加器A的内容为54H。,3.3 51系列单片机指令系统,3.3.1.5 堆栈指令,堆栈是在片内RAM中按“先进后出,后进先出”原则设置的专用存储区。数据的进栈和出栈由指针SP统一管理。堆栈操作指令有两条: PUSH direct;SP(SP+1),(SP)(direct) POP direct; direct(SP),(SP) (SP-1) 其中PUSH指令入栈,POP指令出栈。操作时以字节为单位。入栈时SP指针先加1,再入栈。出栈时内容先出栈,SP指针再减1。用堆栈保存数据时,先入栈的内容后出栈;后入栈的内容

17、先出栈。,3.3 51系列单片机指令系统,【例3-3】若入栈保存时入栈的顺序为: PUSH A PUSH B 则出栈的顺序为: POP B POP A,3.3 51系列单片机指令系统,3.3.2 算术运算指令,3.3 51系列单片机指令系统,3.3.2.1 加法指令,1一般的加法指令ADD ADD A,Rn;A (A) + (Rn) ADD A,direct;A (A) +(direct) ADD A,Ri;A (A) +((Ri)) ADD A,#data;A (A) + #data 2带进位加指令ADDC ADDC A,Rn;A (A) + (Rn) + C ADDC A,direct;A

18、 (A) +(direct)+ C ADDC A,Ri;A (A) +(Ri)+ C ADDC A,#data;A (A) + #data + C,3加1指令 INC A;A (A) + 1 INC Rn;Rn (Rn) + 1 INC direct;direct (direct)+ 1 INC Ri;(Ri)((Ri))+ 1 INC DPTR;DPTR (DPTR) + 1,其中,ADD和ADDC指令在执行时要影响CY、AC、OV和P标志位。而INC指令除了INC A要影响P标志位外,对其它标志位都没有影响。 在MCS-51单片机中,常用ADD和ADDC配合使用实现多字节加法运算。,3.3

19、 51系列单片机指令系统,【例3-4】试把存放在R1R2和R3R4中的两个16位数相加,结果存于R5R6中。 处理时,R2和R4用一般的加法指令ADD,结果放于R6中,R1和R3用带进位的加法指令ADDC,结果放于R5中,程序如下: MOV A,R2 ADD A,R4 MOV R6,A MOV A,R1 ADDC A,R3 MOV R5,A,3.3 51系列单片机指令系统,【例3-6】见书P45,3.3.2.2 减法指令,1带借位减法指令SUBB SUBB A,Rn;A (A) (Rn) - C SUBB A,direct;A (A) -(direct)- C SUBB A,Ri;A (A)

20、-(Ri)- C SUBB A,#data;A (A) - #data C 2减1指令DEC DEC A;A (A) - 1 DEC Rn;Rn (Rn) - 1 DEC direct;direct (direct)- 1 DEC Ri;(Ri)(Ri)- 1,3.3 51系列单片机指令系统,在51单片机中,只提供了一种带借位的减法指令,没有提供一般的减法指令,一般的减法操作可以通过先对CY标志清零,然后再执行带借位的减法来实现。,例3-7:设(45H)=0AAH,(47H)=66H,试编写45H内容减去47H内容后,结果再存入49H单元的程序。 MOV 45H, #0AAH MOV 47H,

21、 #66H MOV A, 45H ;向A设置被减数 CLR C ;清除进位标志CY SUBB A, 47H ;A(A)-(47H) -(C) MOV 49H, A ;将结果置于地址为49H的内部RAM存储单元中 执行以上程序后,(49H)=44H,CY=0,OV=1,AC=0。,3.3 51系列单片机指令系统,3.3.2.3 乘法指令,在MCS-51单片机中,乘法指令只有一条: MUL AB 该指令执行时将对存放于累加器A中的无符号被乘数和放于B寄存器中的无符号乘数相乘,积的高字节存于B寄存器中,低字节存于累加器A中。 指令执行后将影响CY和OV标志,CY复位,对于OV:当积大于255时(即B

22、中不为0),OV为1;否则,OV为0。,3.3 51系列单片机指令系统,3.3.2.4 除法指令,在MCS-51单片机中,除法指令也只有一条: DIV AB 该指令执行时将用存放在累加器A中的无符号被除数与存放在B寄存器中的无符号除数相除,除得的结果,商的存于累加器A中,余数存于B寄存器中。 指令执行后将影响CY和OV标志,一般情况CY和OV都清0,只有当B寄存器中的除数为0时,CY和OV才被置1。,3.3 51系列单片机指令系统,3.3.2.5 十进制调整指令,在MCS-51单片机中,十进制调整指令只有一条: DA A 它只能用在ADD或ADDC指令后面,用来对两个二位的压缩的BCD码数通过

23、用ADD或ADDC指令相加后存于累加器A中的结果进行调整,使得它得到正确的十进制结果。通过该指令可实现两位十进制BCD码数的加法运算。它的调整过程为: (1)若累加器A的低四位为十六进制的A-F或辅助进位标志AC为1,则累加器A中的内容作加06H调整。 (2)若累加器A的高四位为十六进制的A-F或进位标志CY为1,则累加器A中的内容作加60H调整,3.3 51系列单片机指令系统,【例3-6】在R3中有十进制数67,在R2中有十进制数85,用十进制运算,运算的结果放于R5中。 程序为: MOV A,R3 ADD A,R2 DA A MOV R5,A 程序中DA指令对ADD指令运算出来的放于累加器

24、A中的结果进行调整,调整后,累加器A中的内容为52H,CY为1,则结果为152,最后放于R5中的内容为52H(十进制数52)。,3.3 51系列单片机指令系统,3.3.3 逻辑运算指令,3.3 51系列单片机指令系统,3.3.3.1 逻辑与指令ANL,ANL A,Rn A(A) (Rn) ANL A,direct A (A) (direct) ANL A,Ri A (A) (Ri) ANL A,#data A (A) #data ANL direct,A direct (direct) (A) ANL direct,#data direct(direct) #data,3.3.3.2 逻辑或指

25、令ORL,ORL A,Rn A (A) (Rn) ORL A,direct A (A) (direct) ORL A,Ri A (A) (Ri) ORL A,#data A (A) #data ORL direct,A direct (direct) (A) ORL direct,#data direct(direct) #data,3.3 51系列单片机指令系统,3.3.3.3 逻辑异或指令XRL,XRL A,Rn A (A) (Rn) XRL A,direct A (A) (direct) XRL A,Ri A (A) (Ri) XRL A,#data A (A) #data XRL di

26、rect,A direct (direct) (A) XRL direct,#data direct direct) #data,3.3 51系列单片机指令系统,在使用中,逻辑与用于实现对指定位清0,其余位不变;逻辑或用于实现对指定位置1,其余位不变;逻辑异或用于实现指定位取反,其余位不变。 【例3-7】写出完成下列功能的指令段。 1对累加器A中的1、3、5位清0,其余位不变 ANL A,#11010101B 2对累加器A中的2、4、6位置1,其余位不变 ORL A,#01010100B 3对累加器A中的0、1位取反,其余位不变 XRL A,#00000011B,3.3 51系列单片机指令系统

27、,3.3.3.4 清零和求反指令,1清零指令:CLR A A 0 2求反指令:CPL A A 在MCS-51系统中,只能对累加器A中的内容进行清零和求反,如要对其它的寄存器或存储单元进行清零和求反,则须放在累加器A进行,运算后再放回原位置。 【例3-8】写出对R0寄存器内容求反的程序段。 程序为: MOV A,R0 CPL A MOV R0,A,3.3 51系列单片机指令系统,3.3.3.5 循环移位指令,MCS-51系统有四条对累加器A的循环移位指令,前两条只在累加器A中进行循环移位,后两条还要带进位标志CY进行循环移位。每一次移一位。分别如下: 1累加器A循环左移 RL A 2累加器A循环

28、右移 RR A 3带进位的循环左移 RLC A 4带进位的循环右移 RRC A 【例3-9】若累加器A中的内容为10001011B,CY=0,则执行RLC A指令后累加器A中的内容为00010110,CY=1。,3.3 51系列单片机指令系统,3.3.4 控制转移指令,3.3 51系列单片机指令系统,3.3.4.1 无条件转移指令,无条件转移指令是指当执行该指令后,程序将无条件地转移到指令指定的地方去。无条件转移指令包括长转移指令、绝对转移指令、相对转移指令和间接转移指令。,控制转移指令分为:无条件转移指令、有条件转移指令和子程序调用和返回指令。,1长转移指令LJMP LJMP addr16;

29、PC addr16 指令后面带目的位置的16位地址,执行时直接将该16位地址送给程序指针PC,程序无条件地转到16位目标地址指明的位置去。 指令中提供的是16位目标地址,所以可以转移到64KB程序存储器的任意位置,故得名为“长转移”。长转移指令需要三个字节。,3.3 51系列单片机指令系统,例3-10 ORG 0000H LJMP START ORG 0030H START:LJMP LAB ORG 7000H LAB: MOV A, R4,2绝对转移指令AJMP AJMP addr11;PC 100 addr11 AJMP指令后带的是目的位置的低11位直接地址,范围是00000000000-

30、11111111111,即2KB范围,而目的地址的高5位不变,所以程序转移的位置只能是和当前PC位置(AJMP指令地址加2)在同一2KB范围内。转移可以向前也可以向后,指令执行后不影响状态标志位。,3.3 51系列单片机指令系统,3短转移指令SJMP SJMP rel;PC (PC) + 2 + rel 短转移指令又叫相对转移指令。 SJMP指令后面的操作数rel是8位带符号补码数,8位补码的取值范围为-128+127,所以该指令的转移范围是:相对PC当前值向前128字节,向后127字节。,3.3 51系列单片机指令系统,注意:在单片机程序设计中,通常用到一条SJMP指令: SJMP $ 该指

31、令的功能是在自己本身上循环,进入等待状态。其中符号 $ 表示转移到本身,它的机器码为80 FEH。在程序设计中,程序的最后一条指令通常用它,使程序不再向后执行以避免执行后面的内容而出错。,3.3 51系列单片机指令系统,4变址寻址转移指令JMP JMP A+DPTR;PC (A) + (DPTR) 又叫间接转移指令。是51系统中唯一一条间接转移指令,转移的目的地址是由数据指针DPTR的内容与累加器A中的内容相加得到。 该指令的特点是转移地址可以在程序运行中加以改变。DPTR一般为确定值,根据累加器A的值来实现转移到不同的分支。在使用时往往与一个转移指令表一起来实现多分支转移。,3.3 51系列

32、单片机指令系统,【例3-11】下面的程序能根据累加器A的值0、2、4、6转移到相应的TAB0-TAB6分支去执行 MOV DPTR,#TABLE ;表首地址送DPTR JMP A+DPTR ;根据A值转 TABLE:AJMP TAB0 ;当(A)=0时转TAB0执行 AJMP TAB2 ;当(A)=2时转TAB2执行 AJMP TAB4 ;当(A)=4时转TAB4执行 AJMP TAB6 ;当(A)=6时转TAB6执行,3.3 51系列单片机指令系统,3.3 51系列单片机指令系统,3.3.4.2 有条件转移指令,有条件转移指令是指当条件满足时,程序转移到指定位置,条件不满足时,程序将继续顺次

33、执行。在MCS-51系统中,有条件转移指令有三种:累加器A判零条件转移指令、比较转移指令、减1不为零转移指令。,1累加器A判零条件转移指令 JZ rel ;若A=0,则PC (PC) + 2 + rel,否则,PC (PC) + 2 JNZ rel ;若A0,则PC (PC) + 2 + rel,否则,PC (PC) + 2 例3-12比较内部RAM单元中地址为60H的数据如果不为0,则传送到P1口,否则不传送。 MOV A, 60H JZ L1 MOV P1, A L1: .,3.3 51系列单片机指令系统,【例3-13】把片外RAM的30H单元开始的数据块传送到片内RAM的40H开始的位置

34、,直到出现零为止。 片内、片外数据传送以累加器A过渡。每次传送一个字节,通过循环处理,直到处理到传送的内容为0结束。 程序如下: MOV R0,#30H MOV R1,#40H LOOP:MOVX A,R0 MOV R1,A INC R1 INC R0 JNZ LOOP SJMP $,3.3 51系列单片机指令系统,2比较不等转移指令 比较转移指令用于对两个数作比较,并根据比较情况进行转移,比较转移指令有四条: CJNE A,#data,rel ;若A=data,则PC (PC) + 3,不转移,继续执行。若Adata,则C=0,PC (PC) + 3 + rel,转移。若Adata,则C=0

35、,PC (PC) + 3 + rel,转移。若(Rn)data,则C=1,PC (PC) + 3 + rel,转移。,3.3 51系列单片机指令系统,CJNE Ri,#data,rel ;若(Ri)=data,则PC (PC) + 3,不转移,继续执行。若(Ri)data,则C=0,PC (PC) + 3 + rel,转移。若(Ri)direct,则C=0,PC (PC) + 3 + rel,转移。若Adirect,则C=1,PC (PC) + 3 + rel,转移。,3.3 51系列单片机指令系统,例3-14内部RAM单元中两个存储单元地址为50H和51H,如果它们相等,则将地址为52H的数

36、据单元传送给58H,如果不相等,则将地址为62H的数据单元传送给58H。 MOV A,50H CJNE A, 51H, L1 MOV 58H, 52H SJMP L2 L1:MOV 58H, 62H L2:,3循环减1转移指令 该种指令是先减1后判断,若不为零则转移。指令有两条: DJNZ Rn,rel ;先Rn中的内容减1,再判断Rn中的内容是否等于零,若不为零,则转移。 DJNZ direct,rel ;先(direct)中的内容减1,再判断(direct)中的内容是否等于零,若不为零,则转移。 在51系统中,通常用DJNZ指令来构造循环结构,实现重复处理。,3.3 51系列单片机指令系统

37、,【例3-15】统计片内RAM中30H单元开始的20个数据中0个数,放于R7中。 用R2作循环变量,最开始置初值为20;作R7作计数器,最开始置初值为0;用R0作指针访问片内RAM单元,最开始置初值为30H;用DJNZ指令对R2减1转移进行循环控制,在循环体中用指针R0依次取出片内RAM中的数据,判断,如为0,则R7中的内容加1。程序: MOV R0,#30H MOV R2,#20 MOV R7,#0 LOOP:MOV A,R0 CJNE A,#0,NEXT INC R7 NEXT:INC R0 DJNZ R2,LOOP,3.3 51系列单片机指令系统,4判C转移指令 JC rel ;若C=1

38、,则转移,PC(PC)+2+rel;否则程序继续执行 JNC rel; 若C=0,则转移,PC(PC)+2+rel;否则程序继续执行 例3-16比较内部RAM单元中两个存储单元的大小。设A、B、C的地址分别为50H、51H、52H。A和B为无符号数,如果AB,则将1送入C。 MOV A, 50H CJNE A, 51H, L1 MOV 52H, #0 SJMP L3 L1: JC L2 MOV 52H, #1 SJMP L3 L2: MOV 52H, #-1 L3: .,3.3 51系列单片机指令系统,5判直接寻址位转移指令 JB bit,rel; 若(bit)=1,则转移,PC(PC)+3+

39、rel;否则程序继续执行 JNB bit,rel; 若(bit)=0,则转移,PC(PC)+3+rel;否则程序继续执行 JBC bit,rel; 若(bit)=1,则转移,PC(PC)+3+rel,且(bit)0;否则程序继续执行 利用位转移指令可进行各种测试。,例3-17内部RAM单元中存储单元地址为50H,如果该存储单元有奇数个1,则将R0置1,否则将R0清0。编写该程序。 首先将50H单元送给A,然后判断P标志位,根据P标志位的结果,给RO置1或清0。 MOV A, 50H JB P, L1 MOV R0, #0 SJMP L2 L1:MOV R0, #1 L2: .,3.3 51系列

40、单片机指令系统,3.3 51系列单片机指令系统,3.3.4.3 子程序调用指令,这类指令有四条。两条子程序调用指令,两条返回指令。 1绝对调用指令 指令格式:ACALL addr11 执行过程:PC(PC)+2 SP(SP)+1 (SP)(PC)70 SP(SP)+1 (SP)(PC)158 PC100addr11,2长调用指令 指令格式:LCALL addr16 执行过程:PC(PC)+3 SP(SP)+1 (SP)(PC)70 SP(SP)+1 (SP)(PC)158 PCaddr16,3.3 51系列单片机指令系统,3子程序返回指令 指令格式:RET 执行过程:PC158(SP) SP(

41、SP)-1 PC70(SP) SP(SP)-1 由于子程序调用指令执行时压入的内容是调用指令的下一条指令的地址,因而RET指令执行后,程序将返回到调用指令的下一条指令执行。,3.3 51系列单片机指令系统,4中断子程序返回指令 指令格式:RETI 执行过程:PC158(SP) SP(SP)-1 PC70(SP) SP(SP)-1 该指令用于中断服务子程序后面,作为中断服务子程序的最后一条指令,它的功能是返回主程序中断的断点位置,继续执行断点位置后面的指令。,3.3 51系列单片机指令系统,例3-18编写一个子程序,其首地址为LCOUNT,功能是计算A寄存器中1的个数,并将这个计数值放入寄存器R

42、0。编一程序段,求出地址为50H的16位内存单元的1的个数,放入寄存器A中 子程序如下: LCOUNT:MOV R0, #0 ;计数初值为0 MOV R1, #8 ;R1是循环变量,初始值为8,因为A寄存器有8位 LOOP:RLC A ;带进位左移1次,将当前最高位移到进位标志CY中 MOV R2, A ;由于马上要进行加法运算,保存A寄存器的内容到R2 MOV A, R0 ;将R0送入A中,为下一步加法做准备 ADDC A, #0 ;将CY加入A中 MOV R0, A ;将结果送回R0中 MOV A, R2 ;恢复A的值 DJNZ R1, LOOP ;一次循环结束,将循环计数器减一 RET,

43、主程序将这16位数据分成两个字节,分别传入A寄存器中,然后分别调用子程序计算出它们1的个数,然后再相加到A寄存器。 主程序如下: MOV A, 50H ACALL LCOUNT ;调用子程序 MOV 60H, R0 ;将计算结果保存在地址为60H的内存单元中 MOV A, 51H ACALL LCOUNT ;调用子程序 MOV A, R0 ;将计算结果保存在A寄存器中 ADD A, 60H ;将两次调用结果相加,3.3 51系列单片机指令系统,3.3.4.4 空操作指令,NOP ;PC (PC)+1 这是一条单字节指令。执行时,不作任何操作(即空操作),仅将程序计数器PC的内容加1,使CPU指

44、向下一条指令继续执行程序。它要占用一个机器周期,常用来产生时间延迟,构造延时程序。,3.3.5 位操作指令,3.3 51系列单片机指令系统,3.3.5.1 位数据传送指令,位传送指令有两条,用于实现位运算器C与一般位之间的相互传送。 MOV C,bit;C(bit) MOV bit,C;(bit)C 指令在使用时必须有位运算器C参与,不能直接实现两位之间的传送。如果进行两位之间的传送,可以通过位运算器C来传送。,【例3-16】把片内RAM中位寻址区的20H位的内容传送到30H位。 程序: MOV C,20H MOV 30H,C,3.3.5.2 位数据清零指令,CLR C;C0 CLR bit

45、;(bit)0,3.3 51系列单片机指令系统,3.3.5.3 位数据置1指令,SETB C;C1 SETB bit;(bit)1,3.3.5.4 位数据取反指令,CPL C;C/C CPL bit;(bit)(bit),3.3 51系列单片机指令系统,3.3.5.5 位与指令,ANL C,bit;CC(bit) ANL C,/bit;CC(/bit),3.3.5.6 位或指令,ORL C,bit;CC(bit) ORL C,/bit;CC(/bit),3.3 51系列单片机指令系统,【例3-17】利用位逻辑运算指令编程实现下面硬件逻辑电路的功能。,3.3 51系列单片机指令系统,程序: MO

46、V C,P1.0 ANL C,P1.1 CPL C ORL C,/P1.2 MOV F0,C MOV C,P1.3 ORL C,P1.4 ANL C,F0 CPL C MOV P1.5,C,3.3 51系列单片机指令系统,2021/2/15,76,3.4 51系列单片机汇编指令格式,标号: 操作码助记符 目的操作数,源操作数 ;注释,(1)操作码助记符表明指令的功能,不同的指令有不同的指令助记符,它一般用说明其功能的英文单词的缩写形式表示。,(2)操作数用于给指令的操作提供数据、数据的地址或指令的地址,操作数往往用相应的寻址方式指明。,(3)标号是该指令的符号地址,后面须带冒号。,(4)注释是

47、对该指令的解释,前面须带分号。,3.5 51系列单片机汇编程序常用伪指令,有一些指令,如指定目标程序或数据存放的地址、给一些指定的标号赋值、表示源程序结束等指令,并不产生目标程序(机器码),也不影响程序的执行,仅仅产生供汇编用的某些命令,用来对汇编过程进行某种控制或操作,这类指令称为伪指令。如果是手工编译,这些伪指令将失去意义。,3.5.1定义起始地址伪指令,格式:ORG 地址(十六进制表示) 这条伪指令放于一段源程序或数据的前面,汇编时用于指明程序或数据从程序存储空间什么位置开始存放。ORG伪指令后的地址是程序或数据的起始地址。 【例3-19】 ORG 1000H START:MOV A,#

48、7FH 指明后面的程序从程序存储器的1000H单元开始存放。,3.5.2 定义汇编结束伪指令,格式:END 该指令放于程序最后位置,用于指明汇编语言源程序的结束位置,当汇编程序汇编到END伪指令时,汇编结束。END后面的指令,汇编程序都不予处理。一个源程序只能有一个END命令,否则就有一部分指令不能被汇编。,3.5 51系列单片机汇编程序常用伪指令,3.5.3 标号赋值伪指令,格式:符号 EQU 项 该伪指令的功能是将指令中的项的值赋予EQU前面的符号。项可以是常数、地址标号或表达式。以后可以通过使用该符号使用相应的项。 【例3-19】 TAB1 EQU 1000H TAB2 EQU 2000

49、H 汇编后TAB1、TAB2分别等于1000H、2000H。程序后面使用1000H、2000H的地方就可以用符号TAB1、TAB2替换。 用EQU伪指令对某标号赋值后,该符号的值在整个程序中不能再改变。,3.5 51系列单片机汇编程序常用伪指令,3.5.4 字节定义伪指令,格式:标号: DB 项或项表 DB伪指令用于定义字节数据,可以定义一个字节,也可定义多个字节,定义多个字节时,两两之间用逗号间隔,定义的多个字节在存储器中是连续存放的。定义的字节可以是一般常数,也可以为字符,还可以是字符串,字符和字符串以引号括起来,字符数据在存储器中以ASCII码形式存放。 在定义时前面可以带标号,定义的标号在程序中是起始单元的地址。,3.5 51系列单片机汇编程序常用伪指令,3.5 51系列单片机汇编程序常用伪指令,【例3-20】 ORG 3000H TAB1: DB 12H,34H DB 5,A,abc 汇编后,各个数据在存储单元中的存放情况如下:,3.5.5 字定义伪指令,格式:标号: DW 项或项表 这条指令与DB相似,但用于定义字数据。项或项表指所定义的一个字在存储器中占两个字节。汇编时,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1