汇编程序设计最新.ppt

上传人:小飞机 文档编号:6586362 上传时间:2023-11-15 格式:PPT 页数:67 大小:413KB
返回 下载 相关 举报
汇编程序设计最新.ppt_第1页
第1页 / 共67页
汇编程序设计最新.ppt_第2页
第2页 / 共67页
汇编程序设计最新.ppt_第3页
第3页 / 共67页
汇编程序设计最新.ppt_第4页
第4页 / 共67页
汇编程序设计最新.ppt_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《汇编程序设计最新.ppt》由会员分享,可在线阅读,更多相关《汇编程序设计最新.ppt(67页珍藏版)》请在三一办公上搜索。

1、第三章 单片机汇编程序设计,3.1 MCS-51系列单片机汇编指令格式及标识,3.2 MCS-51系列单片机的寻址方式,3.3 MCS-51系列单片机指令系统,3.4 MCS-51系列单片机汇编程序常用伪指令,3.5 MCS-51系列单片机汇编程序设计,标号:操作码助记符 目的操作数,源操作数;注释,(1)操作码助记符表明指令的功能。,(2)操作数用于给指令的操作的对象。MCS-51单片机指令系统的指令按操作数的多少可分为无操作数、单操作数、双操作数和三操作数四种情况。,(3)标号是该指令的符号地址,后面须带冒号。它主要为转移指令提供转移的目的地址。,(4)注释是对该指令的解释,前面须带分号。

2、操作码与操作数之间必须用空格分隔,目的操作数与源操作数之间必须用逗号“,”分隔。,3.1 MCS-51系列单片机汇编指令格式及标识,LOOP:MOV A,30H;将30H的内容送A,注:白色的内容不是必须的,第一操作数(目的操作数),第二操作数(源操作数),注释,标号,操作码,3.2 MCS-51系列单片机的寻址方式,寻找操作数所在单元地址的方式。在MCS-51单片机中,共使用了七种寻址方式:,立即寻址直接寻址寄存器寻址寄存器间接寻址变址寻址(基址寄存器+变址寄存器间接寻址)位寻址指令寻址(绝对寻址 相对寻址),操作数在指令中直接给出。MOV A,#20H;A 立即数 20H ADD A,#0

3、5H;A(A)+立即数 05H 注意:(A)指A的内容;符号“#”表明其后跟的是立即数;立即数常数。,1.立即寻址,操作数的地址由指令直接给出。如:MOV A,20H;A(20H)MOV 30H,4AH;(30H)(4AH),2.直接寻址,注意:MOV A,#20H MOV A,20H 两者的区别。,n,n+1,20H,累加器A,MOV A,20H,XXH,MOV A,#20H,n,n+1,ROM,累加器A,20H,3.寄存器寻址,操作数在寄存器中。例:MOV A,R0;A(R0)注意:这种寻址方式中,寄存器可以是R0R7这 8个通用寄存器和部分特殊功能寄存器(如累加器A、寄存器B、数据指针D

4、PTR等。,4.寄存器间接寻址,寄存器中的内容是一个地址,该地址单元的内容是所需的操作数。操作数是通过寄存器间接得到的。如:MOV R1,#30H;R130H MOV A,R1;A(R1),注意:1)“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。2)符号“”表示“在”,其含义与读音皆同“at”。3)寄存器间接寻址中只能用R0和R1,DPTR及SP。,例:MOV R1,#80H;R180H MOV A,R1;A(R1),80H,R1,01H,累加器A,20H,也称为:基址寄存器+变址寄存器间接寻址,以16位的数据指针寄存器DPTR或 16位的

5、PC寄存器为基址寄存器,以累加器 A 为变址寄存器,两者中的“内容和”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数。,MOVC A,A+PC;A(A)+(PC)设:A中已存有#05H,DPTR中已存有#2000H,MOVC A,A+DPTR;A(A)+(DPTR)将05H+2000H=2005H单元中的数放进累加器A,5.变址寻址,05H,2000H,ALU,2005H,累加器A,DPTR,2000H+05H2005H,MOVC A,A+DPTR,指令中直接给出了位地址例:CLR P1.0;(P1.0)0 SETB(20H).3;(20H).3 1,注意:1)位地址里的

6、数据只可能是一个 0 或 1 2)片内RAM的128个位的位寻址有两种表示方法:一种是位地址,如:02H,另一种是单元地址加上位,如(20H).2等。两者指同一个位。3)SPF的位寻址除位地址(PSW寄存器的位5的位地址是0D5H),单元地址加上位(0D0H).5,还有位名称F0和寄存器号加上位PSW.5来表示。,6.位寻址,片内RAM中有128个可按位寻址的位,位地址:00H7FH,分布在:20H2FH单元;另外,在SFR中还有可按位寻址的位,00H,20H,2FH,7FH,1FH,30H,80H,FFH,SPF,普通RAM区,位寻址区,工作寄存器区,27H,22H,21H,20H,26H,

7、24H,25H,23H,28H,07 06 05 04 03 02 01 00,0F 0E 0D 0C 0B 0A 09 08,17 16 15 14 13 12 11 10,1F 1E 1D 1C 1B 1A 19 18,27 26 25 24 23 22 21 20,2F 2E 2D 2C 2B 2A 29 28,37 36 35 34 33 32 31 30,3F 3E 3D 3C 3B 3A 39 38,47 46 45 44 43 42 41 40,2FH,7F 7E 7D 7C 7B 7A 79 78,位地址,总共128个可按位寻址的位,单元地址,D7 D6 D5 D4 D3 D2

8、 D1 D0,当前PC值加上指令中规定的偏移量 rel,构成实际的操作数地址。例:SJMP rel 操作:跳转到的目的地址=当前16位PC值+rel,注意:1)“当前PC值”指程序中下一条指令所在的首地址,是一个16位数;2)符号“rel”表示“偏移量”,是一个带符号的单字 节数,补码范围是:-128+127,7.相对寻址,绝对寻址在指令中直接提供跳转的目的位置的地址或地址的一部分。,54H,2002H,ALU,2056H,累加器A,PC,2002H+54H2056H,操作码,偏移量,例如:ORG 2000H SJMP 54H;,2000H,2002H,(LOOP1),在实际编程中,“rel”

9、通常用标号代替如:SJMP loop1,表1 寻址方式及寻址空间小结,MCS-51系列单片机指令系统共有111条指令,指令的长度和执行时间因不同的指令而各不相同。MCS-51系列单片机指令系统功能强、指令短、执行快。从功能上可分成五大类:数据传送指令、算术运算指令、逻辑操作指令、控制转移指令和位操作指令。,3.3 MCS-51系列单片机指令系统,每条指令在程序存储器ROM中占据一定的空间,以字节为单位。按指令 所占字节数 分类:单字节(49条);双字节(46条);3字节(16条),每条指令在执行时要花去一定的时间,以机器周期为单位。按指令 执行时间 分类:单周期(64条);双周期(45条);4

10、周期(2条),按指令的功能分类,可分为 5 大类:数据传送类(29条);算术运算类(24条);逻辑运算及移位类(24);控制转移类(17条);位操作类(17条),内部数据存储器间传送:(MOV16条)外部数据存储器RAM与累加器间传送:(MOVX4条)程序存储器ROM向累加器传送:(MOVC2条)数据交换:(XCH,XCHD,SWAP5条)第二组堆栈操作:(PUSH,POP2条)第三组,3.3.1 数据传送指令(3组/29条),第一组普通传送指令,1)片内数据存储器传送指令MOV 指令格式:MOV 目的操作数,源操作数 其中:源操作数可以为A、Rn、Ri、direct、#data,目的操作数可

11、以为A、Rn、Ri、direct,组合起来总共16条,按目的操作数的寻址方式划分为五组:(1)以A为目的操作数(4条)MOV A,Rn;A RnMOV A,direct;A(direct)MOV A,Ri;A(Ri)MOV A,#data;A#data,1.普通传送指令,(2)以Rn为目的操作数(3条)MOV Rn,A;Rn AMOV Rn,direct;Rn(direct)MOV Rn,#data;Rn#data(3)以直接地址direct为目的操作数(5条)MOV direct,A;(direct)AMOV direct,Rn;(direct)RnMOV direct,direct;(di

12、rect)(direct)MOV direct,Ri;(direct)(Ri)MOV direct,#data;(direct)#data(4)以间接地址Ri为目的操作数(3条)MOV Ri,A;(Ri)AMOV Ri,direct;(Ri)(direct)MOV Ri,#data;(Ri)#data(5)以DPTR为目的操作数(1条)MOV DPTR,#data16;DPTR#data16,在使用传送指令时,可以根据实际情况选用恰当寻址方式。上面给出的各种类型的传送指令是Intel公司在设计MCS-51的硬件时就已经确定下来。编程人员只能像查字典一样去查找、使用。不能根据主观意愿去“创造”指

13、令。源操作数和目的操作数中的Rn和Ri不能相互配对。如,不允许有“MOV Rn,Rn”,“MOV Ri,Rn”这样的指令,在MOV指令中,不允许在一条指令中同时出现工作寄存器,无论它是寄存器寻址还是寄存器间接寻址。,2)片外数据存储器传送指令MOVX 在MCS-51系统中只能通过累加器A与片外数据存储器进行数据传送,访问时,只能通过Ri和DPTR以间接寻址方式进行。MOVX指令共有四条:MOVX A,DPTR;A(DPTR)MOVX DPTR,A;(DPTR)AMOVX A,Ri;A((Ri))MOVX Ri,A;(Ri)A 其中前两条指令通过DPTR间接寻址,可以对整个64K片外数据存储器访

14、问。后两条指令通过Ri间接寻址,只能对片外数据存储器的低端的256字节访问,访问时将低8位地址放于Ri中。,3)程序存储器传送指令MOVCMOVC A,A+DPTR;A((A+DPTR))MOVC A,A+PC;A((A+PC))这两条指令通常用于访问表格数据,因此也称为查表指令。,【例如】查表指令MOVC A,A+PC所在的地址为2000H,表格的起始单元地址为2035H,表格的第4个元素(位移量为03H)的内容为45H,则查表指令的处理过程如下:MOV A,#03H;表格元素相对于表首的位移量送累加器A ADD A,34H;当前程序计数器PC相对于表首的差值加到累加器A中 MOVC A,A

15、+PC;查表,查得第4个元素内容45H送累加器A 注意!查表指令的长度为1个字节,当前程序计数器PC的值应为查表指令的地址加1。,普通传送指令实现将源操作数的数据传送到目的操作数,指令执行后源操作数不变,数据传送是单向的。数据交换指令数据作双向传送。数据交换指令要求第一个操作数须为累加器A,共有5条:XCH A,Rn;A RnXCH A,direct;A(direct)XCH A,Ri;A(Ri)XCHD A,Ri;A03(Ri)03SWAP A;A03A47,2数据交换指令,堆栈是在片内RAM中按“先进后出,后进先出”原则设置的专用存储区。数据的进栈和出栈由指针SP统一管理。在MCS-51系

16、统中,堆栈操作指令有两条:PUSH direct;SP(SP+1),(SP)(direct)POP direct;(direct)(SP),(SP)(SP-1)其中PUSH指令入栈,POP指令出栈。操作时以字节为单位。入栈时SP指针先加1,再入栈。出栈时内容先出栈,SP指针再减1。用堆栈保存数据时,先入栈的内容后出栈;后入栈的内容先出栈。,3堆栈操作指令,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)+#data2)带进位

17、加指令ADDC ADDC A,Rn;A(A)+(Rn)+C ADDC A,direct;A(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,3.3.2 算术运算指令,1加法指令,2减法指令,1)带借位减法指令SUBB SUBB A,Rn;A A-Rn-C SUBB A,direct;A A-(direct)-C SU

18、BB A,Ri;A A(Ri)-C SUBB A,#data;A A-#data C2)减1指令DEC DEC A;A A-1 DEC Rn;Rn Rn-1 DEC direct;direct(direct)-1 DEC Ri;(Ri)(Ri)-1,在MCS-51单片机中,只提供了一种带借位的减法指令,没有提供一般的减法指令,一般的减法操作可以通过先对CY标志清零,然后再执行带借位的减法来实现。其中,SUBB指令在执行时要影响CY、AC、OV和P标志位。,3乘法指令MUL 在MCS-51单片机中,乘法指令只有一条:MUL AB 该指令执行时将对存放于累加器A中的无符号被乘数和放于B寄存器中的无

19、符号乘数相乘,积的高字节存于B寄存器中,低字节存于累加器A中。,4除法指令DIV 在MCS-51单片机中,除法指令也只有一条:DIV AB 该指令执行时将用存放在累加器A中的无符号被除数与存放在B寄存器中的无符号除数相除,除得的结果,商存于累加器A中,余数存于B寄存器中。指令执行后将影响CY和OV标志,一般情况CY和OV都清0,只有当B寄存器中的除数为0时,CY和OV才被置1。,3.3.3 逻辑操作指令(5种,24条),ANL A,Rn;A A RnANL A,direct;A A(direct)ANL A,Ri;A A(Ri)ANL A,#data;A A dataANL direct,A;

20、(direct)(direct)AANL direct,#data;(direct)(direct)data,ORL A,Rn;A A RnORL A,direct;A A(direct)ORL A,Ri;A A(Ri)ORL A,#data;A A dataORL direct,A;(direct)(direct)AORL direct,#data;(direct)(direct)data,1)逻辑与指令ANL(6条),2)逻辑或指令ORL(6条),XRL A,Rn;A A RnXRL A,direct;A A(direct)XRL A,Ri;A A(Ri)XRL A,#data;A A d

21、ataXRL direct,A;(direct)(direct)AXRL direct,#data;(direct)(direct)data,3)逻辑异或指令XRL(6条),在使用中,逻辑与用于实现对指定位清0,其余位不变;逻辑或用于实现对指定位置1,其余位不变;逻辑异或用于实现指定位取反,其余位不变。,逻辑运算指令的常见用法,逻辑与ANL用于清0或者保留某些位:例:ANL A,#0FH;则(A)=,(已知累加器A中已存有数:9AH),逻辑或ORL用于置1或者保留某些位:例:ORL A,#0FH;则(A)=,逻辑异或XRL用于取反或者保留某些位:例:XRL A,#0FH;则(A)=(A)100

22、1 1010#0FH 0000 1111,0AH,9FH,95H,1001 0101,95H,清零指令:CLR A A 0 求反指令:CPL A A 在MCS-51系统中,只能对累加器A中的内容进行清零和求反。某存储单元要进行清零和求反,该怎么办?,MCS-51系统有四条对累加器A的循环移位指令,前两条只在累加器A中进行循环移位,后两条还要带进位标志CY进行循环移位。每一次移一位。分别如下:,4)清零和求反指令,5)循环移位指令,累加器移位操作示意图 每次移一位,RL A 左环移,累加器 A,累加器 A,Cy,累加器 A,Cy,累加器 A,RRC A 带进位位右环移,RR A 右环移,RLC

23、A 带进位位左环移,1、无条件转移:LJMP,AJMP,SJMP,JMP 4条,LJMP addr16 长跳转指令 可在64K范围内跳转,AJMP addr11 绝对跳转指令 可在指令所在的2K范围内跳转,SJMP rel 相对跳转指令 可在当前PC-128与+127范围内跳转,JMP A+DPTR 间接长跳转指令 可在以DPTR为基址+A为偏移量之和 在64K程序范围内跳转,3.3.4 控制转移指令,如:LJMP AAAAH;AAAAHPC,PC=0000H,PC=AAAAH,0000H,0001H,AAA9H,AAAAH,假设执行该指令前,PC的值为0000H。,注意!该指令可以转移到64

24、 KB 程序存储器中的任意位置。,1)长转移指令:LJMP addr16(三字节双周期指令),【举例】:已知某单片机的监控程序地址为A080H,试问用什么方法使单片机开机后自动的转向该监控程序?,【解】:因为单片机上电时,PC=0000H,所以在0000H单元存放一条LJMP 0A080H 的指令即可。,PC高5位(保持不变),PC低11位,A10,A9,A8,A2,A1,11位转移地址的形成示意图,程序计数器PC,AJMP addr11;PC+2PC,addr11 PC.10PC.0,2)绝对转移指令,A0,3)相对转移SJMP指令,格式:SJMP rel;PC PC+2+rel rel 为

25、偏移量(+127-128)rel(偏移量)的计算公式:rel=目标地址 源地址 2(其中:2为SJMP指令的长度),4)间接转移指令,格式:JMP A+DPTR;PC A+DPTR 数据指针DPTR的内容一般为基址,累加器A的内容为相对偏移量,在64 KB范围内无条件转移。,2.条件转移指令:(8条,3类),JZ rel;若A=0,则PCPC+2+rel,否则PCPC+2JNZ rel;若A0,则PCPC+2+rel,否则PCPC+2 根据Acc的内容是否为0决定是否跳转,DJNZ direct,rel;先(direct)中的内容减1,再判断(direct)中的内容是否等于零,若不为零,则转移

26、。DJNZ Rn,rel;先Rn中的内容减1,再判断Rn中的内容是否等于零,若不为零,则转移。将direct(或Rn)里的内容减 1,结果不等于0就跳转;等于0则不跳转继续往下走。,CJNE A,#data,rel;若A=data,则PC PC+3,不转移,继续执行 若Adata,则C=0,PC PC+3+rel,转移 若Adirect,则C=0,PC PC+3+rel,转移 若Adata,则C=0,PC PC+3+rel,转移 若(Ri)data,则C=0,PC PC+3+rel,转移 若(Rn)data,则C=1,PC PC+3+rel,转移将A(或Ri,或Rn)与#data(或direc

27、t)相比较,其值不相等就跳转;相等则不跳转,继续往下走。,LCALL addr16 子程序长调用指令可在64K范围内调用子程序,3.子程序调用及返回指令(LCALL,ACALL,RET,RETI4条),ACALL addr11 子程序绝对调用指令可在指令所在的2K范围内调用子程序,RET 子程序返回指令子程序结束并返回调用后的下一条指令,RETI 中断服务子程序返回指令中断结束/返回被打断处的下一条指令,3.3.5 位操作指令(17条),位操作类指令:以位为单位进行逻辑运算及操作,可分为4种:,位传送:(MOV2条),位清零/置位:(CLR,SETB4条),位逻辑与/或/非运算:(ANL,OR

28、L,CPL6条),位条件转移:(JC,JNC,JB,JNB,JBC5条),合计:2+4+6+5=17条,1)位传送指令(2条):MOV C,bit(C)(bit)MOV bit,C(bit)(C)注:bit表示位地址,2)位清零/置位指令(4条):CLR bit(或C)(bit或 C)“0”SETB bit(或C)(bit或 C)“1”,3)位逻辑与/或/非指令(6条):ANL C,bit(或/bit)ORL C,bit(或/bit)CPL bit(或 C)注:“/bit”表示对bit先取反然后再参加运算,4)位转移指令(5条):,JC rel(Cy)=“1”就跳转;否则不跳转,JNC rel

29、(Cy)“1”就跳转;否则不跳转,JB bit,rel(bit)=“1”就跳转;否则不跳转,JNB bit,rel(bit)“1”就跳转;否则不跳转,JBC bit,rel(bit)=“1”就先将其清零 再跳转;否则,不动此位也不跳转。,空操作:(NOP1条)“耗时”一个机器周期。do nothing!,3.4 MCS-51系列单片机汇编程序常用伪指令,汇编程序 软件 工具工具软件:将程序员用汇编语言编写的源程序翻译成机器码,(真)指令:告诉计算机如何操作以及做何种操作,汇编语言源程序通过伪指令告诉汇编程序如何汇编,伪指令:告诉汇编程序在翻译应用程序时有何具体约定。伪指令不进行具体的操作,那是

30、真指令的事。比如:从何处开始,何处结束,某些编程者自己规定的表述代表什么意思,ORG addr16指明程序或数据的起始位置。,标号:DB 8位项或项表将8位项或项表顺序存放在此后的存储单元中。,标号:DW 项或项表顺序存放在此后的存储单元中。低字节存放在高地址单元,高字节存放在低地址单元。,标号:DS 数值表达式用在存储器中保留一定数量的字节单元。保留的字节单元数由表达式的值决定。,符号 EQU 项将项的值赋予符号名称。程序中凡出现该符号名称就等同于该项。,符号名称 DATA 直接字节地址将片内RAM字节单元地址赋予符号名称。符号以字母开头。,END 表示翻译到此结束,其后的任何内容不予理睬。

31、,符号名称 BIT 位地址将位地址的值赋予符号名称。程序中凡出现该符号名称就代表该位地址。,符号名称 XDATA 直接字节地址将片外RAM字节单元地址赋予符号名称。,汇编程序设计步骤,(1)分析题意确定算法。对复杂的问题进行具体分析,找出合理的计算方法及适当的数据结构。(2)根据算法画出程序框图。画程序框图可以把算法和解题步骤逐步具体化,以减少出错的可能性。(3)编写程序。,3.5 MCS-51系列单片机汇编程序设计,例24 多字节无符号数加法,设从片内RAM30H单元和40H单元有两个16字节数,把它们相加,结果放于30H单元开始的位置处(设结果不溢出)。处理过程:用R0作指针指向30H单元

32、,用R1作指针指向40H单元,用R2为循环变量,初值为16,在循环体中用ADDC指令把R0指针指向的单元与R1指针指向的单元相加,加得的结果放回R0指向的单元,改变R0、R1指针指向下一个单元,循环16次,在第一次循环前应先将CY清零。程序流程图和程序如下:,程序:ORG 1000HMOV R0,#30HMOV R1,#40HMOV R2,#16CLR CLOOP:MOV A,R0ADDC A,R1MOV R0,AINC R0INC R1DJNZ R2,LOOPEND,例30:16进制数(00H0FH)转ASCII码子程序,算法:凡10的十六进制数加37H;凡10的十六进制数加 30H。(参见

33、P5 ASCII码表)09 30H39H,AF 41H46H,转换时,只要判断十六进制数是在09之间还是在AF之间,如在09之间,加30H,如在AF之间,加37H,就可得到ASCII码。设十六进制数放于R2中,转换的结果放于R2中。,程序如下:ORG 0200H MOV A,R2 CLR C SUBB A,#0AH;减去0AH,判断在09之间,还是在AF之间 MOV A,R2 JC ADD30;如在09之间,直接加30H ADD A,#07H;如在AF之间,先加07H,再加30HADD30:ADD A,#30H MOV R2,A END,实例3:已知30H单元中有一变量X,要求编写一程序按下述

34、要求给Y赋值,结果存入31H单元。X+1,X0 Y=0,X=0 1,X0题意:根据X的不同,程序编写时有三个出口,即有三个分支!,想一想:程序怎么编写?,0000,0011,1000,0011,开始,XA,A=1,A=A+1,存结果,结束,Y,Y,N,N,程序框图:,A0?,A=0?,源程序如下:ORG 2000H MOV A,30H;X=0,转LP1处理;X0,转LP2处理 MOV A,#0FFH;X0,则Y=1;补码=取反加1 LP2:ADD A,#01;X 0,Y=X+1 LP1:MOV 31H,A;存结果 SJMP$;循环等待,$表示转至 本地址,此方法适用 于一字节的偏移量,最高位为

35、符号位。,JZ LP1,JNB ACC.7,LP2,SJMP LP1,设内部RAM20H单元和30H 单元中分别存放了两个8位的无符号数 X、Y,若XY 则让P1.0管脚连接的LED亮;若XY 则让P1.1管脚连接的LED亮。,方法1:两个数据做减法SUBB,可根据借位CY来判断两个数的大小!,方法2:两个数据做比较CJNE,再根据是否相等和借位CY来判断两个数的大小!,实例4:数据比较大小(1),X EQU 20H Y EQU 30H ORG 0000H MOV A,X CLR C JC L1 SJMP FINISHL1:FINISH:SJMP$END,SUBB A,Y,CLR P1.0,C

36、LR P1.1,数据比较大小(2),两个有符号数的比较。,问题1:如何表示有符号数呢?,问题2:有符号数怎样比较大小?,1.先判断符号位,负数小;正数大.2.符号相同,则用减法判断是否有借位.,思考:比较20H和30H单元两个有符号数的大小,结果按下述规律显示。(20H)=(30H),P1.0点亮;(20H)(30H),P1.1点亮;(20H)(30H),P1.2点亮;,X DATA 20H Y DATA 30H;伪指令 ORG 0000H MOV A,X XRL A,Y;X,Y进行异或 JB ACC.7,NEXT1;二者符号不同,跳转到NEXT1 MOV A,X;符号相同 CJNE A,Y,

37、NEQUAL;X Y,跳转到NEQUAL CLR P1.0;X=Y,点亮P1.0 SJMP FINISHNEQUAL:JC XXY;X Y,转移到XDYNEXT1:MOV A,X JNB ACC.7,XDY;判断X的正、负,正则转移到XDYXXY:CLR P1.2;X Y,点亮P1.1FINISH:SJMP$END,ORG 1000HDELAY:MOV R6,#200;1TmLOOP1:MOV R7,#248;1Tm NOP;1TmLOOP2:DJNZ R7,LOOP2;2Tm DJNZ R6,LOOP1;2Tm RET;1Tm,例5:软件循环延时100mS(晶振12MHz),1Tm=1uS 100mS=100000 uS MOV Rn#data 和 NOP 是单机器周期指令 DJNZ Rn,rel 是双机器周期指令,1+1+2482=498,(498+2)200,练习:1、编程将内部数据存储器20H30H单元内容清零。2、试编程将片外20H开始的30个数传送到片外3000H。3、试编程统计片外RAM8100H开始单元的100个数的“0”的个数,结果存放在9000H单元中。,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号