新编单片机原理与应用第三章课件

上传人:re****.1 文档编号:567643153 上传时间:2024-07-21 格式:PPT 页数:156 大小:1.74MB
返回 下载 相关 举报
新编单片机原理与应用第三章课件_第1页
第1页 / 共156页
新编单片机原理与应用第三章课件_第2页
第2页 / 共156页
新编单片机原理与应用第三章课件_第3页
第3页 / 共156页
新编单片机原理与应用第三章课件_第4页
第4页 / 共156页
新编单片机原理与应用第三章课件_第5页
第5页 / 共156页
点击查看更多>>
资源描述

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

1、 第第3 3章章 指令系统与汇编程序设计指令系统与汇编程序设计2021/6/71学习目标学习目标n MCS-51 MCS-51单片机的指令格式及寻址方式单片机的指令格式及寻址方式n 汇编语言的指令类型汇编语言的指令类型n MCS-51MCS-51单片机汇编语言编程基本方法单片机汇编语言编程基本方法n 伪指令使用及汇编语言程序完整格式伪指令使用及汇编语言程序完整格式n 应用应用MCS-51MCS-51单片机指令系统进行编程单片机指令系统进行编程2021/6/72主要内容主要内容3.1 3.1 指令概述指令概述3.2 3.2 寻址方式寻址方式3.3 3.3 指令系统指令系统3.4 3.4 伪指令伪

2、指令3.5 3.5 汇编语言程序设计汇编语言程序设计2021/6/733.1 3.1 指令概述指令概述 3.1.1 3.1.1 指令格式指令格式 一一条条汇编指指令令由由标号号、操操作作码、目目的的操操作作数数、源源操作数和注操作数和注释五部分五部分组成:成: 标号号 :操作:操作码 目的操作数目的操作数 , 源操作数源操作数 ; 注注释 例如:例如: HY1HY1:MOV R3 MOV R3 , #08H #08H ;执行数据行数据传送操作送操作 2021/6/741 1)二进制的表示形式:)二进制的表示形式:(以指令(以指令“累加器累加器A A的内容的内容+ 8”+ 8” 为例)为例) 0

3、0100100B 00100100B 操作码操作码 (加法)(加法) 00001000B 00001000B 操作数操作数 (08H08H)特点:特点: 能被能被CPUCPU直接识别、运行的形式。也称机直接识别、运行的形式。也称机 器码、目标代码。器码、目标代码。缺点:缺点: 不便于阅读、记忆和调试修改。不便于阅读、记忆和调试修改。指令的三种表示形式:指令的三种表示形式:2021/6/752 2)十六进制表示形式:)十六进制表示形式: 00100100B 24H 00100100B 24H 00001000B 08H 00001000B 08H 二进制形式二进制形式 十六进制形式十六进制形式2

4、021/6/763 3)“助记符助记符”形式(形式(“汇编格式汇编格式”):): 00100100B 24H00100100B 24H 00001000B 08H ADD A 00001000B 08H ADD A,#08H#08H 二进制表示形式二进制表示形式 十六进制表示十六进制表示 汇编格式汇编格式n用英文单词或字母、数字来表征指令功能,便于阅读、书用英文单词或字母、数字来表征指令功能,便于阅读、书写和交流。写和交流。n汇编格式的指令必须汇编格式的指令必须“翻译翻译”为二进制形式为二进制形式“机器码机器码”,才能为才能为CPUCPU识别和执行。识别和执行。2021/6/77汇编语言程序:

5、汇编语言程序: 标号标号 操作码操作码 操作数操作数 注释注释 START: MOV A ,#00H ;0ASTART: MOV A ,#00H ;0A MOV R7,#10 ;10R7 MOV R7,#10 ;10R7 MOV R2,#00000011B ;3R2 MOV R2,#00000011B ;3R2 LOOP: ADD A, R2 ;(A)+ (R2) LOOP: ADD A, R2 ;(A)+ (R2) ;A ;A DJNZ R7 ,LOOP ;R7 DJNZ R7 ,LOOP ;R7的内容的内容 ; ;减减1 1不为不为0 0 ; ;则循环则循环 NOPNOP SJMP $ S

6、JMP $2021/6/78助记符意义助记符意义操作码助记符操作码助记符 对照英文对照英文传送传送MOVMOVMOVeMOVe代码区数据传送代码区数据传送MOVCMOVCMOVe CodeMOVe Code外部外部RAMRAM区数据传区数据传送送MOVXMOVXMOVe eXternalMOVe eXternal压栈压栈PUSHPUSHPUSHPUSH退栈退栈POPPOPPOPPOP交换交换XCHXCHeXCHangeeXCHange5151系列单片机汇编语言操作码的对照英文系列单片机汇编语言操作码的对照英文2021/6/79助记符意义助记符意义操作码助记符操作码助记符 对照英文对照英文十进制

7、交换十进制交换XCHDXCHDeXCHange eXCHange DecimalDecimal加法加法ADDADDADDADD带进位加带进位加ADDCADDCADD with CarryADD with Carry带借位减带借位减SUBBSUBBSUBtract with SUBtract with BorrowBorrow加加1 1INCINCINCrementINCrement减减1 1DECDECDECrementDECrement乘乘MULMULMULtiplyMULtiply2021/6/710助记符意义助记符意义操作码助记符操作码助记符 对照英文对照英文除除DIVDIVDIVide

8、DIVide十进制调整十进制调整DADADecimal Decimal AdjustAdjust逻辑与逻辑与ANLANLLogicle ANdLogicle ANd逻辑或逻辑或ORLORLLogicle ORLogicle OR逻辑异或逻辑异或XRLXRLLogicle Logicle eXclusive-oReXclusive-oR求补求补CPLCPLComPLementComPLement清零清零CLRCLRCLeaRCLeaR2021/6/711助记符意义助记符意义操作码助记符操作码助记符 对照英文对照英文置位置位SETBSETBSET BitSET Bit左移左移RLRLRotate

9、LeftRotate Left带进位左移带进位左移RLCRLCRotate Left Rotate Left throuth the throuth the Carry flagCarry flag右移右移RRRRRotate RightRotate Right带进位右移带进位右移RRCRRCRotate Right Rotate Right throuth the throuth the Carry flagCarry flag(半字节)互换(半字节)互换SWAPSWAPSWAPSWAP2021/6/712助记符意义助记符意义操作码助记符操作码助记符 对照英文对照英文绝对转移绝对转移AJMP

10、AJMPAbsolute JuMPAbsolute JuMP相对转移相对转移SJMPSJMPShort JuMPShort JuMP长转移长转移LJMPLJMPLong JuMPLong JuMP跳转跳转JMPJMPJuMPJuMP累加器为零转移累加器为零转移 JZJZJump if acc is Jump if acc is ZeroZero累加器不为零转累加器不为零转移移JNZJNZJump if acc is Jump if acc is Not ZeroNot Zero2021/6/713助记符意义助记符意义操作码助记符操作码助记符 对照英文对照英文进位位为进位位为1 1转移转移 JC

11、JCJump if Carry Jump if Carry is setis set(Cy=1Cy=1)进位位为进位位为0 0转移转移 JNCJNCJump if Carry Jump if Carry is Not is Not set(Cy=0set(Cy=0)指定为为指定为为1 1转移转移 JBJBJump if Bit is Jump if Bit is set (bit=1set (bit=1)指定位为指定位为0 0转移转移 JNBJNBJump if Bit is Jump if Bit is Not set Not set (bit=0(bit=0)指定位为指定位为1 1转移转移

12、并清该位并清该位JBCJBCJump if Bit is Jump if Bit is set and Clear set and Clear bitbit2021/6/714助记符意义助记符意义操作码助记符操作码助记符 对照英文对照英文比较不等转移比较不等转移 CJNECJNECompare and Jump Compare and Jump if Not Equal if Not Equal 减减1 1不为不为0 0转移转移 DJNZDJNZDecrement and Decrement and Jump if Not Zero Jump if Not Zero 短调用短调用ACALLAC

13、ALLAbsolute CALLAbsolute CALL长调用长调用LCALLLCALLLong CALL Long CALL 子程序返回子程序返回RETRETRETurn RETurn 中断返回中断返回RETI RETI RETurn from RETurn from Interrupt Interrupt 空操作空操作NOP NOP No OPeration No OPeration 2021/6/715主要内容主要内容3.1 3.1 指令概述指令概述3.2 3.2 寻址方式寻址方式3.3 3.3 指令系统指令系统3.4 3.4 伪指令伪指令3.5 3.5 汇编语言程序设计汇编语言程序设

14、计2021/6/716 寻寻址址方方式式指指的的是是指指令令中中提提供供操操作作数数的的形形式式,即即寻寻找操作数或操作数所在地址的方式。找操作数或操作数所在地址的方式。 5151系系列列单单片片机机存存放放数数据据的的存存储储器器空空间间有有四四种种:内内部部RAMRAM、SFRSFR、外外部部RAMRAM和和程程序序存存储储器器。访访问问不不同同存存储储器中的数据时,采用不同的寻址方式。器中的数据时,采用不同的寻址方式。 5151系系列列单单片片机机有有七七种种寻寻址址方方式式:立立即即数数寻寻址址、直直接接寻寻址址、寄寄存存器器寻寻址址、寄寄存存器器间间接接寻寻址址、变变址址寻寻址址、相

15、对寻址和位寻址。相对寻址和位寻址。3.2 3.2 寻址方式寻址方式:2021/6/7173.2.1 3.2.1 立即寻址立即寻址 指令中直接给出操作数的寻址方式。指令中直接给出操作数的寻址方式。例例 MOV A , MOV A , #20H #20H MOV DPTR , MOV DPTR , #2009H#2009H立立即即数数用用一一个个前前面面加加“”的的8 8位位数数(如如40H40H)或或1616位数(如位数(如2008H2008H)表示。)表示。2021/6/718 汇汇编编语语言言指指令令 MOV MOV A A , , #20H #20H 存存储储到到程程序序存存储储器前要先翻

16、译成机器码指令器前要先翻译成机器码指令. .查表查表3-2(423-2(42页页) )得到得到: :操作数操作数20H直接存直接存放在指令代码中放在指令代码中74H74H20H20H1000H1000H1001H1001HROMROM74H 74H 20H20H2021/6/719 3.2.2 3.2.2 直接寻址直接寻址 指令中直接给出操作数地址的寻址方式。指令中直接给出操作数地址的寻址方式。 例:例: MOV A, MOV A, 40H40H 直直接接寻寻址址方方式式中中使使用用8 8位位二二进进制制数数表表示示地地址址,范范围围:00H-FFH00H-FFH,所所以以,只只能能访访问问片

17、片内内RAMRAM的的128128个个单单元元以及特殊功能寄存器(以及特殊功能寄存器(SFRSFR)。)。2021/6/720 指令操作示意:指令操作示意: MOV A, 40H2021/6/721例例 MOV A, 25H ; MOV A, 25H ;(25H25H)(A)(A) MOV P0, #50H ; MOV P0, #50H ; 立即数立即数50HP0 50HP0 MOV 80H,#50H ; MOV 80H,#50H ; 同上一条指令相同,只是表同上一条指令相同,只是表 ; ;达方式不一样,建议用上条达方式不一样,建议用上条 ; ;指令格式,易读指令格式,易读 MOV 30H,2

18、0H ; MOV 30H,20H ; (20H20H)(30H) (30H) 2021/6/7223.2.3 3.2.3 寄存器寻址寄存器寻址以通用寄存器的内容为操作数的寻址方式。以通用寄存器的内容为操作数的寻址方式。指令中包含寄存器的编码。指令中包含寄存器的编码。通用寄存器包括通用寄存器包括R0-R7R0-R7、A A、B B 和和 DPTRDPTR。2021/6/723 寄存器寻址方式示意图如下:寄存器寻址方式示意图如下:1110111101010010PCPCMOVMOVA, R2A, R20010010100100101程序存储器程序存储器内部内部RAM02HR2A0010010100

19、1001012021/6/724寄寄存存器器寻寻址址的的操操作作数数是是以以寄寄存存器器编编码码形形式式出出现现在在指指令令代代码码中中,通通常常操操作作码码和和寄寄存存器器编编码码合合用用一一个个字字节,因此寄存器寻址的指令机器码短,执行快。节,因此寄存器寻址的指令机器码短,执行快。0000100001010010MOVMOVA, A, R2R21110010111100101MOVMOVA, A, 02H02H00000010000000102021/6/725例例 MOV A,R0 ; (R0)(A) MOV A,R0 ; (R0)(A),机器码为,机器码为E8E8,仅占,仅占 ;1;1

20、字节,字节,A A和和R0R0均为寄存器寻址均为寄存器寻址 MUL AB ;(A)MUL AB ;(A)(B)(B)(A)(B)(B)(A)机器码为机器码为A4A4 ;A;A和和B B均为寄存器寻址均为寄存器寻址 MOV B,R0 ;(R0)(B),MOV B,R0 ;(R0)(B),机器码为机器码为88F0,88F0,其第其第 ;2;2字节字节F0F0为为B B的地址,的地址,B B为直接寻为直接寻 ; ;址,址,R0R0为寄存器寻址为寄存器寻址 PUAH ACC ;APUAH ACC ;A的内容压入堆栈,机器码为的内容压入堆栈,机器码为 ;C0E0;C0E0,其第,其第2 2字节字节E0E

21、0为为A A的地址的地址 ;A;A为直接寻址为直接寻址 2021/6/726 以寄存器的内容作为操作数的地址的寻址方式。以寄存器的内容作为操作数的地址的寻址方式。 指指令令中中含含有有寄寄存存器器的的编编码码,寄寄存存器器中中存存放放操操作作数数的的存储地址。存储地址。 能能够够进进行行寄寄存存器器间间接接寻寻址址的的寄寄存存器器有有:R0R0、R1R1和和DPTRDPTR。 3.2.4 3.2.4 寄存器间接寻址寄存器间接寻址2021/6/727寄存器间接寻址示意:寄存器间接寻址示意: MOV AMOV A,R0R02021/6/728 用用R0R0和和R1R1作作地地址址指指针针时时,可可

22、寻寻址址片片内内RAMRAM的的256256个个单单元,但不能访问元,但不能访问SFRSFR。 对对于于外外部部RAMRAM,最最好好用用1616位位的的DPTRDPTR寄寄存存器器间间接接寻寻址址访访问问。访访问问外外部部RAMRAM只只有有数数据据传传送送类类指指令令,并并且且用用MOVXMOVX作为操作码助记符。作为操作码助记符。2021/6/729例例 MOV R0, A ;(A)(R0) MOV R0, A ;(A)(R0) MOVX A,R1 ; MOVX A,R1 ;外部外部RAMRAM(地址为(地址为P2:R1 P2:R1 ) ; ; 的的内容内容(A)(A) MOVX DPT

23、R ,A ;(A) MOVX DPTR ,A ;(A)以以DPTRDPTR内容为地址内容为地址 ; ;的外部的外部RAMRAM2021/6/730 基址寄存器加变址寄存器间接寻址方式。基址寄存器加变址寄存器间接寻址方式。 基址寄存器:基址寄存器:DPTRDPTR 或或 PCPC 变址寄存器:累加器变址寄存器:累加器 A A 两两者者内内容容相相加加形形成成的的1616位位数数作作为为操操作作数数的的地地址址,操作数在操作数在程序存储器程序存储器中。中。 变址寻址方式常用于访问程序存储器中的常数。变址寻址方式常用于访问程序存储器中的常数。 指令助记符为指令助记符为 MOVCMOVC 3.2.5

24、3.2.5 变址寻址变址寻址2021/6/731变址寻址方式示意:变址寻址方式示意: MOVC AMOVC A,A+DPTRA+DPTR2021/6/732例:例: MOVC A, A+DPTR MOVC A, A+DPTR ; (A)+(DPTR)(A); (A)+(DPTR)(A) MOVC A , A+PC MOVC A , A+PC ; (A)+(PC) (A); (A)+(PC) (A) JMP JMP A+DPTR A+DPTR ; (A)+(DPTR)(PC) ; (A)+(DPTR)(PC) 2021/6/733 以当前以当前PC(PC(程序计数器程序计数器) )的值加上指令中

25、给出的的值加上指令中给出的偏移量偏移量 relrel,构成实际操作数地址的寻址方式称为,构成实际操作数地址的寻址方式称为相对寻址。相对寻址。 3.2.6 3.2.6 相对寻址相对寻址2021/6/734 例例: : 2010H: JZ 05H 2010H: JZ 05H机器码机器码: 60H 05H: 60H 05H05H05H2011H2011H60H60H2010H2010H2012H2012H转移指令的首地址转移指令的首地址当前当前PC的值的值 目的地址目的地址当前当前PCPC的值的值 + rel + rel 转移指令首地址转移指令首地址+ +转移指令字节数转移指令字节数 + rel+

26、rel 2010H + 22010H + 2 + 5 + 5 2017H2017H2021/6/735 偏移量偏移量relrel是有符号的单字节数。用补码表示,范是有符号的单字节数。用补码表示,范围:围:-128 -128 +127+127(00FFH00FFH),负数表示从当前地址向),负数表示从当前地址向前转移,正数表示从当前地址向后转移。前转移,正数表示从当前地址向后转移。 例例: : 2010H: JZ 05H 2010H: JZ 05H目的地址目的地址: 2017H: 2017H 2010H: JZ 0 2010H: JZ 0F6HF6H目的地址目的地址: ?: ? 2012H +

27、2012H + F6HF6H = 2000H +(12H + F6H) = 2008H = 2000H +(12H + F6H) = 2008H 2012H + ( 2012H + ( -10 -10 ) = 2008H) = 2008H2021/6/736 在实际编程应用中,相对偏移量在实际编程应用中,相对偏移量 relrel 通常是用通常是用转移目的地址的转移目的地址的标号标号来替代,由汇编程序自动计算来替代,由汇编程序自动计算偏移量偏移量relrel,不需要手算。,不需要手算。MAXMAX: MOV : MOV A , #2FHA , #2FH MOV MOV R0 , #20HR0 ,

28、 #20H CLR CLR C C SUBB SUBB A , R0A , R0 JZ JZ MAXMAX INC INC R0R0 2021/6/737指指令令中中给给出出位位操操作作数数的的位位地地址址,根根据据位位地地址址访访问问位操作数位操作数的寻址方式。的寻址方式。 3.2.7 3.2.7 位寻址位寻址例如:例如:SETB SETB 70H70H ;1 ;1地址为地址为70H70H的位的位2021/6/7382EH2EH70H70H1 12021/6/739某些特殊功能寄存器(某些特殊功能寄存器(SFRSFR)中的位也可以位寻址)中的位也可以位寻址 SETB 0SETB 0AFHAF

29、H ;1EA;1EA位位 SETB SETB EAEA ; ;同上同上 SETB SETB IE.7IE.7 ; ;同上同上2021/6/740主要内容主要内容3.1 3.1 指令概述指令概述3.2 3.2 寻址方式寻址方式3.3 3.3 指令系统指令系统3.4 3.4 伪指令伪指令3.5 3.5 汇编语言程序设计汇编语言程序设计2021/6/7415151系列单片机的指令系统共有系列单片机的指令系统共有111111条指令。条指令。按指令的长度可分为:按指令的长度可分为:n 单字节指令单字节指令4949条;条;n 双字节指令双字节指令4545条;条;n 三字节指令三字节指令1717条。条。3.

30、3 指令系统: 3.3.1 3.3.1 指令系统概述指令系统概述2021/6/742n 按指令的执行时间可分为:按指令的执行时间可分为: 单机器周期的指令单机器周期的指令6464条;条; 双机器周期的指令双机器周期的指令4545条;条; 四个机器周期的指令(乘、除)四个机器周期的指令(乘、除)2 2条;条; 2021/6/743 按指令的功能可分为:按指令的功能可分为:n 数据传送类指令数据传送类指令2929条;条;n 算术运算类指令算术运算类指令2424条;条;n 逻辑操作类指令逻辑操作类指令2424条;条;n 控制转移类指令控制转移类指令1717条;条;n 位操作类指令位操作类指令1717

31、条。条。2021/6/744 数据传送指令的基本功能是将指令中数据传送指令的基本功能是将指令中指定的源操作数送到目的地址中。指定的源操作数送到目的地址中。 例:例: MOV AMOV A, B B ;(A) - (B)(A) - (B) ( (目的目的) ) - 0; i-) Bk=Aj;j+;k+; AjAj10H10H35H35HBkBk50H50H75H75H2021/6/748C程序:程序: j=0x10; k=0x50; for(i=0x26; i0; i-) Bk=Aj;j+;k+; 汇编语言程序:言程序: MOV R0, #10HMOV R0, #10H MOV R1, #50H

32、MOV R1, #50H MOV R7, #26HMOV R7, #26HNET1: MOV R1, R0NET1: MOV R1, R0 INC R0 INC R0 INC R1 INC R1 DJNZ R7, NET1DJNZ R7, NET12021/6/749汇编语言程序:言程序: MOV R0, #10HMOV R0, #10H MOV R1, #50HMOV R1, #50H MOV R7, #26HMOV R7, #26HNET1: NET1: MOV R1, R0MOV R1, R0 INC R0 INC R0 INC R1 INC R1 DJNZ R7, NET1 DJNZ

33、R7, NET1查查4242页指令系统表页指令系统表无此指令无此指令 MOV A , R0 MOV A , R0 MOV R1 , A MOV R1 , A2021/6/750修改后的程序:修改后的程序: MOV R0, #10H ; MOV R0, #10H ; 数据源起始地址送数据源起始地址送R0R0 MOV R1, #50H ; MOV R1, #50H ; 目标单元起始地址送目标单元起始地址送R1R1 MOV R7, #26H ; MOV R7, #26H ; 循环次数送循环次数送R7R7NET1: MOV A, R0 NET1: MOV A, R0 ; ; 要传送的数据送要传送的数据

34、送A A MOV R1, A ; MOV R1, A ; 通过通过A A送入目标单元送入目标单元 INC R0INC R0; R0; R0的值增的值增1,1,源地址指针源地址指针指向下一个单元指向下一个单元INC R1 INC R1 ; R1; R1的值增的值增1,1,目的地址指针指向下一个单元目的地址指针指向下一个单元 DJNZ R7 , NET1 DJNZ R7 , NET1; R7; R7内容减内容减1 1,; ; 若不为若不为0, 0, 转移到转移到NET1NET1继续执行继续执行, ,; ; 若为若为0,0,则结束循环则结束循环SJMP $SJMP $; ; 等待等待ENDEND;

35、; 程序结束程序结束. .2021/6/7512021/6/752例例3-103-10将片外将片外RAMRAM中中2000H2000H单元内容传入单元内容传入RAMRAM中中50H50H单元。单元。从片外从片外RAMRAM读取数据有读取数据有2 2条指令:条指令:MOVX A, DPTRMOVX A, DPTR;(A) - (DPTR);(A) 0H - 09 9H 0011 H 0011 10011001 - 0000 - 0000 10011001分析:只需将分析:只需将39H39H的高的高4 4位清零,低位清零,低4 4位不变。位不变。 可采用逻辑与指令:可采用逻辑与指令: ANL R1

36、ANL R1,#0FH#0FH 执行过程为:执行过程为: 0011 10010011 1001 0000 11110000 1111 0000 1001 0000 10012021/6/791 例例3-26 3-26 设设(A A)=AAH=AAH,P1=FFHP1=FFH,试试通通过过编编程程把把A A的的低低 4 4位送入位送入P1P1口低口低4 4位,位,P1P1口高口高4 4位不变。位不变。(1): (1): 清零清零A A的高的高4 4位,低位,低4 4位保留;位保留; (A A):): AAH - AAH - 0 0AH 1010 1010 - AH 1010 1010 - 000

37、00000 1010 1010(2): (2): 清零清零P1P1口低口低4 4位,高位,高4 4位不变;位不变; (P1P1):):FFH - FFFH - F0 0H 1111 1111 - 1111 H 1111 1111 - 1111 00000000(3): (3): 把把A A的低的低4 4位和位和P1P1口的高口的高4 4位装配到一起。位装配到一起。 (P1P1):): FAH 1111 1010 FAH 1111 10102021/6/792 (1): (1): 清零清零A A的高的高4 4位,低位,低4 4位保留;位保留; (A A):): AAH - AAH - 0 0AH

38、 1010 1010 - AH 1010 1010 - 00000000 1010 1010 ANL AANL A,#00001111B#00001111B(2): (2): 清零清零P1P1口低口低4 4位,高位,高4 4位不变;位不变; (P1P1):):FFH - FFFH - F0 0H 1111 1111 - 1111 H 1111 1111 - 1111 00000000 ANL P1ANL P1,#11110000B#11110000B(3): (3): 把把A A的低的低4 4位和位和P1P1口的高口的高4 4位装配到一起。位装配到一起。 (P1P1):): FAH 1111

39、1010 FAH 1111 1010 ORL P1ORL P1,A A2021/6/793 ANL A ANL A,#0FH ;#0FH ;取出取出A A的低的低4 4位,高位,高4 4位置位置0 0 ANL P1 ANL P1,#0F0H ;#0F0H ;取出取出P1P1口的高口的高4 4位,低位,低4 4位置位置0 0 ORL P1 ORL P1,A ;A ;字节装配字节装配2021/6/794 例例3-27 3-27 编编程程使使内内部部RAMRAM中中的的30H30H单单元元内内容容的的低低2 2位位清清0 0,高高2 2位置位置1 1,中间,中间4 4位取反。位取反。低低2 2位清位

40、清0 0: ? ? ? ? - ? ? - ? ?0000 ANL 30H ANL 30H,#111111#1111110000B B高高2 2位置位置1: 1: ? ? - ? ? - 1111? ? ? ORL 30H ORL 30H,# #1111000000B000000B中间中间4 4位取反:位取反:?00 1100 11? - ? - ?11 0011 00? XRL 30H XRL 30H,#00#001111111100B00B;3CH;3CH2021/6/795 51 51系列单片机的移位指令只能对系列单片机的移位指令只能对累加器累加器 A A 进进行移位,移位示意图如下所示

41、:行移位,移位示意图如下所示: 2021/6/7962021/6/797 例例3-29 3-29 已知已知2DH2DH单元有一正数,试编程求其负数的单元有一正数,试编程求其负数的补码并将结果传送到补码并将结果传送到30H30H单元。单元。 MOV AMOV A,2DH2DH; ;将将2DH2DH单元内容送单元内容送A A CPL A CPL A; ;按位取反按位取反 INC A INC A; ;加加1 1 MOV 30H MOV 30H,A A; ;结果送到结果送到30H30H单元单元 SJMP $ SJMP $; ;等待等待2021/6/798 3.3.5 3.3.5 控制转移指令控制转移指

42、令 控控制制转转移移类类指指令令的的功功能能是是改改变变指指令令的的执执行行顺顺序序,转移到指令指示的新的地址执行程序。转移到指令指示的新的地址执行程序。2021/6/799控制转移指令分类:控制转移指令分类:u 无无条条件件转转移移:无无需需判判断断,执执行行该该指指令令就就转转移移到到目目的的地址。地址。 u 条条件件转转移移:需需判判断断标标志志位位是是否否满满足足条条件件,若若满满足足条条件,则转移到目的地址,否则顺序执行件,则转移到目的地址,否则顺序执行 。2021/6/7100 绝绝对对转转移移:转转移移的的目目的的地地址址用用绝绝对对地地址址指指示示,通通常常为无条件转移。为无条

43、件转移。 相相对对转转移移:转转移移的的目目的的地地址址用用相相对对于于当当前前PCPC的的偏偏移移量来表示,通常为条件转移。量来表示,通常为条件转移。relrel2011H2011HSJMPSJMP2010H2010H2012H2012H转移指令的首地址转移指令的首地址当前当前PC的值的值执行转移指令时执行转移指令时PC的值的值 当前当前PCPC的值的值转移指令首地址转移指令首地址+ +转移指令字节数转移指令字节数2021/6/7101 n长长转转移移/ /长长调调用用:目目的的地地址址在在距距当当前前PCPC的的64KB64KB范范围围内。内。 n短短转转移移/ /短短调调用用:目目的的地

44、地址址在在距距当当前前PCPC的的一一个个较较小小的范围内,如的范围内,如 -128 -128 127 Byte 127 Byte 或或 2KB.2KB.2021/6/7102例例3-30 3-30 比较下列三条指令比较下列三条指令 SJMP SYSADR ; SJMP SYSADR ; 相对转移相对转移 AJMP SYSADR ; AJMP SYSADR ; 绝对转移绝对转移 LJMP SYSADR ; LJMP SYSADR ; 长转移长转移 (1) (1) SYSADRSYSADR是符号地址,即标号;是符号地址,即标号; (2)(2)三条指令同属于无条件转移指令;三条指令同属于无条件转移

45、指令; (3)(3)三条指令的转移地址都是三条指令的转移地址都是SYSADRSYSADR,但汇编时的,但汇编时的计算方法不同。计算方法不同。2021/6/7103 1000H 1000H: SJMP SYSADRSJMP SYSADR SYSADR: MOV A, #20H SYSADR: MOV A, #20H SJMP SJMP是相对转移指令,它的操作数是一个是相对转移指令,它的操作数是一个8 8位偏移量位偏移量 假设假设: SYSADR = 1030H: SYSADR = 1030H 当前当前PCPC值值 = 1000H + 2 = 1002H= 1000H + 2 = 1002H 相对

46、偏移量相对偏移量 目的地址目的地址 - - 当前当前PCPC值值 1030H 1002H 1030H 1002H 2EH2EH SJMP SYSADR = SJMP SYSADR = SJMP 2EHSJMP 2EH2021/6/7104 SJMP relSJMP rel 相对偏移量相对偏移量 rel rel 是一个是一个8 8位补码数,其取值范围为位补码数,其取值范围为 -128+127. -128+127. 所以,相对转移指令的转移范围所以,相对转移指令的转移范围: :relrel2011H2011HSJMPSJMP2010H2010H2012H2012H转移指令的首地址转移指令的首地址当

47、前当前PC值值当前当前PC值值+127当前当前PC值值-1282021/6/7105 1000H 1000H: AJMP SYSADRAJMP SYSADR SYSADR: MOV A, #20H SYSADR: MOV A, #20H AJMP AJMP是绝对转移指令,它的操作数是一个是绝对转移指令,它的操作数是一个1111位地址位地址 假设假设: SYSADR = 1030H: SYSADR = 1030H 当前当前PCPC值值 = 1000H + 2 = 1002H= 1000H + 2 = 1002H 当前当前PCPC值:值:0001 00001 0000 0000 0010000 0

48、000 0010 目的地址:目的地址:0001 00001 0000 0011 0000000 0011 0000 AJMP SYSADR = AJMP SYSADR = AJMP 000 0011 0000BAJMP 000 0011 0000B2021/6/7106 AJMP addr11AJMP addr11 addr11 addr11 是一个是一个1111位数,取值范围为位数,取值范围为 00 00 - - 11. 11. 所以,所以,AJMPAJMP指令的转移范围为指令的转移范围为2KB.2KB.addr11addr112011H2011HAJMPAJMP2010H2010H2012

49、H2012H转移指令的首地址转移指令的首地址当前当前PC值值 0010 0 - - -0010 0111 1111 11110010 0000 0000 00002000H2000H27FFH27FFH2021/6/7107 1000H 1000H: LJMP SYSADRLJMP SYSADR SYSADR: MOV A, #20H SYSADR: MOV A, #20H LJMP LJMP是长转移指令,它的操作数是一个是长转移指令,它的操作数是一个1616位地址位地址 假设假设: SYSADR = 1030H: SYSADR = 1030H LJMP SYSADR = LJMP SYSAD

50、R = LJMP 1030HLJMP 1030H LJMPLJMP指令的转移范围为整个指令的转移范围为整个64KB64KB程序存储器空间。程序存储器空间。2021/6/7108 例例3-31 3-31 要求要求 当(当(A A)=0 =0 转移到转移到 程序段程序段 K0 K0 当(当(A A)=2 =2 转移到转移到 程序段程序段 K1 K1 当(当(A A)=4 =4 转移到转移到 程序段程序段 K2K2 MOV DPTR , #TABLE ; MOV DPTR , #TABLE ; 表首地址送表首地址送DPTRDPTR中中 JMP A+DPTR ; JMP A+DPTR ; 以以A A中

51、内容为偏移量跳转中内容为偏移量跳转 TABLE: AJMP K0 ;TABLE: AJMP K0 ;(A)=0A)=0转转K0K0执行执行 AJMP K1 ; (A)=2AJMP K1 ; (A)=2转转K1K1处执行处执行 AJMP K2 ; (A)=4AJMP K2 ; (A)=4转转K2K2执行执行2021/6/7109例例3-32 3-32 查询查询P1P1口输入,若为口输入,若为48H48H程序向下执行程序向下执行, ,否则否则等待,直至等待,直至P1P1口出现口出现48H48H。 MOV A , P1MOV A , P1 WAIT : CJNE A , #48H , WAIT WA

52、IT : CJNE A , #48H , WAIT 2021/6/7110其它控制转移类指令其它控制转移类指令: :DJNZ R7, LOOPDJNZ R7, LOOPJZ LOOP1JZ LOOP1JNZ LOOP2JNZ LOOP22021/6/7111子程序调用指令子程序调用指令: :LCALLLCALLaddr16addr16指令操作过程:指令操作过程:(1 1)()(PCPC) - - (PC+3PC+3) ;取指令取指令PCPC自动增加自动增加(2 2)()(SPSP) - - (SP+1SP+1) ;把当前把当前PCPC推入堆栈推入堆栈 栈顶栈顶 - - (PCLPCL) ;PC

53、PC低低8 8位入栈位入栈 (SPSP) - - (SP+1SP+1) 栈顶栈顶 - - (PCHPCH) ;PCPC高高8 8位入栈位入栈(3 3)()(PCPC) - addr16 - addr16 ;转移到指定地址;转移到指定地址2021/6/7112子程序返回指令子程序返回指令: :RETRET指令操作过程:指令操作过程:(PCHPCH) - - 栈顶单元内容栈顶单元内容 ;恢复恢复PCPC高高8 8位位(SPSP) - - (SP-1SP-1)(PCLPCL) - - 栈顶单元内容栈顶单元内容 ;恢复恢复PCPC低低8 8位位(SPSP) - - (SP-1SP-1)中断返回指令中断

54、返回指令: :RETIRETI RETI RETI基本功能与基本功能与RETRET相同,但还与中断系统有关。相同,但还与中断系统有关。2021/6/7113例例3-34 3-34 子程序子程序调用调用和返回。和返回。2021/6/7114 3.3.6 3.3.6 位操作指令位操作指令 5151系系列列单单片片机机的的硬硬件件结结构构中中,有有一一个个位位处处理理器器。在在进进行行位位操操作作时时,使使用用进进位位标标志志CYCY作作为为位位累累加加器器。位位存存储储器器是是片片内内RAMRAM字字节节地地址址20H20H2FH2FH单单元元中中连连续续128128个个位和特殊功能寄存器中的部分

55、寄存器。位和特殊功能寄存器中的部分寄存器。2021/6/7115MOV CMOV C,ACC.1 ACC.1 ; CY - ACC.1; CY - ACC.1 ANL C ANL C,ACC.0 ACC.0 ; CY - CY; CY - CY(ACC.0)(ACC.0) ORL C ORL C,/26H /26H ; CY - CY; CY - CY(/26H(/26H)CLR 28H CLR 28H ; (28H) - 0; (28H) - 0 SETB C SETB C; CY - 1; CY - 1 CPL C CPL C ; CY - (/C); CY - (/C) JC LOOP1

56、 JC LOOP1JBJB61H, LOOP261H, LOOP2JBCJBC62H, LOOP362H, LOOP32021/6/7116 例例3-38 3-38 在在P1P1口的口的P1.0P1.0、P1.1P1.1、P1.2P1.2引脚上分别有变引脚上分别有变量量A A、 B B、C C,试编程实现表达式,试编程实现表达式: : Y 由由P1.7P1.7输出。输出。 用硬件方式实现:用硬件方式实现:2021/6/7117LSUB: MOV ALSUB: MOV A,P1 ; P1P1 ; P1口数送口数送A A ANL A ANL A,#07H ; #07H ; 高位清高位清0 0,低,

57、低3 3位不变位不变 MOV CMOV C,ACC.1 ; ACC.1ACC.1 ; ACC.1即即P1.1P1.1,将变量,将变量B B送送CYCY ANL C ANL C,/ ACC.0 ; CY/ ACC.0 ; CY(/A/A)B B ANL C ANL C,/ACC.2 ; CY/ACC.2 ; CY(/A/A)BB(/C/C) MOV PSW.5MOV PSW.5,C ; PSW.5=C ; PSW.5= MOV C MOV C,ACC.0 ; CYAACC.0 ; CYA ANL C ANL C,/ ACC.1 ; CYA/ ACC.1 ; CYA(/B/B) ANL CANL

58、C,ACC.2 ; CYAACC.2 ; CYA(/B/B)C C ORL C ORL C,PSW.5 ; CYPSW.5 ; CY(/A/A)BB(/C/C)+ + ; A ; A(/B/B)C C MOV P1.7 MOV P1.7,C ; C ; 输出输出 用软件方式实现:用软件方式实现:2021/6/7118主要内容主要内容3.1 3.1 指令概述指令概述3.2 3.2 寻址方式寻址方式3.3 3.3 指令系统指令系统3.4 3.4 伪指令伪指令3.5 3.5 汇编语言程序设计汇编语言程序设计2021/6/7119汇编有两种形式:汇编有两种形式: 手工汇编手工汇编 机器汇编机器汇编3.

59、4 3.4 伪指令伪指令汇编语言汇编语言源程序源程序机器语言机器语言目标程序目标程序翻译翻译(汇编)(汇编)2021/6/7120 使用机器汇编时,必须提供一些信息,比如使用机器汇编时,必须提供一些信息,比如: : 哪哪些是指令,哪些是数据,数据是字节还是字,程序的些是指令,哪些是数据,数据是字节还是字,程序的起始点和结束点在何处等等。起始点和结束点在何处等等。 这些信息是以指令的形式插入到源程序中的,这这些信息是以指令的形式插入到源程序中的,这种用于控制汇编过程的指令称为种用于控制汇编过程的指令称为伪指令伪指令 。 功能:功能:用来对汇编过程进行某种控制用来对汇编过程进行某种控制。 伪指令有

60、没有对应的机器指令?伪指令有没有对应的机器指令?2021/6/7121 1.1.汇编起始命令汇编起始命令 ORG (origin)ORG (origin) ORG 16ORG 16位地址位地址 ORGORG伪指令用于指定程序或常数在程序存储器中伪指令用于指定程序或常数在程序存储器中的起始存储地址,即汇编后生成的目标程序的起的起始存储地址,即汇编后生成的目标程序的起始存储地址。始存储地址。 例:例:ORG 2000HORG 2000HMOVMOVA A,#2FH#2FH常用的几条伪指令常用的几条伪指令2021/6/71222. 汇编终止命令汇编终止命令 END 标号标号: END 该命令是汇编语

61、言源程序的结束标志,用于终该命令是汇编语言源程序的结束标志,用于终止源程序的汇编工作。止源程序的汇编工作。 POSI:MOV A, #01HDONE:MOV FUNC, ASJMP $END2021/6/7123 3. 赋值命令赋值命令 EQU 标号标号 EQU 数值表达式数值表达式 给标号(字符串)赋值。用字符串代替一给标号(字符串)赋值。用字符串代替一个具体数值。个具体数值。例:例: AAAAEQUEQU30H30HK EQUK EQU40H40H MOV AMOV A,AAAA ;= MOV A ;= MOV A,30H30H MOV AMOV A,K1K1 ;= ;= MOV AMOV

62、 A,40H40H2021/6/7124 4. 定定义字字节 DB(Define Byte) 标号:标号: DB DB 项或项表项或项表 项或项表中的数可以是一个项或项表中的数可以是一个8 8位二进制数或是用逗位二进制数或是用逗号隔开的一串号隔开的一串8 8位二进制数。位二进制数。 DB DB的功能是定义一个或若干个字节。的功能是定义一个或若干个字节。2021/6/7125 例例3-393-39 ORG 1000HORG 1000H DB 50H,60H,12, DB 50H,60H,12, C C程序的汇编结果为:程序的汇编结果为:MACRO ASSEMBLER A51 V8.00地址 目标

63、代码 汇编语言源程序1000 ORG 1000H1000 50 60 0C 43 DB 50H, 60H, 12, C END2021/6/71265. 定义数据字定义数据字 DW (Define Word) 标号:标号: DW 项或项表项或项表 定义一个或若干个数据定义一个或若干个数据字字(16位二进制数)。位二进制数)。 高高8位存入地址小的存储单元,低位存入地址小的存储单元,低8位存入地址大位存入地址大的存储单元。的存储单元。2021/6/7127例例3-40 ORG 1000H DW 3450H,60H,12,C汇编结果为:汇编结果为:MACRO ASSEMBLER A51 V8.00

64、地址 目标代码 汇编语言源程序1000 ORG 1000H1000 34 50 DW 3450H, 60H, 12, C1002 00 601004 00 0C1006 00 43 END2021/6/7128 6. 预留存储空间预留存储空间 DS (Define Storage) 标号:标号: DS 表达式表达式 从标号地址开始,保留若干个字节的存储空间。从标号地址开始,保留若干个字节的存储空间。保留的字节单元数由表达式的值决定。保留的字节单元数由表达式的值决定。2021/6/7129例例 3-41 ORG 1000H DS 10HDB 99HMACRO ASSEMBLER A51 V8.0

65、0地址 目标代码 汇编语言源程序1000 ORG 1000H1000 DS 10H1010 99H DB 99H END2021/6/7130 7.定义位地址定义位地址 BIT 位名字位名字 BIT 位地址位地址 功能功能: 给一个可位寻址的位单元起一个名字。给一个可位寻址的位单元起一个名字。 赋值后在后续的源程序编写中可用该名字代替赋值后在后续的源程序编写中可用该名字代替BIT后面的位地址,便于阅读。后面的位地址,便于阅读。例:例: ABC BIT P1.1QQ BIT P3.22021/6/7131 8. 将内部将内部RAM地址赋值给名字地址赋值给名字 DATA 名字名字DATA DATA

66、 直接字节地址直接字节地址 给一个给一个8 8位内部位内部RAMRAM单元起一个名字。单元起一个名字。 例:例: OPRAND1 OPRAND1DATADATA 50H 50HMOVMOV A A,OPERAND1OPERAND1 = = MOVMOV A A,50H50H2021/6/7132单片机单片机A51汇编程序还有一些其他的伪指汇编程序还有一些其他的伪指令,详见令,详见58页表页表3-3。2021/6/7133主要内容主要内容3.1 3.1 指令概述指令概述3.2 3.2 寻址方式寻址方式3.3 3.3 指令系统指令系统3.4 3.4 伪指令伪指令3.5 3.5 汇编语言程序设计汇编

67、语言程序设计2021/6/7134 51 51单片机的编程语言可以是汇编语言也可以是高单片机的编程语言可以是汇编语言也可以是高级语言(如级语言(如 C C 语言)。语言)。 高级语言高级语言编程效率高,但程序长,占用存储空间编程效率高,但程序长,占用存储空间大,执行慢;大,执行慢; 汇编语言汇编语言程序产生的程序产生的目标程序短目标程序短,占用存储空间,占用存储空间小,小,执行快执行快,能充分发挥计算机的硬件功能。,能充分发挥计算机的硬件功能。 无论是高级语言还是汇编语言,源程序都要转换无论是高级语言还是汇编语言,源程序都要转换成机器语言目标程序才能执行。成机器语言目标程序才能执行。3.5 3

68、.5 汇编语言程序设计汇编语言程序设计2021/6/71351. 1. 源程序的编辑源程序的编辑 汇编语言源程序是汇编语言源程序是文本程序文本程序,可使用各种字处理,可使用各种字处理软件进行编辑,编好的源程序应以软件进行编辑,编好的源程序应以“ “ . ASM”. ASM”扩展名扩展名存盘。存盘。 3.5.1 3.5.1 源程序的源程序的编辑与与汇编2021/6/71362. 2. 源程序的汇编源程序的汇编 把汇编语言源程序把汇编语言源程序翻译翻译为单片机能执行的机为单片机能执行的机器语言目标程序的过程叫汇编。器语言目标程序的过程叫汇编。手工汇编手工汇编机器汇编机器汇编2021/6/71373

69、. 3. 汇编语言程序的基本格式汇编语言程序的基本格式 ; ; 求片内求片内RAMRAM连续三个单元存放的无符号数中的最大值连续三个单元存放的无符号数中的最大值ADR1 DATA 50H ADR1 DATA 50H ; ;存放第一个数地址存放第一个数地址ADR2 DATA 51H ADR2 DATA 51H ; ;存放第二个数地址存放第二个数地址ADR3 DATA 52H ADR3 DATA 52H ; ;存放第三个数地址存放第三个数地址 X EQU 20H X EQU 20H ; ;第一个数的值第一个数的值 Y EQU 30H Y EQU 30H ; ;第二个数的值第二个数的值 Z EQU

70、0FFH Z EQU 0FFH ; ; 第三个数的值第三个数的值 ORG 0000H ; ORG 0000H ; 规定程序起始地址规定程序起始地址MAIN:MAIN: MOV ADR1 , #X ; MOV ADR1 , #X ; 第一个数据送入第一个数据送入ADR1ADR1单元单元 MOV ADR2 , #Y ; MOV ADR2 , #Y ; 第二个数据送入第二个数据送入ADR2ADR2单元单元 MOV ADR3 , #Z ; MOV ADR3 , #Z ; 第三个数据送入第三个数据送入ADR3ADR3单元单元 MOV R0 , #ADR1 ; MOV R0 , #ADR1 ; 将首地址送

71、入将首地址送入R0R0 ACALL MAX ; ACALL MAX ; 调用求最大值子程序调用求最大值子程序 SJMP $ ; SJMP $ ; 等待查看结果等待查看结果; ; 子程序见下一页子程序见下一页2021/6/7138; ; 入口参数:连续三个单元的最低字节地址放在入口参数:连续三个单元的最低字节地址放在R0R0; ; 出口参数:最大值送入出口参数:最大值送入A A寄存器寄存器MAX: MOV A , R0 MAX: MOV A , R0 ; (R0)A; (R0)A MOV B , A MOV B , A ; B; B暂存第暂存第1 1个数个数 CLR C CLR C ; ; 清进

72、位标志清进位标志 INC R0 INC R0 ; ; 地址加地址加1 1 SUBB A , R0 SUBB A , R0 ; ; 第第1 1个数和第个数和第2 2个数相比个数相比 JNC MAX1 JNC MAX1 ; ; 没有进位表示第没有进位表示第1 1个数大于第个数大于第2 2个数个数 MOV A , R0 MOV A , R0 ; ; 将两个数中最大值送将两个数中最大值送A A JMP MAX2 JMP MAX2MAX1: MOV A , BMAX1: MOV A , BMAX2: MOV B , A MAX2: MOV B , A ; B; B暂存两个数中较大暂存两个数中较大的的数数

73、 INC R0 INC R0 SUBB A , R0 SUBB A , R0 ; ; 与第与第3 3个数进行比较个数进行比较 JNC MAX3JNC MAX3 MOV A , R0 MOV A , R0 ; ; 最大值送入最大值送入A A RET RETMAX3: MOV A , BMAX3: MOV A , B RET RET END END2021/6/71393.5.2 3.5.2 基本程序基本程序结构构 任何大型的、复杂的程序都是由基本程序任何大型的、复杂的程序都是由基本程序结构组成的,常用的程序结构包括:结构组成的,常用的程序结构包括:顺序结构顺序结构分支结构分支结构循环结构循环结构

74、子程序子程序2021/6/7140 顺序程序是指无分支、无循环结构的程序。其执顺序程序是指无分支、无循环结构的程序。其执行流程是依指令在存储器中的存放顺序进行的。行流程是依指令在存储器中的存放顺序进行的。1. 1. 顺序程序序程序2021/6/7141例例 有有一一变变量量存存放放在在片片内内RAMRAM的的20H20H单单元元,其其取取值值范范围围为为:00H00H05H05H。要要求求编编写写查查表表程程序序,根根据据变变量量值值求平方值,并存入片内求平方值,并存入片内RAMRAM的的21H21H单元。单元。(1) (1) 建立平方表建立平方表: : ORG 2000H ORG 2000H

75、 TABLE: DB 00 TABLE: DB 00,0101,0404,0909,1616,2525(2) (2) 查表指令查表指令 MOVC A MOVC A,A+DPTRA+DPTR DPTR: DPTR: 平方表的起始存储地址平方表的起始存储地址2000H;2000H; A: A: 指令执行前,查表的输入值指令执行前,查表的输入值 指令执行后,查表输出结果指令执行后,查表输出结果2021/6/7142 查查表表数数值值存存放放在在片片内内RAMRAM的的20H20H单单元元,范范围围为为:00H00H05H.05H.查表结果查表结果存入片内存入片内RAMRAM的的21H21H单元单元。

76、程序如下:。程序如下: ORG 1000HORG 1000H MOV DPTR MOV DPTR,#2000H#2000H MOV A MOV A,20H20H MOVC AMOVC A,A+DPTRA+DPTR MOV 21H MOV 21H,A A SJMP $ SJMP $ ORG 2000H ORG 2000HTABLE: DB 00TABLE: DB 00,0101,0404,0909,1616,2525 END END2021/6/71432021/6/7144 2. 2. 分支程序分支程序 分支结构可以分成单分支、双分支和多分支几种分支结构可以分成单分支、双分支和多分支几种情况情

77、况 :2021/6/7145 已已知知VAR单元元内内有有一一自自变量量X, 请按按右右图所所示示条条件件编程程求求函函数数Y, 并并将将Y存入存入FUNC单元。元。VAR DATA30HFUNC DATA31H ORG0100H MOVA, VAR JZ DONE JNBACC.7, POSI MOVA,#0FFH SJMPDONEPOSI: MOVA, #01HDONE: MOVFUNC, A SJMP$ END2021/6/7146按某种控制规律重复执行的程序称为循环程序。按某种控制规律重复执行的程序称为循环程序。循环程序有循环程序有先执行后判断先执行后判断和和先判断后执行先判断后执行两

78、种基两种基本结构本结构 。3. 3. 循循环程序程序2021/6/71472021/6/7148 在实际编程过程中,经常会遇到一些带有在实际编程过程中,经常会遇到一些带有通用通用性的程序段性的程序段,在一个程序中可能要使用多次。这样,在一个程序中可能要使用多次。这样的程序段可以的程序段可以设计成子程序,供多次调用。设计成子程序,供多次调用。 子程序的特点子程序的特点是:子程序需要由其它程序调用,是:子程序需要由其它程序调用,执行完后又需要把执行流程返回到调用该子程序的执行完后又需要把执行流程返回到调用该子程序的主程序。主程序。4. 4. 子程序子程序2021/6/7149子程序调用时要注意两点

79、:子程序调用时要注意两点: 1) 1) 现场的保护和恢复;现场的保护和恢复; 2) 2) 主程序与子程序的参数传递。主程序与子程序的参数传递。2021/6/7150 子程序执行过程中常常要用到单片机的一些通子程序执行过程中常常要用到单片机的一些通用资源,如工作寄存器用资源,如工作寄存器R0-R7R0-R7、累加器、累加器A A、数据指针、数据指针DPTRDPTR,以及有关标志和状态等。这些单元中的内容,以及有关标志和状态等。这些单元中的内容在调用结束返回主程序后仍有用,所以需要进行保在调用结束返回主程序后仍有用,所以需要进行保护,称为护,称为现场保护现场保护。 在执行完子程序,返回继续执行主程

80、序前恢复在执行完子程序,返回继续执行主程序前恢复其原内容,称为其原内容,称为现场恢复现场恢复。2021/6/7151 现场的保护和恢复例:现场的保护和恢复例:SUB1SUB1:PUSH PSW ;PUSH PSW ;保护现场保护现场 PUSH ACC ;PUSH ACC ; PUSH B ; PUSH B ; MOV PSW MOV PSW,#10H ;#10H ;换当前工作寄存器组换当前工作寄存器组ADDADDA A,B B POP B ; POP B ;恢复现场恢复现场 POP ACC ;POP ACC ; POP PSW ; POP PSW ; RET RET2021/6/7152 例例

81、. . 编程实现编程实现 c = ac = a2 2 + b+ b2 2. . 设设a a,b b,c c分别存于内部分别存于内部RAM RAM 的的30H30H、31H31H、32H32H三个单元中。三个单元中。ORGORG0000H0000HSTART:START: MOV MOV A, 30H A, 30H ; ;取取a a ACALL ACALL SQR SQR ; ;调用查平方表子程序调用查平方表子程序 MOV MOV R1, A R1, A ;a;a2 2 暂存于暂存于R1R1中中 MOV MOV A, 31H A, 31H ; ;取取b b ACALL ACALL SQR SQR

82、 ; ;调用查平方表子程序调用查平方表子程序 ADD ADD A, R1 A, R1 ;a;a2 2+b+b2 2 存于存于A A中中 MOV MOV 32H, A 32H, A ; ;存结果存结果 SJMP SJMP $ $SQR: SQR: MOV MOV DPTR, #TAB DPTR, #TAB ; ;子程序子程序 MOVC MOVC A, A+DPTRA, A+DPTR RET RET ORGORG0100H0100HTAB: TAB: DB DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 810, 1, 4, 9, 16, 25, 36, 49, 64, 81

83、2021/6/7153ORGORG0000H0000HSTART:START: MOV MOV A, 30H A, 30H ; ;取取a a ACALL ACALL SQR SQR ; ;调用查平方表调用查平方表 MOV MOV R1, A R1, A ;a;a2 2 暂存于暂存于R1R1中中 MOV MOV A, 31H A, 31H ; ;取取b b ACALL ACALL SQR SQR ; ;调用查平方表调用查平方表 ADD ADD A, R1 A, R1 ;a;a2 2+b+b2 2 存于存于A A中中 MOV MOV 32H, A 32H, A ; ;存结果存结果 SJMP SJM

84、P $ $SQR: SQR: PUSHPUSHDPHDPH; ;保护现场保护现场PUSHPUSHDPLDPLMOV MOV DPTR, #TAB DPTR, #TAB ; ;子程序子程序 MOVC MOVC A, A+DPTRA, A+DPTRPOPPOPDPLDPL; ;恢复现场恢复现场POPPOPDPHDPH RET RET ORGORG0100H0100HTAB: TAB: DB DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 810, 1, 4, 9, 16, 25, 36, 49, 64, 812021/6/7154END2021/6/7155部分资料从网络收集整理而来,供大家参考,感谢您的关注!

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

最新文档


当前位置:首页 > 办公文档 > 工作计划

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