第3章 MCS-51指令系统及程序设计_第1页
第3章 MCS-51指令系统及程序设计_第2页
第3章 MCS-51指令系统及程序设计_第3页
第3章 MCS-51指令系统及程序设计_第4页
第3章 MCS-51指令系统及程序设计_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MCS-51单片机原理及应用第章

MCS-51指令系统及汇编程序设计本章内容提要MCS—51系列单片机的寻址方式, 六种寻址方式的定义与表达方式MCS—51系列单片机的指令系统, 各指令的格式、功能、简单应用单片机原理及应用计算机工作的基本原理是存储程序并执行程序,而程序则由能实现某种功能的指令序列构成。编写程序时使用的程序设计语言有三种:机器语言、汇编语言和高级语言。

机器语言是CPU唯一能直接识别的语言,是机器指令的集合,二进制代码书写。用汇编语言和高级语言编制的程序称之为源程序,都要转换成机器语言程序后才能为计算机直接执行,这种用机器语言描述的程序我们通常称之为目标程序。单片机原理及应用

高级语言的特点是通用性强,可以在不同的机器上运行。用高级语言编写的程序要用编译程序或解释程序翻译成机器语言程序方能执行。

汇编语言是用助记符来表示机器指令的一种程序设计语言。其每条语句对应相应的机器指令。汇编语言与机器的指令系统密切相关,不同的机型其指令系统不同,汇编语言程序不具备高级语言的通用性,用汇编语言编写的程序要经过汇编程序(也可以手译)翻译成机器语言程序后才能为计算机所识别。

其特点是占用的内存小、执行速度快。

单片机原理及应用

指令系统:一台计算机具有的所有指令的集合称为该计算机的指令系统。

MCS—51系列单片机的指令系统共有111条指令,在储存空间与执行时间上都有较高的效率,还含有丰富的位操作指令,成为该指令系统的一大特色。

按其功能可分为数据传送、算术运算、逻辑运算、程序转移、位操作等5个大类。

按指令长度:单字节指令49条、双字节指令46条、三字节指令只有16

条。按指令执行时间:单机器周期指令64条,双机器周期指令45条,乘除2

条指令的执行时间为4个机器周期。

单片机原理及应用操作码70数据或寻址方式70双字节指令:标号:操作码操作数或操作数地址(寻址方式);注释单字节指令:操作码70三字节指令:操作码70数据或寻址方式70数据或寻址方式70指令按字节长度可以分为三种:指令的格式:例如:MOVA,R0例如:MOVA,30H例如:MOVDPTR,#2010H由1~6个字符组成,字母开头由2~5个字母组成的助记符字符串,规定指令的操作功能操作数1~3,逗号隔开,不同指令操作数个数不同单片机原理及应用二、寻址方式

计算机的指令通常由操作码和操作数两部分构成。操作码部分指出了指令的功能,通常用代表该功能的英文缩写来表示;而操作数部分则可能是操作数本身或操作数所在的地址。表示指令中操作数所在位置的方法称为寻址方式。对MCS—51系列单片机,操作数可以为0~2个。不同的指令系统,具有的寻址方式也不同,相同功能的指令采用不同的寻址方式,有时可以节约空间,有时可以提高速度,寻址方式的多样化增加了指令的灵活性。 MCS—51系列单片机的指令系统有6种基本的寻址方式。指令给出参与运算的数据的方式称为寻址方式单片机原理及应用

立即寻址操作数就在指令中,跟在操作码的后面,该操作数被称为立即数。在指令中,立即数前面加“#”符号作为标志。指令:MOVA,#40H^#data结果A中等于#40H程序存储器0100000001110100此指令的立即数40H此指令的操作码74HPC+1PC单片机原理及应用立即寻址

指令中直接给出操作数数值的寻址方式。立即操作数用前面加有#号的8位或16位数来表示。例如:MOV A,#60H ;A←#60HMOV DPTR,#3400H ;DPTR←#3400HMOV 30H,#40H ;30H单元←#40H上述三条指令执行完后,累加器A中数据为立即数据60H,DPTR寄存器中数据为3400H,30H单元中数据为立即数40H。单片机原理及应用直接寻址指令中含有操作数的直接地址(内部RAM),该地址指出了 参与运算或传送的数据的直接单元(或位地址) 可访问:SFR、内部RAM低128字节、片内RAM位地址 如:MOVA,40H结果:A中为(?)程序存储器40HPC+10E5HPC内部RAM49h05H0e2h……0FH40H41H3FHMOVC,40H结果:位C中为?

28H单片机原理及应用直接寻址

指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有SFR寄存器和内部数据RAM。例如:MOV A,30H ;A←30H内部RAM单元中的内容30H为直接给出的内部RAM的地址。单片机原理及应用寄存器寻址

指令指出当前工作区某一个寄存器(R0~R7)的内容作为操作数值 指令操作码字节的低3位指明所使用的寄存器。 INC Rn 十六进制代码:08~0FH INC R0 十六进制代码:08 INC R1 十六进制代码:09 INC R2 十六进制代码:0A单片机原理及应用寄存器寻址

以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B、DPTR以及R0~R7

。例如: CLR A ;A←0 INC R0 ;R0←R0+1 ADD R5,#20H ;R5←#20H+R5单片机原理及应用寄存器间接寻址@Ri

指令指出R0、R1(用@R0或@R1)表示,其内容为地址所指的内RAM或外RAM中的数值,作为操作数值。

例如:R0=40H,MOVA,@R0 结果:A=? MOVXA,@R0 结果:A=?内RAM080H40H39H外RAM020H40H39HMOVX指令也可用DPTR作寄存器间接寻址单片机原理及应用寄存器间接寻址以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。间接寻址的存储器空间包括内部数据RAM和外部数据RAM。能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。其中R0、R1必须是工作寄存器组中的寄存器。SP仅用于堆栈操作。单片机原理及应用片内RAM30HR034HA30H34HMOV@R0,A间接寻址示意图单片机原理及应用片外RAM45HA0010H45H10HR1片外RAM2000HDPTR30HA2000H30HMOVXA,@R1间接寻址示意图MOVX@DPTR,A间接寻址示意图单片机原理及应用寻址比较MOVP1,R0③地址是寄存器R0MOVP1,@R0②地址在寄存器R0里MOVP1,20H④地址是内存20HMOVP1,#20H①直接将20H这个数送P1口MOVP1,R0单片机原理及应用变址寻址

变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读的,因此变址寻址只有读操作而无写操作,在指令符号上采用MOVC的形式。如:MOVCA,@A+DPTR;A←(A+DPTR)MOVCA,@A+PC ;A←(A+PC)基址寄存器是PC。单片机原理及应用MOVCA,@A+DPTR;A←(A+DPTR)变址寻址示意图程序存储器2000HDPTR10HA2010H64H10H2000H单片机原理及应用相对寻址

以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数(偏移量)形成新的PC值的寻址方式。相对寻址用于修改PC值,主要用于实现程序的分支转移。例如,SJMP08H;PC←PC+2+08H

单片机原理及应用程序存储器(2000H)200AHSJMP200AH08H2000H+208HPC2000HSJMP08H相对寻址示意图单片机原理及应用位寻址位寻址只能对有位地址的单元作位寻址操作。位寻址其实是一种直接寻址方式,其地址是位地址。例如:SETB10H;将10H位置1若22H单元中存放着数据40H,22H单元的D0位的位地址为10H,执行上述指令后(22H)=41H。MOV32H,C;32H←进位位CORLC,32H;C←C∨32H单片机原理及应用寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址MOVCA,@A+DPTR目的地寄存器操作数内部RAM3AH65H3AH基址寄存器12H变址寄存器34H内部RAM46HXXHADPTRPC46H单片机原理及应用目的地寄存器寻址直接寻址立即数寻址寄存器间接寻址基址+变址寻址相对寻址XXH位寻址操作数SJMP54HPC+54HPC2002H······2002H=2056HPC2056H单片机原理及应用寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址20H······27H21H28H21H20H100000000如果想使27H单元的D5位置1,该怎么办呢?单片机原理及应用单元地址2FH2EH2DH2CH2BH2AH29H28H

26H25H24H23H22H21H20H7F776F675F574F47372F271F170F07

MSB

位地址

LSB7E766E665E564E46

362E261E160E067D756D655D554D45352D251D150D057C746C645C544C44

342C241C140C047B736B635B534B43

332B231B130B037A726A625A524A42

322A221A120A027971696159514941

312921191109017870686058504840

30282018100800位寻址地址表例:SETB3DH

3D

3C

3B3F

3E3A

393827H单片机原理及应用寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址SETB3DH20H······27H21H28H21H20H000000010单片机原理及应用指令描述约定符号含义Rn表示当前选定寄存器组的工作寄存器R0~R7Ri表示作为间接寻址的地址指针R0~R1#data表示8位立即数,即00H~FFH#data16表示16位立即数,即0000H~FFFFHaddr16表示16位地址,用于64K范围内寻址addr11表示11位地址,用于2K范围内寻址direct8位直接地址,可以是内部RAM区的某一单元或某一专用功能寄存器的地址Rel带符号的8位偏移量(-128~+127)Bit位寻址区的直接寻址位(X)X地址单元中的内容,或X作为间接寻址寄存器时所指单元的内容←将←后面的内容传送到前面去单片机原理及应用MCS-51的指令1数据传送指令(29条)

2算术运算指令(24条)3逻辑运算指令(24条)4控制转移指令(17条)5位操作指令(17条)6常用伪指令(17条)

学习MCS—51单片机的指令系统应从指令的格式、功能、适用的寻址方式、运用等几方面着手。单片机原理及应用3.2指令系统及应用CYAcF0RS1RS0OVF1PPSW单片机原理及应用目的地址源地址数据MOV<目的操作数>,<源操作数>MOVA,#20H,ARndirect1@RiARndirect2@Ri#dataARndirect2@Ri#dataMOVRnA#datadirect2direct1ARndirect2@Ri#data@RiAdirect2#data20HA1数据传送指令(29条)

——8位数据传送指令(15条)

单片机原理及应用练习1

设内部RAM中33H单元中内容为44H,34H单元中内容为0AFH,R0中内容为33H,R1中内容为00H,给出以下每一条指令执行后A中的值和PSW中P的值。 MOVA,#34H MOVA,34H MOVA,R1 MOVA,@R0

单片机原理及应用练习2设内部RAM30H单元中内容为52H,指出以下指令执行顺次时的结果。

MOVA,#30H MOVA,30H MOVR0,#30H MOVA,@R0 MOV30H,#30H单片机原理及应用——16位数据传送指令(1条)

以数据指针DPTR为目的操作数,把16位数据送入DPTR

MOVDPTR,#data16 MOVDPTR,#0A5FFH单片机原理及应用——外部数据传送指令(4条)

MOVX<目的操作数>,<源操作数>,A@DPTR@RiMOVXA@DPTR@Ri@DPTRA@Ri@DPTRA@RiA单片机原理及应用MOVC查表指令MOVCA,@A+PC;(A+PC)AMOVCA,@A+DPTR;(A+DPTR)A基址寄存器加变址寄存器间接寻址 以十六位PC或DPTR作为基址寄存器,以8位累加器A作为变址寄存器,两内容相加形成16位地址,此寻址方式常用于查表。单片机原理及应用1)字节交换指令(3条)

——交换和查表类指令(9条)

,AXCHdirectRn@RidirectARn@Ri2)低半字节交换指令(1条)

XCHDA,@Ri3)累加器A中高4位和低4位交换(1条)

SWAPA4)查表指令(2条)

MOVCA,@A+PCMOVCA,@A+DPTR5)堆栈操作指令(2条)

PUSHdirectPOPdirect单片机原理及应用3.2.1数据传送类指令4)交换指令 XCHA,Rn XCHA,@Ri XCHA,direct XCHDA,@Ri SWAPA若A=0ABHR1=045H(44H)=0EFH(45H)=0CDH分别执行XCHA,R1XCHA,@R1XCHA,44H XCHDA,@R1SWAPA单片机原理及应用1.MOVA,#1000H ;A←1000H2.MOVXA,1000H ;A←(1000H)片外RAM3.MOVCA,1000H ;A←(1000H)片外ROM4.MOVX60H,A ;片外RAM(60H)←A5.MOVR0,60H ;片内RAM:(61H)←(60H) MOV61H,@R06.XCHR1,R2 ;R1←→R27.MOVXDPTR,#2000H;DPTR←2000H8.MOVX60H,@DPTR ;片内RAM←片外RAM9.MOVR1,R2 ;R1←R2下列指令是否错误,如错请改正:单片机原理及应用3.2指令系统及应用5)堆栈指令

进栈PUSHdirect 1.SP+1送SP 2.(direct)送(SP)若当前SP=60H(30H)=0ABH执行PUSH30H产生的结果为:

出栈 POPdirect 1.(SP)送(direct)2.SP-1送SP若(65H)=091H(64H)=0A1H(63H)=0B1H(32H)=0C1H当前SP=64H,执行POP32H结果为:单片机原理及应用3.2.2算术运算类指令1)不带进位位的加法指令 ADDA,Rn ADDA,direct ADDA,@Ri ADDA,#data影响CYAcOVP例:A=85HR0=20H(20H)=0AFH执行指令 ADDA,@R0

10000101A结果:A=34HCY=1 +) 10101111(20H) Ac=1OV=1P=1 (1) 00110100 单片机原理及应用directdirect2算术运算类指令(24条)

——加法指令(8条)

A,Rn@Ri#dataADDRn@Ri#datadirectdirectA,Rn@Ri#dataADDCRn@Ri#data——减法指令(4条)

directdirectA,Rn@Ri#dataSUBBRn@Ri#dataADDCA,B;(A+B+CY→A)SUBBA,B;(A–B–

CY→A)单片机原理及应用3.2指令系统及应用3.2.2算术运算类指令1)不带进位位的加法指令 ADDA,Rn ADDA,direct ADDA,@Ri ADDA,#data影响CYAcOVP例:A=53HR0=0FCH执行指令 ADDA,R0 01010011结果:A=4FHCY= +) 11111100 Ac=OV=P= (1) 01001111 单片机原理及应用3.2.2算术运算类指令2)带进位位的加法指令 ADDCA,Rn ADDCA,direct ADDCA,@Ri ADDCA,#data影响CYAcOVP例:A=85HR0=20H(20H)=0FFHCY=1执行指令 ADDA,@R0

结果:A=84HCY=1 Ac=1OV=0P=1 思考:如何实现双字节数相加?单片机原理及应用3.2.2算术运算类指令3)带进位位的减法指令 SUBBA,Rn SUBBA,direct SUBBA,@Ri SUBBA,#data影响CYAcOVP例:A=0C9HR2=54HCY=1执行指令 SUBBA,R2

11001001结果:A=74HCY=0 01010100 Ac=0OV=1P=0 -) 1 01110100 思考:如何实现双字节数相减?单片机原理及应用BCD码:00110100——BCD码调整指令(1条)

DAA注意:DAA指令只能跟在ADD或ADDC加法指令后,不适用于减法指令。十进制二进制BCD码012345678910

11

12

13

14

15000000010010001101000101011001111000100110101011110011011110111100000001001000110100010101100111100010010001000000010001000100100001001100010100000101011816+34十进制0001100000010110+BCD码001011100011010000101110-00000110差6单片机原理及应用3.2.2算术运算类指令十进制调整指令

DAA只能跟在加法指令后,将A中结果调整为BCD码。例:执行指令 MOVA,#56H MOVR5,#67H ADDA,R5 DAA结果A=23HCY=1其它不变化单片机原理及应用3.2.2算术运算类指令4)加1指令(增量指令) INCA INCRn INCdirect INC@Ri INCDPTR例: A=0FFH执行指令 INCA 结果?例 R0=09H R2=10H执行指令 INCR0

INC R1 结果?单片机原理及应用3.2.2算术运算类指令减1指令

DECA DECRn DECdirect DEC@Ri例:A=0FHR7=19H(30H)=00HR1=40H(40H)=0FFH分别执行指令DECADECR7DEC30HDEC@R1结果A=0EHP=1 R7=18H; (30H)=0FFH (40H)=0FEH单片机原理及应用3.2.2算术运算类指令乘法指令

MULAB把A和B中的无符号数相乘,低字节存于A中, 高字节存于B中。CY位总清零,积大于0FFH,置位OV例:执行指令 MOVA,#50H MOVB,#0A0H MULAB结果A=00HB=32H0V=1CY=0其它不变化思考:如何实现双字节数相乘?单片机原理及应用3.2.2算术运算类指令除法指令

DIVAB把A和B中的无符号数相除,执行指令后,商 存于A中,余数存于B中,CY、OV均清零。除 数为零时,A、B内容不确定,并置位OV例:执行指令 MOVA,#0FBH MOVB,#12H DIVAB结果A=0DHB=11H0V=0CY=0其它不变化单片机原理及应用逻辑及移位类指令

——逻辑与指令(6条)

助记符格式机器码(B)相应操作指令说明机器周期ANLA,direct01010101directAA∧direct按位相与1ANLA,Rn01011rrrAA∧Rnn=0~7rrr=000~1111ANLA,@Ri0101011iAA∧(Ri)i=0,11ANLA,#data01010100dataAA∧#data

1ANLdirect,A01010010direct(direct)(direct)∧A不影响PSW的P标志1ANLdirect,#data01010011directdata(direct)(direct)∧#data不影响PSW的P标志2单片机原理及应用——逻辑或指令(6条)

01000011directdata助记符格式机器码(B)相应操作指令说明机器周期ORLA,direct01000101directAA∨direct按位相或1ORLA,Rn01001rrrAA∨Rnn=0~7,rrr=000~1111ORLA,@Ri0100011iAA∨(Ri)i=0,11ORLA,#data01000100dataAA∨#data

1ORLdirect,A01000010direct(direct)(direct)∨A不影响PSW的P标志1ORLdirect,#data(direct)(direct)∨#data不影响PSW的P标志2单片机原理及应用——逻辑异或指令(6条)

助记符格式机器码(B)相应操作指令说明机器周期XRLA,direct01100101directAA(direct)按位相异或1XRLA,Rn01101rrrAARnn=0~7,rrr=000~1111XRLA,@Ri0110011iAA(Ri)i=0,11XRLA,#data01100100dataAA#data

1XRLdirect,A01100010direct(direct)(direct)A不影响PSW的P标志1XRLdirect,#data01100011directdata(direct)(direct)#data不影响PSW的P标志2单片机原理及应用3.2.3逻辑运算类指令

2)两个操作数的逻辑操作指令逻辑与ANL、逻辑或ORL、逻辑异或XRL例: MOVA,#38H MOVR0,#0FH ANLA,R0结果:A=?例:将P1口低3位设置位输入 ORLP1,03HORLP1,#03HORLP1,07HORLP1,#07H单片机原理及应用——累加器A清0和取反指令助记符格式机器码(B)相应操作指令说明机器周期CLRA11100100A00HA中内容清0,影响P标志1CPLA11110100A中内容按位取反,影响P标志1AA单片机原理及应用RLARRARLCARRCAA.0A.7A.0A.7A.0A.7A.0A.7CYCY——循环移位指令单片机原理及应用2.4控制转移类指令

——无条件转移指令(4条)1)长转移指令:LJMP0AAAAH;AAAAHPCPC=0000HPC=AAAAH0000H0001H······AAA9HAAAAH0002H假设执行该指令前,PC的值为0000H。注意:该指令可以转移到64KB程序存储器中的任意位置。单片机原理及应用PC高5位(保持不变)PC低11位A10A9A800001A7A6A5A4A3A2A1A0操作数(第二字节)11位转移地址的形成示意图程序计数器PC2)绝对转移指令AJMPaddr11;PC+2PC,addr11PC.10~PC.0操作码(第一字节)单片机原理及应用3.2.4控制转移类指令

1)无条件转移指令长跳转指令:LJMPaddr16把操作数分别装进PC的高字节和低字 节。可以跳转至64KBROM的任何地方。短跳转:AJMPadd11在此指令2KB范围内跳转,即在页内跳转 实际使用时,一般采用符号地址,即标号。相对转移指令:SJMPrelPC+2+rel送PC,在前128B至后127B间 跳转。单片机原理及应用3.2.4控制转移类指令

2)散转指令(基址加变址寄存器间接转移指令)

JMP@A+DPTRA+DPTR送PC形成16位跳装目的地址。 常用于按键等转移控制。3)条件转移指令 以跳装指令的下一条指令为中心,256B范围内跳转。当条件 满足时执行跳转。一、测试条件符合转移指令

JZrel 如果A中为0,则跳转 JNZrel 如果A中不为0,则跳转

单片机原理及应用3.2.4控制转移类指令

3)条件转移指令

JCrel CY位为1,执行跳转

JNCrel CY位为1,执行跳转 JBbit,rel 字节寻址位为1,执行跳转 JNBbit,rel 字节寻址位为0,执行跳转 JBCbit,rel 字节寻址位为1,执行跳转,并清0此位单片机原理及应用3.2.4控制转移类指令

3)条件转移指令 比较不等转移指令

CJNEA,direct,rel CJNEA,#data,rel CJNERn,#data,rel CJNE@Ri,#data,rel比较两操作数的大小,如果值不等,则转移,如果第一操作数小于第二操作数,还要CY位置1,否则CY清0。整个操作不影响两操作数内容。单片机原理及应用3.2.4控制转移类指令

3)条件转移指令比较不等转移指令例: 根据A的内容大于60H、小于60H、等于60H三种情况作不同的处理。

CJNEA,#60H,NEQ ;A不等于60H转移

EQ: …………. ;A=60H处理程序

………….. NEQ:JCLOW

………….. ;A>60H处理程序

LOW:………… ;A<60H处理程序

单片机原理及应用3.2.4控制转移类指令

3)条件转移指令 减一不等于0转移指令

DJNZRn,rel DJNZdirect,rel 将源操作数Rn或(direct)减一,如果值不等0,则转移。 此指令使得允许以RAM单元用作程序循环计数器。例:延时程序 DELAY: MOV30H,#03H DEL0: MOV31H,#0F0H DEL1: DJNZ31H,DEL1 DJNZ30H,DEL0

思考:如何用DJNZ指令,将内部RAM区域字节地址20H~30H清零?单片机原理及应用3.2.5位操作类指令

1)位变量传送指令 MOVC,bit MOVbit,C例: 执行以下两条指令 MOVC,06H MOVP1.0,C2)位变量修改指令 CLRC CLRbiteg.CLR27H;(24H).70 CPLC CPLbit SETBC SETBbit eg.SETBP1.7P1.71单片机原理及应用3.2.5位操作类指令

3)位变量逻辑操作指令

逻辑与 ANLC,bit ANLbit,C

逻辑或 ORLC,bit ORLC,/bit 斜线“/”表示逻辑非单片机原理及应用3.2.5调用返回指令

短调用 ACALLaddr11 PC+2PCL入(SP+1)PCH入(SP+2),即SP=SP+2长调用 LCALL

addr16 两者的区别在于所调用程序所在地址范围不同,前者在同一页面地址内调用,后者可在64K范围内调用。返回指令: RET在子程序结尾,必须是此指令,才能从子程序中返回至主程序例:若SP=62H,(62H)=07H,(61H)=30H执行

RET结果:SP=60HPC=0730H单片机原理及应用3.2.5调用返回指令

中断返回指令: RETI在中断子程序结尾,必须是此指令,才能从子程序中返回至主程序,并清除相应的中断寄存器。3.2.6空操作指令

NOP3.2.7伪指令

ORG定位伪指令 EQU END 汇编结束 BIT DB DW DS单片机原理及应用将00H~0FH这16个数顺序地置入片内RAM20H~2FH单元中。

方案一

MOVR0,#20H MOVR7,#0FH CLRALOOP:MOV@R0,AINCAINCR0DJNZR7,LOOPSJMP$还有什么方法实现循环的终止?单片机原理及应用方案二MOVR0,#20H MOVR7,#0FH CLRALOOP:MOV@R0,AINCAINCR0CJNEA,#0FH,LOOPSJMP$单片机原理及应用方案三

MOVR0,#20H MOVA,#0FH MOV30H,#00HLOOP:MOV@R0,30HINC30HINCR0DECAJNZLOOPSJMP$单片机原理及应用方案四

MOVR0,#20H MOVA,#0FH MOV30H,#00HLOOP:MOV@R0,30HINC30HINCR0SUBBA,#01HJNCLOOPSJMP$单片机原理及应用2.5位操作类指令单元地址2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H7F776F675F574F473F372F271F170F07

MSB

位地址

LSB7E766E665E564E463E362E261E160E067D756D655D554D453D352D251D150D057C746C645C544C443C342C241C140C047B736B635B534B433B332B231B130B037A726A625A524A423A322A221A120A027971696159514941393129211911090178706860585048403830282018100800RAM位寻址区位地址表单片机原理及应用助记符格式机器码(B)相应操作指令说明机器周期MOVC,bit10100010CYbit位传送指令,结果影响CY标志2MOVbit,C10010010bitCY位传送指令,结果不影响PSW2位置位和位清零指令助记符格式机器码(B)相应操作指令说明机器周期CLRC11000011CY0位清0指令,结果影响CY标志1CLRbit11000010bitbit0位清0指令,结果不影响PSW1SETBC11010011CY1位置1指令,结果影响CY标志1SETBbitbit1位置1指令,结果不影响PSW111010010bit位传送指令单片机原理及应用位运算指令助记符格式机器码(B)相应操作指令说明机器周期ANLC,bit10000010bitCYCY∧bit位与指令2ANLC,/bit10110010bit位与指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC,/bit10100010bit位或指令2CPLC10110011位取反指令2CPLbit10110010位取反指令,结果不影响CY2CYCY∧bitCYCY∨bitCYCYbitbit助记符格式机器码(B)相应操作机器周期JBbit,rel00100000bitrel若bit=1,则PCPC+rel,否则顺序执行2JNBbit,rel00110000bitrel若bit=0,则PCPC+rel,否则顺序执行2JBCbit,rel00010000bitrel若bit=1,则PCPC+rel,bit0,否则顺序执行2位转移指令单片机原理及应用3.2.5调用返回指令

中断返回指令: RETI在中断子程序结尾,必须是此指令,才能从子程序中返回至主程序,并清除相应的中断寄存器。3.2.6空操作指令

NOP3.2.7伪指令

ORG 定位伪指令 EQU 符号定义伪指令 END 汇编结束

DB 定义字节数据伪指令 DW 定义字数据伪指令 DS 定义空间伪指令单片机原理及应用例1:查表子程序:多字节十六进制数转成ASCII码入口:R0内装有16进制数低位地址 R2内装此多字节十六进制数的字节数出口:R1内装有ASCII数低位地址HEXASC: MOVA,@R0 MOVCA,@A+PC ANLA,#0FH MOV@R1,A ADDA,#16 INCR0 MOVCA,@A+PC INCR1 MOV@R1,A DJNZR2,HEXASC INCR1 DECR1 MOVA,@R0 RET SWAPA ASCTAB:DB“0,1,2,3,4,5,6,7,8,9” ANLA,#0FH DB“A,B,C,D,E,F” ADDA,#07H单片机原理及应用例2:如果Xi均为单字节数,按顺序存放于内RAM从50H开始的单元中,n存放于R2中,现求此n个数之和,放于R3R4中NSU: MOVR3,#0 INCR0 MOVR4,#0 DJNZR2,LOOP MOVR0,#50 RETLOOP:MOVA,R4 ADDA,@R0 MOVR4,A CLRA ADDCA,R3 MOVR3,A

思考,如果是8个单字节数,如何计算平均?单片机原理及应用例3:多重循环,50毫秒延时(12MHz晶振)最简单的多重循环为由DJNZ指令构成的软件延时程序DEL: MOVR7,#200 ;1DEL1: MOVR6,#125 ;1DEL2:DJNZR6,DEL2 ;2 DJNZR7,DEL1 ;2 RET 延时1+(1+2×R6+2)×R7+2=50,203uS注意:用软件延时时,不允许有中断,否则将严重的影响定时的准确性。改为:DEL: MOVR7,#200 ;1 DEL1:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论