单片微型机第五版原理应用试验张友德课件.ppt

上传人:大张伟 文档编号:6228540 上传时间:2020-10-05 格式:PPT 页数:112 大小:2.81MB
返回 下载 相关 举报
单片微型机第五版原理应用试验张友德课件.ppt_第1页
第1页 / 共112页
单片微型机第五版原理应用试验张友德课件.ppt_第2页
第2页 / 共112页
单片微型机第五版原理应用试验张友德课件.ppt_第3页
第3页 / 共112页
单片微型机第五版原理应用试验张友德课件.ppt_第4页
第4页 / 共112页
单片微型机第五版原理应用试验张友德课件.ppt_第5页
第5页 / 共112页
点击查看更多>>
资源描述

《单片微型机第五版原理应用试验张友德课件.ppt》由会员分享,可在线阅读,更多相关《单片微型机第五版原理应用试验张友德课件.ppt(112页珍藏版)》请在三一文库上搜索。

1、1,第三章 51系列指令系统和程序设计方法,本章要求: 1了解指令格式 2掌握寻址方式 3熟悉各种操作指令及使用方法 4掌握51汇编语言程序设计方法。,2,3-1 指令系统概述,一 汇编指令格式 标号:操作码 (目的操作数),(源操作数);注释,3,双字节指令,用一个字节表示操作码,另一个字节表示操作数或操作数所在的地址。 格式为:,操作码,立即数或地址,4,三字节指令,一个字节操作码,两个字节操作数。 格式为:,操作码,立即数或地址,立即数或地址,5,二 伪指令 1 定位伪指令 ORG m m指出在该伪指令后的指令的汇编地址 2 汇编结束伪指令 END 3 赋值伪指令 符号名 EQU 表达式

2、(或寄存器名) 4 位地址赋值伪指令 符号名 BIT 位地址,6,5 定义字节伪指令 DB x1,x2,xn或字符串 Xi为单字节数据,它为十进制数或十六进制数,也可为一个表达式。 6定义字伪指令 DW Y1,Y2,Yn Yi为双字节数据,它为十进制数或十六进制数,也可为一个表达式,7,三 常用缩写符号 (1) Ri和Rn:表示当前工作寄存器区中的工作寄存器,i取0或1,表示R0或R1。n取07,表示R0R7。 #data:表示包含在指令中的8位立即数。 #data16:表示包含在指令中的16位立即数。 rel:以补码形式表示的8位相对偏移量,范围为 -128127,主要用在相对寻址的指令中。

3、,8,(5)addr16和addr11:分别表示16位直接地址和11位直接地址。 (6) direct:表示直接寻址的地址。 (7) bit:表示可位寻址的直接位地址。 (8) (X):表示X寄存器中的内容。X为寄存器名。 (9) (X):表示以X寄存器的内容为地址的存储器单元内容,即(X)作地址,该地址单元的内容用(X)表示。,9,3-2 寻址方式,一 寄存器寻址 寄存器寻址是对由指令选定的工作寄存器(R0R7)、ACC、B、DPTR、CY中的数进行读/写,其中R0R7由操作码低3位表示,ACC、B、DPTR、CY则隐含在操作码中。 例:MOV A,R1,10,二 直接寻址 直接寻址是指令直

4、接给出操作数地址,该地址指出了参与运算或传送的数据所在的字节单元或位的地址。 例:MOV A, 65H 可访问SFR、内部数据存储器的低128字节,位地址空间。 注意:若直接寻址的地址是SFR中的某一个时,可用名称符号 MOV A,TH0 MOV A,8CH,11,三 寄存器间接寻址 寄存器间接寻址(用符号表示)是将指定的寄存器内容为地址,由该地址所指定的单元内容作为操作数。 例:MOV A, R0 用R0、R1来寻址内部RAM(000FFH),用R0、R1、DPTR来访问外部RAM。 强调:寄存器中的内容不是操作数本身,而是操作数的地址,到该地址单元中才能得到操作数。寄存器起地址指针的作用。

5、,12,若R1中的内容为80H,片内RAM地址为80H的单元中的内容为2FH,则执行该指令后,片内RAM 80H单元的内容2FH被送到A中。,例:MOV A,R1,13,四 立即数寻址 立即寻址是由指令直接给出操作数来寻址。即操作数包含在指令字节中。 例: MOV A,#62H (注:“#”为立即数指示符号) 该寻址方式多为双字节指令。但有一条为3字节 MOV DPTR ,#3F6AH,14,五 变址间接寻址 以PC或DPTR作为基址寄存器,以累加器A作为变址寄存器,这二者内容之和为程序存储器地址。多用于查表指令。 仅有3条:MOVC A, A+DPTR (单字节) MOVC A, A+PC

6、JMP A+DPTR 只能对ROM进行寻址。,15,16,六 相对寻址 以PC的当前值为基准(实际为本指令之后的字节地址),加上指令中给出的相对偏移量形成有效地址。用于访问ROM 例: JC 80H 注意:偏移量是有符号数,在-128+127之间。,17,七 位寻址 对片内RAM的位寻址区和某些可进行位寻址的SFR中的任一二进制位进行位操作时的寻址方式。 例:SETB 3DH,18,位地址和字节地址的区分通过指令区分: MOV A,20H MOV C,20H 可供位寻址的区域 片内RAM的20H2FH为位寻址空间(007FH) 某些SFR:凡是地址能被8整除的SFR 位地址的表示方法 MOV

7、C,ACC.7 MOV 20H,C MOV 24H.0,C SETB TR0,19,总结: 1 立即寻址 : ROM 2 直接寻址 : 片内RAM低128B和SFR、位地址空间 3 寄存器寻址 :工作寄存器R0R7, A, B,C,DPTR 4 寄存器间接寻址:片内RAM低128B和片外RAM,20,5 变址间接寻址:ROM 6 相对寻址: ROM 256B 范围 7 位寻址: 片内RAM的20H2FHB地址和 部分SFR,21,3-3 指令类型,51系列汇编语言是用42种操作码助记符描述33种操作功能,一种功能可能有几种助记符,与寻址方式结合共产生111条指令。 数据传送类:29条 算术运算

8、类:24条 逻辑运算类:24条 控制转移类:17条 位操作类: 17条,22,3-4 数据传送指令,23,24,3-4-1 内部数据一般传送指令 该类指令的功能是实现数在片内RAM单元之间、寄存器之间、寄存器与RAM单元之间的传送。所有指令具有统一的格式: MOV ,; 操作码助记符都是MOV,目的操作数和源操作数不同寻址方式的组合就派生出该类的全部指令。记忆这类指令的关键在于掌握两个操作数的各种寻址方式的组合关系。,25,访问片内RAM的一般传送指令操作关系图,访问片内RAM的一般传送指令操作关系图,26,一 累加器为目的操作数的指令 MOV A,Rn MOV A,direct MOV A,

9、Ri MOV A,#data,27,二 寄存器为目的操作数的指令 MOV Rn, A MOV Rn, direct MOV Rn, #data,28,三 直接地址为目的操作数的指令 MOV direct, A 例: MOV 20H, A MOV direct, Rn MOV 20H, R1 MOV direct1,direct2 MOV 20H, 30H MOV direct, Ri MOV 20H, R1 MOV direct, #data MOV 20H, #34H,29,四 间接地址为目的操作数的指令 MOV Ri, A 例:MOV R0,A MOV Ri, direct MOV R1,

10、20H MOV Ri, #data MOV R0,#34H 五 16位数据传送指令 MOV DPTR,#data16,30,例1 设内部RAM(30H)=40H,(40H)=10H,(10H)=00H (P1)=CAH,分析以下程序执行后各单元及寄存器、P2口的内容。 MOV R0,#30H;(R0)30H MOV A,R0;(A)(R0) MOV R1,A;(R1)(A) MOV B,R1;(B)(R1) MOV R1,P1;(R1)(P1) MOV P2,P1;(P2)(P1) MOV 10H,#20H;(10H)20H 执行上述指令后的结果为:(R0)=30H,(R1)=(A)=40H,

11、(B)=10H,(40H)=(P1)=(P2)=CAH,(10H)=20H。,31,3-4-2片内特殊传送指令 1堆栈操作指令 堆栈操作有进栈和出栈,即压入和弹出数据,常用于保存或恢复现场。进栈/出栈指令用于保存/恢复片内RAM单元(低128字节)或特殊功能寄存器SFR的内容。,32,PUSH direct ;sp+1 sp,(direct) (sp) POP direct ; (sp) (direct), sp-1 sp 注意:1 留出足够的存储单元作栈区,避免数据重叠。 2 使用堆栈时,一般要重设SP的初始值。由于压入堆栈的第一个数必须存放在SP+1存储单元,故实际栈顶是在SP+1所指出的

12、单元。,33,例:已知片内RAM50H单元中存放数值AAH,设堆栈指针为30H,把此数值压入堆栈,然后再弹出到40H单元中。 MOV SP,#30H;30H SP PUSH 50H; SP+1 SP, (50H) (31H) POP 40H ; (31H) (40H), SP-1 SP 40单元内装入数值AAH,SP终值为30H,34,2数据交换指令 数据传送指令一般都是将操作数自源地址单元传送到目的地址单元,指令 执行后,源地址单元的操作数不变,目的地址单元的操作数则修改为源地址单元的操作数。交换指令数据作双向传送,涉及传送的双方互为源地址、目的地址,指令执行后每方的操作数都修改为另一方的操

13、作数。因此,两操作数均未冲掉、丢失。数据交换指令共有如下5条指令:,35,36,例3 设(R0) = 30H,30H = 4AH,(A) = 28H,则执行 XCH A, R0后,结果为(A) = 4AH,(30H) = 28H。 XCHD A,R0后,结果为(A) = 2AH,(30H) = 48H。 SWAP A后,结果为(A) = 82H。,37,3-4-3片外数据存储器数据传送指令,CPU对外RAM的访问只能用寄存器间接寻址的方式,通过累加器A来完成,且仅有4条指令。 由于51系统中没有专门对外设的I/O指令,而片外扩展的I/O口与片外RAM是统一编址,所以该指令可作为输入/输出指令,

14、用于和外部设备间传送。,38,MOVX A, DPTR MOVX A, Ri MOVX DPTR, A MOVX Ri, A (i=0,1),39,例1 把片内6AH单元中数取出,传送到外部RAM单元3000H单元中。 MOV DPTR, #3000H MOV A, 6AH MOVX DPTR, A,40,例2 现有一输入设备口地址E000H,在这个口中已有数字量89H,欲将此值读入ACC。 MOV DPTR, #0E000H MOVX A, DPTR,41,3-4-4访问程序存储 器的数据传送指令,又称作查表指令,采用基址寄存器加变址寄存器间接寻址方式,把程序存储器中存放的表格数据读出,传送

15、到累加器A,两条指令均为单字节指令。,42,一 MOVC A,A+PC 功能:将新的PC内容与累加器A内8位无符号数相加形成地址,取出该地址单元中的内容送累加器A。 注意:查表范围只能在256个字节范围内 二 MOVC A, A+DPTR 功能:以DPTR为基址寄存器进行查表。允许数表存放在程序存储器的任意单元。,43,例 ORG 8000H MOV A, #30H MOVC A, A+PC ORG 8030H DB ABCDEFGHI 执行结果 (A)= ?,44,例 ORG 1004H MOV A, #10H MOV DPTR, #7000H MOVC A, A+DPTR ORG 7010

16、H DB 02,04,06,08 执行结果:(A)=?, PC=?,45,3-5 算术运算指令,加减法指令形式结构图 (a) 加减法指令关系图;(b) 加1、减1指令关系图,46,47,注意: 对INC direct 和DEC direct两条指令,若直接地址是P0P3端口,则进行“读改写”操作。其功能是修改输出口的内容。即先读入端口的内容,然后在CPU中加(减)1,再输出到端口。读入内容来自端口锁存器而不是引脚。,48,例:设(A)=53H,(R0)=0FCH,执行指令: ADD A, R0 0 1 0 1 0 0 1 1 +)1 1 1 1 1 1 0 0 (1)0 1 0 0 1 1 1

17、 1 结果(A)=4FH,CY=1,AC=0,OV=0,P=1 注意:对标志AC、CY、OV、P位的影响,49,例:编写1234H+0FE7H的程序,和的高8位存入41H单元,低8位存入40H单元。 MOV A, #34H ADD A, #0E7H MOV 40H, A MOV A, #12H ADDC A, #0FH MOV 41H, A,50,1 该指令功能是对BCD码的加法结果进行调整的。它是一条单字节指令。 2 两个压缩BCD码按二进制相加,必须在加法指令ADD、ADDC后,经过本指令调整后才能得到正确的压缩BCD码和数,实现十进制的加法运算。,DA A,十进制调整指令,51,52,十

18、进制调整的修正方法: 1 当A低4位大于9或半进位标志AC=1时,则进行低4位加6修正; 2 当A高4位大于9或进位标志CY=1时,则进行高4位加6修正。,53,例 对BCD码加法65 + 58BDH,进行十进制调整。 参考程序如下: MOV A,#65H ;(A)65 ADD A,#58H ;(A)(A)+58 DA A ;十进制调整,54,55,乘法指令,MUL AB,功能是把累加器A和寄存器B中的两个8位无符号数相乘,将乘积16位数中的低8位存放在A中,高8位存放在B中。若乘积大于FFH(255),则溢出标志OV置1,否则OV清零。乘法指令执行后进位标志CY总是零,即CY=0。,56,D

19、IV AB,功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数,所得商存于累加器A中,余数存于寄存器B中,进位标志位CY和溢出标志位OV均被清零。若B中的内容为0时,溢出标志OV被置1,即OV=1,而CY仍为0。,除法指令,57,3-6 逻辑运算及移位指令,逻辑指令形式结构图,58,逻辑操作指令表,59,60,例 (P1)=C5H=11000101B,屏蔽P1口高4位而保留低4位。 执行指令:ANL P1,#0FH 结果为:(P1)=05H=00000101B。 逻辑“与”指令常用来屏蔽(置0)字节中某些位。若清除某位,则用“0”和该位相与;若保留某位,则用“1”和该位相与。,6

20、1,例 若(A)=C0H,(R0)=3FH,(3FH)=0FH, 执行指令:ORL A,R0 结果为:(A)=CFH=11001111B。 逻辑“或”指令常用来使字节中某些位置“1”,其它位保持不变。则欲置位的位用“1”与该位相或,保留不变的位用“0” 与该位相或。,62,逻辑“异或”指令常用来使字节中某些位进行取反操作,其它位保持不变。欲某位取反该位与“1”相异或;欲某位保留则该位与“0” 相异或。,63,例:把累加器A中数据的低4位送入外部数据存储器的3000H单元中。 MOV DPTR, #3000H ANL A, #0FH MOVX DPTR,A 结论:某位与“0”相与,则该位被屏蔽为

21、“0”。,64,例:将累加器A中低4位的状态通过P1口的高4位输出。 ANL A,#0FH;屏蔽高4位 SWAP A ;高、低半字节交换 ANL P1,#0FH;清P1口高4位 ORL P1,A,65,3-7 位操作指令,位操作也称布尔变量操作,它是以位(bit)作为单位来进行运算和操作的。51单片机内部有一个功能相对独立的布尔处理机,它有借用进位标志CY作为位累加器,有位存储器(即位寻址区中的各位),指令系统中有17条专门进行位处理的指令集。位处理指令可以完成以位为对象的数据转送、运算、控制转移等操作。,66,3-7 位操作指令,位地址的表达方式: 1 直接地址方式:如 D4H 2 字节寄存

22、器名加位数方式:如 PSW.4 ,(D0).4 3 位名称方式:如 RS1,67,68,一 位变量传送指令 MOV C, bit 或 MOV bit, C 注:两个操作数中必须有一个为位累加器C 二 位变量修改指令 1 CLR C 或 CLR bit 2 CPL C 或 CPL bit 3 SETB C 或 SETB bit,69,三 位变量逻辑操作指令 1 ANL C, bit 2 ANL C,/bit 3 ORL C, bit 4 ORL C, /bit,70,例:设P1口为输入口,P3.0为输出口,执行下列命令: MOV C, P1.0 ANL C, P1.1 ANL C, /P1.2

23、MOV P3.0, C 结果:P3.0=(P1.0) (P1.1) (P1.2),71,3-8 控制转移指令,4-8-1 无条件转移指令 一 AJMP addrll (2字节指令) AJMP的机器码是由11位直接地址addr11和指令操作码00001,按下列分布组成的:,72,该指令执行后,程序转移的目的地址是由AJMP指令所在位置的地址PC值加上该指令字节数2,构成当前PC值。取当前PC值的高5位与指令中提供的11位直接地址形成转移的目的地址,即,PC15 PC14 PC13 PC12 PC11a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0,转移目的 地址(PC),73,

24、例:若AJMP指令地址(PC)=2300H。执行指令 AJMP 0FFH后,结果:转移目的地址(PC)=20FFH,程序向前转到20FFH单元开始执行。 又如:若AJMP指令地址(PC)=2FFFH。执行指令AJMP 0FFH后,结果为:转移目的地址(PC)=30FFH,程序向后转到30FFH单元开始执行。,74,二 SJMP rel (2字节指令) rel为8位带符号数 例:2100 SJMP 7FH 程序转到PC=2102+7F=2181H 若 rel=F0H,则转移的PC=20F2H。(用符号位扩展的方法计算),75,三 LJMP addr 16 (3字节指令) 该指令执行后,程序无条件

25、地转向16位目标地址(addr16)处执行,不影响标志位。这条指令可以使程序从当前地址转移到64 KB程序存储器地址空间的任意地址,故得名为长转移。该指令的缺点是执行时间长,字节多。,76,四 JMP A+DPTR(散转指令) 累加器中8位无符号数与数据指针DPTR中的16位数相加,作为下条指令地址送入PC。该指令的特点是转移地址可以在程序运行中加以改变。,77,例:累加器A中存放待处理命令编号(0-7),ROM中存放着标号为PMTB的转移表,根据A内命令编号转向相应的命令处理程序。 MOV R1, A RL A ADD A, R1 MOV DPTR, #PMTB JMP A+DPTR PMT

26、B: LJMP PM0;转向命令0处理入口 LJMP PM1;转向命令1处理入口 ,78,3-8-2 条件转移指令,该 类指令是当某种条件满足时,程序转移执行;条件不满足时,程序仍按原来顺序执行。由于该类指令采用相对寻址,因此程序可在以当前PC值为中心的-128+127范围内转移。 一 测试条件符合转移指令 1 JZ rel ;若(A)=0,则转移 2 JNZ rel ;若(A)不为0,则转移 3 JC rel ;若(C)=1,则转移 4 JNC rel ;若(C)=0,则转移,79,5 JB bit, rel ;若(bit)=1,则转移 6 JNB bit, rel ;若(bit)=0,则转

27、移 7 JBC bit, rel ;若(bit)=1,则转移 且清“0”直接寻址的位。,80,二 比较不相等转移指令 CJNE A, direct, rel CJNE A, #data, rel CJNE Rn, #data, rel CJNE Ri, #data, rel 先对两个规定的操作数进行比较,根据比较的结果来决定是否转移。若两个操作数相等,则不转移,程序顺序执行;若两个操作数不等,则转移。如果第一操作数小于第二操作数,则置位进位标志CY,否则清0CY。,81,例:温度控制系统,A中存采样温度值Ta,(20)=温度下限值T20,(30)=温度上限值T30, 若TaT30程序转降温JW

28、,若T30TaT20程序转至FH,82,CJNE A, 30H, LOOP AJMP FH LOOP: JNC JW CJNE A, 20H, LOOP1 AJMP FH LOOP1: JC SW FH:. JW: SW:,83,三 减一不为0转移指令,DJNZ Rn, rel DJNZ direct, rel 每执行一次指令,就把第一操作数减1,并把结果仍保存在第一操作数中,然后判断是否为零。若不为零,则转移到指定的地址单元,否则顺序执行.,84,例:延时程序 START: SETB P1.1 DL: MOV 30H, #03H DL0: MOV 31H, #0F0H DL1: DJNZ 3

29、1H, DL1 DJNZ 30H, DL0 CPL P1.1 AJMP DL,85,3-8-3 调用和返回指令,子程序调用指令有长调用和绝对调用两条,它们都是双周期指令。,86,一 短调用指令 ACALL addr11,87,ACALL与AJMP一样提供11位地址,只能调用与PC在同一2 KB范围内的子程序。由于该指令为2字节指令,所以执行该指令时应执行(PC)(PC)+2以获得下一条指令地址,并把该地址压入堆栈作为返回地址。,88,二长调用指令 LCALL addrl6,89,LCALL与LJMP一样提供16位地址,可调用64 KB范围内的子程序。由于该指令为3字节,所以执行该指令时首先应执

30、行(PC)(PC)+3,以获得下一条指令地址,并把此时的PC内容压入堆栈(先压入低字节,后压入高字节)作为返回地址,堆栈指针SP加2指向栈顶,然后把目的地址addr16送入PC。,90,例:如图所示,在P1.0P1.3分别装有两个红灯和两个绿灯,写出对应的红绿灯定时切换程序。,91,MAIN: MOV A, #03H ML: MOV P1, A ACALL DL MXCH: CPL A AJMP ML DL: MOV R7, #0A3H DL1: MOV R6, #0FFH DL6: DJNZ R6, DL6 DJNZ R7, DL1 RET,92,返回指令 返回指令共两条:一条是子程序返回指

31、令RET,另一条是从中断服务程序返回指令RETI。,93,从上述两条指令的功能操作看,都是从堆栈中弹出返回地址送PC,堆栈指针减2,但它们下面两点不同: (1) 从使用上,RET指令必须作子程序的最后一条指令;RETI必须作中断服务程序的最后一条指令。 (2) RETI指令除恢复断点地址外,还恢复CPU响应中断时硬件自动保护的现场信息。执行RETI指令后,将清除中断响应时所置位的优先级状态触发器,使得已申请的同级或低级中断申请可以响应;而RET指令只能恢复返回地址。,94,空操作指令 NOP ;(PC)(PC)+1 该指令是一条单字节单周期指令。它控制 CPU不做任何操作,仅仅是消耗这条指令执

32、行所需要的一个机器周期的时间,不影响任何标志位,故称为空操作指令。NOP指令在设计延时程序、拼凑精确延时时间及在程序等待或修改程序等场合是很有用的。,95,3-9 程序设计方法,3-9-1 程序设计的步骤 分析问题 确定算法 设计程序框图 确定数据格式、分配工作单元,细化程序框图 编写汇编语言程序 程序测试 程序优化,96,3-9-2 程序框图和程序结构,程序框图 执行框:以矩形框表示,框内写上某些操作。 判断框:以 或 表示,框内写上判断的条件,根据条件是否满足控制执行不同的操作。 开始框:以 表示,表示程序的开始。 结束框:以 表示,表示程序的结束。,97,3-9-3 循环程序设计,1 循

33、环初态 即设置循环过程中工作单元的初始值。例如:设置循环次数计数器、地址指针初值等。 2 循环体 即重复执行的程序段部分。完成主要的计算或操作任务,也包括对地址指针的修改。 3 循环终止控制 当循环次数已知时,循环终止控制一般采用计数方法,即用一个寄存器(R0R7或内部RAM单元)作为循环次数计数器。用DJNZ指令实现计数方法的循环终止控制。,98,例:如果Xi为单字节数,并按i顺序存放在内部RAM从50H开始的单元中,n放在R2中,现在要求它们的和(双字节),放在R3R4中,编制相应的程序。,NSUN:MOV R3,#0 MOV R4,#0 MOV R0,#50H LOOP :MOV A,

34、R4 ADD A, R0 MOV R4, A CLR A,ADDC A, R3 MOV R3, A INC R0 DJNZ R2, LOOP RET,99,当循环次数未知时,需要根据某种条件来判断是否应该终止循环。常用条件转移指令来控制循环的结束。,100,例:设在外部RAM中有一个ASCII字符串,它的首地址在DPTR中,字符串以0结尾。现在要求用串行口把它发送出去。在串行口已经初始化(TI置1)的条件下,写出程序。,SOUT:MOVX A,DPTR JNZ SOT1 RET SOT1: JNB TI,SOT1 CLR TI MOV SBUF,A INC DPTR SJMP SOUT,101

35、,多重循环 例:编写50ms的延时子程序,DEL: MOV R7,#200 DEL1:MOV R6,#125 DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 RET,精确延时 DEL: MOV R7,#200 DEL1:MOV R6,#123 NOP DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 RET,102,注意:,循环程序的执行是有条件的,要避免从循环体外直接转到循环体内部。 在多重循环嵌套程序中,不要在外层循环中用转移指令直接转到内层循环体中。 循环体内可以直接转到循环体外或外层循环中,可实现一个循环由多个条件控制结束的结构。,103,循环程序的优化,一般

36、从改进算法、选用合适的指令和工作单元等考虑,以达到缩短执行时间的要求。,104,3-9-4 子程序设计和参数传递方法,编写子程序时注意以下几点: 给每个子程序赋一个名字(即入口地址代号) 正确传递参数要有入口条件、出口条件 保护现场和恢复现场,105,参数传递常用方法,一用工作寄存器或累加器来传递 将入口参数或出口参数放在工作寄存器或累加器中。 程序最简单、运算速度最高 传递数据有限,主程序必须先将数据送到工作寄存器,参数个数固定。,106,二用指针寄存器传递,参数在内部RAM中,可R0或R1做指针;参数在外部RAM或ROM,可用DPTR做指针。 用指针指示数据的位置,节省传递数据的工作量,实

37、现可变长度运算。,107,三用堆栈传递参数,调用时,主程序用PUSH指令把参数压入堆栈。子程序按栈指针间接访问堆栈中参数。 返回主程序后,用POP指令得到结果。 该方法简单,能传递大量参数,不需为特定的参数分配存储单元。,108,四 程序段参数传递,需要传递大量参数,且参数为常数时适用。 调用时,常数作为程序代码的一部分,紧跟在调用子程序后面。,109,课堂练习 一判断下列指令正误: 1 INC R1 2 DEC DPTR 3 MOV 40H, R1 4 MOV P1.0, 0 5 MOV 20H, 21H 6 ANL 20H, #0F0H,110,二 设(R1)=20H,(20H)=AAH,

38、则下面程序执行完后A的内容是多少。 MOV A, #55H ANL A, #0FFH ORL 20H, A XRL A, R1 CPL A,111,三 写出程序功能 ORG 0000H MAIN: MOV DPTR, #TAB MOV R1, #06H LP: MOVX A, DPTR MOV P1, A LCALL DELAY 0.5S INC DPTR DJNZ R1, LP,112,AJMP MAIN TAB: DB 01H, 03H, 02H, 06H, 04H, 05H DELAY 0.5S:. RET END 四 编写一个程序段,将内部30H3FH内容,传送到外部RAM的8000H800FH之中。,

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

当前位置:首页 > 科普知识


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