第3章第4章单片机原理与控制持技术第三版_第1页
第3章第4章单片机原理与控制持技术第三版_第2页
第3章第4章单片机原理与控制持技术第三版_第3页
第3章第4章单片机原理与控制持技术第三版_第4页
第3章第4章单片机原理与控制持技术第三版_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

第3章机械工业出版社同名教材配套电子教案第3版第3章80C51系列单片机指令系统3.1指令系统基本概念标号:操作码操作数;注释

3.1.1

指令基本格式⑴标号:指令的符号地址。①用于一段功能程序的识别标记或控制 转移地址。②指令前的标号代表该指令的地址,是用 符号表示的地址。一般用英文字母和数字组成。④标号必须用冒号“:”与操作码分隔。⑵操作码:表示指令的操作功能。①操作码用助记符表示,它代表了指令 的操作功能。②操作码是指令的必需部分,是指令的 核心,不可缺少。⑶操作数:参加操作的数据或数据地址。⑤操作数与操作码之间用空格分隔,操作数与 操作数之间用逗号“,”分隔。①操作数可以是数据,也可以是数据的地址、 数据地址的地址或操作数的其他信息。②操作数可分为目的操作数和源操作数。③操作数可用二进制数、十进制数或十六进制 数表示。④操作数的个数可以是0~3个。⑷注释:指令功能说明。①注释属于非必需项,是为便于阅读, 对指令功能作的说明和注解。②注释必须以“;”开始。3.1.2

指令系统中的常用符号⑹bit:位地址。代表片内RAM中的可寻址位00H~7FH及SFR中的可寻址位。⑴#:立即数符。#data:8位立即数;#data16:16位立即数。⑵direct:8位直接地址代表内RAM00H~7FH或SFR的80H~FFH。⑶@:间接寻址符。如@Ri,@DPTR,@A+PC,@A+DPTR。⑷addr11:11位目的地址。

addr16:16位目的地址。⑸rel:带符号的8位偏移地址。用于转移指令,其范围是相对于下一条指令第1字节地址的-128~+127个字节。3.1.3寻址方式【例】寻址就是寻找操作数的地址。⒈立即寻址立即寻址是直接给出操作数,操作数前有立即数符“#”。MOVA,#30H;将立即数30H传送至A中MOVDPTR,#5678H;将立即数5678H传送至DPTR⒉直接寻址MOVA,3AH

;将内RAM3AH单元中的数据传送至A中MOVA,P0

;将特殊功能寄存器P0口中的数据传送至A中说明:3AH和P0是以direct形式出现的直接地址直接寻址是给出操作数的直接地址。直接寻址范围为内RAM128B和特殊功能寄存器。【例】⒊寄存器寻址MOVA,R0;将R0中的数据传送至A中

寄存器寻址的操作数在规定的寄存器中。

规定的寄存器有:①工作寄存器R0~R7

②累加器A

③双字节AB

④数据指针DPTR

⑤位累加器Cy

这些被寻址寄存器中的内容就是操作数【例】⒋寄存器间接寻址MOVA,@R0

;将以R0中内容为地址的存储单元中的数据传送至A中MOVXA,@DPTR;将外RAMDPTR所指存储单元中的数据传送至A中PUSHPSW;将PSW中数据传送至堆栈指针SP所指的存储单元中间接寻址是根据操作数地址的地址寻找操作数。间接寻址用间址符“@”作为前缀。【例】⒌变址寻址MOVCA,@A+DPTR

【例】在变址寻址中,操作数地址=基址+变址用于读ROM数据操作。;将A的内容与DPTR内容相加,得到一个新地址,从该地址ROM中读取数据送入A中。相对寻址一般用于相对转移指令,

转移目的地址=当前PC值+相对偏移量rel。;将位地址07H(字节地址20H中最高位)中的数据传送至进位位Cy。⒍相对寻址⒎位寻址位寻址是对内RAM和特殊功能寄存器中的可寻址位进行操作的寻址方式。【例】MOVC,07H3.2

指令系统①MOVA,Rn

;Rn→A,n=0~7

②MOVA,@Ri

;(Ri)→A,i=0、1③MOVA,direct;(direct)→A④MOVA,#data;data→A

一、数据传送类指令⒈内RAM数据传送指令⑴以累加器A为目的字节的传送指令(4条)①MOVRn,A

;A→Rn,n=0~7②MOVRn,direct;(direct)→Rn,n=0~7③MOVRn,#data;data→Rn,n=0~7⑵以工作寄存器Rn为目的字节 的传送指令(3条)⑶以直接地址为目的字节的传送指令(5条)①MOVdirect,A ;A→(direct)②MOVdirect,Rn

;Rn→(direct),n=0~7③MOVdirect,@Ri

;(Ri)→(direct),i=0、1④MOV

direct1,direct2;(direct2)→(direct1)⑤MOVdirect,#data ;data→(direct)⑷以寄存器间址为目的字节的传送指令(3条)①MOV@Ri,A

;A→(Ri),i=0、1②MOV@Ri,direct;(direct)→(Ri),i=0、1③MOV@Ri,#data;data→(Ri),i=0、1⒉16位数据传送指令(唯一)MOV

DPTR,#data16;data16→DPTR【例】MOVDPTR,#1234H;DPTR=1234H该指令也可以用两条8位数据传送指令实现:MOVDPH,#12H;DPH=12HMOVDPL,#34H;DPL=34H,DPTR=1234H①MOVXA,@Ri

;(Ri)→A,i=0、1②MOVXA,@DPTR

;(DPTR)→A③MOVX@Ri,A

;A→(Ri),i=0、1④MOVX@DATR,A

;A→(DATR)⒊外RAM传送指令(4条)⒋读ROM指令(2条)内RAM(包括特殊功能寄存器):用MOV指令传送;外RAM:用MOVX指令传送;ROM:用MOVC指令传送。①MOVCA,@A+DPTR;(A+DPTR)→A②MOVCA,@A+PC;PC+1→PC,(A+PC)→A综上所述,三个不同的存储空间用三种不同的指令传送:①PUSHdirect;SP+1→SP,(direct)→(SP)

②POP

direct;(SP)→(direct),SP-1→SP

⒌堆栈操作指令(2条)⑴PUSH为入栈指令例PUSH30H;(30H)=2BH,具体操作是:

先将堆栈指针SP的内容(0FH)加1,指向堆栈顶的一个空单元,此时SP=10H;②然后将指令指定的直接寻址单元30H中的数据(2BH)送到该空单元中。⑵POP为出栈指令例POP

40H;(40H)=4CH,具体操作是:先将SP所指单元0FH(栈顶地址)中的数据(4CH)弹出,送到指定的内RAM单元40H,(40H)=4CH;②然后SP-1→SP,SP=0EH,SP仍指向栈顶地址。⒍交换指令(5条)

①XCHA,Rn

;A←→Rn,n=0~7

②XCHA,@Ri

;A←→(Ri),i=0、1

③XCHA,direct;A←→(direct)SWAPA;A7~4←→A3~0⑴字节交换指令⑵半字节交换指令XCHDA,@Ri;A3~0←→(Ri)3~0

高4位不变。i=0、1⑶累加器高低四位互换①ADDA,Rn;A+Rn→A(n=0~7)

有进位,Cy=1;无进位,Cy=0②ADDA,@Ri;A+(Ri)→A(i=0、1)

有进位,Cy=1;无进位,Cy=0③ADDA,direct;A+(direct)→A

有进位,Cy=1;无进位,Cy=0④ADDA,#data

;A+data→A

有进位,Cy=1;无进位,Cy=0

二、算术运算类指令⒈加法指令⑴不带Cy加法指令(4条)⑵带Cy加法指令(4条)①ADDC

A,Rn;A+Rn+Cy→A(n=0~7)

有进位,Cy=1;无进位,Cy=0②

ADDC

A,@Ri;A+(Ri)+Cy→A(i=0、1)

有进位,Cy=1;无进位,Cy=0③

ADDCA,direct;A+(direct)+Cy→A

有进位,Cy=1;无进位,Cy=0④

ADDCA,#data;A+data+Cy→A

有进位,Cy=1;无进位,Cy=0

⒉减法指令(4条)①SUBBA,Rn;A-Rn-Cy→A,(n=0~7),

有借位,Cy=1;无借位,Cy=0

②SUBBA,@Ri

;A-(Ri)-Cy→A,(n=0~1),

有借位,Cy=1;无借位,Cy=0③SUBBA,direct;A-direct-Cy→A,

有借位,Cy=1;无借位,Cy=0④SUBBA,#data;A-data-Cy→A,

有借位,Cy=1;无借位,Cy=0

①INCA ;A+1→A②INCRn

;Rn+1→Rn,n=0~7③INC@Ri ;(Ri)+1→(Ri),i=0、1④INCdirect ;(direct)+1→(direct)⑤INCDPTR ;DPTR+1→DPTR⒊加1减1指令⑴加1指令(5条)⑵减1指令(4条)①DECA

;A-1→A②

DECRn

;Rn-1→Rn,n=0~7③

DEC@Ri ;(Ri)-1→(Ri),i=0、1④

DEC

direct

;(direct)-1→(direct)

加1减1指令涉及A时,会影响P,但不影响其他标志位。

DIVAB

;(A÷B)商→A,余数→BCy=0,OV=0

⒋BCD码调整指令DAA功能:对加法运算结果进行BCD码调整。⒌乘除法指令⑴乘法指令(1条)MULAB

;A×B→BA⑵除法指令(1条)三、逻辑运算及移位指令①ANL

A,Rn

;A∧Rn→A②ANL

A,@Ri;A∧(Ri)→A③ANLA,#data;A∧data→A④ANLA,direct

;A∧(direct)→A⑤ANLdirect,A;(direct)∧A→direct⑥ANLdirect,#data;(direct)∧data→direct⒈逻辑“与”运算指令(6条)⒉逻辑“或”运算指令(6条)①ORL

A,Rn

;A∨Rn→A②ORL

A,@Ri;A∨(Ri)→A③ORLA,#data;A∨data→A④ORLA,direct

;A∨(direct)→A⑤ORLdirect,A;(direct)∨A→direct⑥ORLdirect,#data;(direct)∨data→direct⒊逻辑“异或”运算指令(6条)①XRL

A,Rn

;A

Rn→A②XRL

A,@Ri;A(Ri)→A③XRLA,#data;A

data→A④XRLA,direct

;A(direct)→A⑤XRLdirect,A;(direct)

A→direct⑥XRLdirect,#data;(direct)

data→direct

①CLRA ;0→A ②CPLA ;A→A⒋清零和取反指令⒌循环移位指令(4条)①循环左移:RLA②带Cy循环左移:RLCA

③循环右移:RRA

④带Cy循环右移:RRCA

①MOVC,bit;(bit)→Cy

②MOVbit,C;Cy→bit四、位操作类指令⒈位传送指令(2条)⑵位取反指令:①

CPLC ;C→C②CPLbit ;(bit)→bit⒉位修正指令(6条)⑴位清0指令:①CLRC ;0→C②CLRbit ;0→bit⑶位置1指令:①

SETBC ;1→C②SETBbit ;1→bit⑴位逻辑“与”运算指令:①ANLC,bit ;C∧(bit)→C②ANLC,/bit ;C∧(bit)→C⑵位逻辑“或”运算指令:①ORLC,bit ;C∨(bit)→C②ORLC,/bit

;C∨(bit)→C⒊位逻辑运算指令(4条)⑶相对转移指令

SJMP

rel;PC+2→PC,PC+rel→PC五、控制转移类指令⒈无条件转移指令(3条)⑴长转移指令

LJMP

addr16;addr15~0→PC,

⑵短转移指令

AJMP

addr11

;PC+2→PC, addr10~0→PC10~0, PC15~11不变⑷间接转移指令(散转指令)

JMP@A+DPTR ;A+DPTR→PCLJMP、AJMP、SJMP三条无条件转移指令的区别:①转移范围不一样。

LJMP转移范围是64KB;

AJMP转移范围是与当前PC值同一2KB;

SJMP转移范围是当前PC-128B~+127B。使用AJMP和SJMP指令应注意转移目标地址是否在转移范围内,若超出范围,程序将出错。②指令字节不一样。

LJMP是3字节指令;

AJMP、SJMP是2字节指令。⒉条件转移指令(13条)

条件转移指令根据判断条件可分为:

⑴判C转移

⑵判bit转移

⑶判A转移

⑷减1非0转移

⑸比较转移指令满足条件,则转移;不满足条件,则程序顺序执行。②

C=0转移指令:

JNCrel

;PC+2→PC,

若Cy=0,则PC+rel→PC,转移

若Cy=1,则程序顺序执行。⑴判C转移指令(2条)①C=1转移指令:

JCrel

;PC+2→PC,

若Cy=1,则PC+rel→PC,转移若Cy=0,则程序顺序执行。③(bit)=1转移并清0指令:

JBC

bit,rel

;PC+3→PC,

;若(bit)=1,则PC+rel→PC,转移,且0→(bit)

;若(bit)=0,则程序顺序执行⑵判bit转移指令(3条)①(bit)=1转移指令:

JB

bit,rel;PC+3→PC,

若(bit)=1,则PC+rel→PC,转移若(bit)=0,则程序顺序执行②(bit)=0转移指令:

JNB

bit,rel

;PC+3→PC,

若(bit)=0,则PC+rel→PC,转移若(bit)=1,则程序顺序执行①A=0转移指令:

JZ

rel

;PC+2→PC,

若A=0,则PC+rel→PC,转移若A0,则程序顺序执行⑶判A转移指令(2条)②A0转移指令:

JNZ

rel

;PC+2→PC,

若A0,则PC+rel→PC,转移若A=0,则程序顺序执行⑷减1非0转移指令(2条)②DJNZdirect,rel;PC+3→PC,(direct)-1→direct

若(direct)=0,则程序顺序执行若(direct)0,则PC+rel→PC,转移

DJNZRn,rel;PC+2→PC,Rn-1→Rn, 若Rn=0,则程序顺序执行 若Rn0,则PC+rel→PC,转移⑸比较转移指令(4条)①CJNEA,direct,rel;PC+3→PC,;若A=(direct),则程序顺序执行

;若A≠(direct),则PC+rel→PC,转移

;且若A≥(direct),Cy=0;若A<(direct),Cy=1

CJNE

A,#data,rel;PC+3→PC,;若A=data,则程序顺序执行

;若A≠data,则PC+rel→PC,转移

;且若A≥data,Cy=0;若A<data,Cy=1

CJNE

Rn,#data,rel;PC+3→PC,;若Rn=data,则程序顺序执行

;若Rn≠data,则PC+rel→PC,转移

;且若Rn≥data,Cy=0;若Rn<data,Cy=1④

CJNE

@Ri,#data,rel;PC+3→PC,;若(Ri)=data,则程序顺序执行

;若(Ri)≠data,则PC+rel→PC,转移

;且若(Ri)≥data,Cy=0;若(Ri)<data,Cy=1①产生当前PC:PC+3→PC, (PC+3是因为该指令为三字节指令)②断口地址低8位保存到堆栈中: SP+1→SP,(PC)0~7→(SP)③断口地址高8位保存到堆栈中: SP+1→SP,(PC)8~15→(SP)

④形成转移目标地址:addr16→PC⒊调用和返回指令LCALLaddr16 ;PC+3→PC,SP+1→SP,(PC)0~7→(SP)

;SP+1→SP,(PC)8~15→(SP);addr16→PC⑴长调用指令LCALL指令执行步骤:①产生当前PC:PC+2→PC,

(PC+2是因为该指令为双字节指令)②断口地址低8位保存到堆栈中: SP+1→SP,(PC)0~7→(SP)③断口地址高8位保存到堆栈中: SP+1→SP,(PC)8~15→(SP)④形成转移目标地址:addr11→PC0~10,PC11~15不变⑵短调用指令ACALLaddr11;PC+2→PC,SP+1→SP,(PC)0~7→(SP)

;SP+1→SP,(PC)8~15→(SP)

;addr0~10→PC0~10,PC11~15不变

ACALL指令执行步骤:①(SP)→PC8~15,SP-1→SP;②(SP)→PC0~7,SP-1→SP。⑶返回指令:返回指令有子程序返回和中断返回两种:①RET

;子程序返回②RETI;中断返回返回指令执行步骤:⒋空操作指令(1条)

NOP为单机周指令,在时间上占用一个机器周期,常用于时间“微调”。NOP;PC+1→PC第4章机械工业出版社同名教材配套电子教案第3版第4章汇编语言程序设计4.1.1汇编

将汇编语言源程序转换为机器代码的过程称为汇编。将由二进制码组成的机器代码程序转换为汇编语言源程序的过程称为反汇编。

4.1汇编语言程序设计基本概念

4.1.2伪指令

在汇编时起控制作用,自身并不产生机器码,不属于指令系统,而仅是为汇编服务的一些指令,称为伪指令。常用的伪指令有以下几种:⒈起始伪指令

ORG(Origin)

功能:规定ORG下面目标程序的起始地址。格式:ORG(16位地址)功能:将一个数据或特定的汇编符号赋予规定 的字符名称。⒉结束伪指令END功能:是汇编语言源程序的结束标志。在END

以后所写的指令,汇编程序不再处理。格式:END⒊等值伪指令

EQU(Equate)格式:(字符名称)EQU

(数据或汇编符号)⒋数据地址赋值伪指令

DATA格式:(字符名称)DATA

(表达式)功能:将数据地址或代码地址赋予规定的 字符名称。⒌定义字节伪指令DB(DefineByte)格式:DB(8位二进制数表)功能:从指定的地址单元开始,定义若干 个8位内存单元的数据。数据与数据之间用“,”分割。格式:(字符名称)BIT

(位地址)⒍定义字伪指令DW(DefineWord)格式:DW

(16位二进制数据表)功能:从指定的地址单元开始,定义 若干个16位数据。⒎定义位地址伪指令BIT功能:将位地址赋予所规定的字符名称。⑷

汇编和调试4.1.3程序设计的基本步骤

编写程序要求:

不仅要完成规定的功能任务,而且还应该执行速度快、占用内存少、条理清晰、阅读方便、便于移植、巧妙而实用。一般应按以下几个步骤进行:⑴分析问题,确定算法或解题思路⑵画流程图⑶编写源程序

顺序程序是指按顺序依次执行的程序,也称为简单程序或直线程序。顺序程序结构虽然比较简单,但也能完成一定的功能任务,是构成复杂程序的基础。4.2汇编语言程序设计举例4.2.1顺序程序CONT:MOV A,R0 ;读低8位

CPL A ;取反

ADD A,#1 ;加1 MOV R2,A ;存低8位

MOV A,R1 ;读高8位

CPL A ;取反

ADDC A,#80H ;加进位及符号位

MOVR3,A

;存高8位

RET ;【例】已知16位二进制负数存放在R1R0中, 试求其补码,并将结果存在R3R2中。解:二进制负数的求补方法可归结为“求反加1”,符号位不变。利用CPL指令实现求反;加1时,则应低8位先加1,高8位再加上低位的进位。注意这里不能用INC指令,因为INC指令不影响标志位。程序如下:在许多情况下,需要根据不同的条件转向不同的处理程序,这种结构的程序称为分支程序。

80C51指令系统中设置了条件转移指令、比较转移指令和位转移指令,可以实现分支程序。4.2.2分支程序①S0单独按下,红灯亮,其余灯灭;②S1单独按下,绿灯亮,其余灯灭;③S0、S1均按下,红绿黄灯全亮;④S0、S1均未按下,黄灯亮,其余灯灭。

【例4-6】已知电路如图4-4所示,要求实现:KeilC51软件调试(见例9-1

)⑴程序编译链接及纠错。直至显示:0Error(s),0

Warning(s)

⑵进入调试状态,全速运行。⑶打开P1口对话框,设置P1.7P1.6(s0、s1)状态。⑷观测P1.2~P1.0状态(0亮1灭),是否符合题目要求。画出Proteus虚拟仿真电路图

装入在Keil调试时生成的Hex文件

全速运行后,即时操作带锁按钮S0、S1

信号灯会按题目要求随之变化

图9-59ProteusISIS虚拟仿真信号灯电路课堂练习题:

电路及灯亮灭要求同上例,其中第2、3两条指令

JB

P1.7和JB

P1.6按下列要求修改,试重新编程,并进行Keil软件调试、Proteus虚拟仿真,看能否达到题目要求。

⑴JB

P1.7,…

JNBP1.6,…⑵JNBP1.7,…

JB

P1.6,…

⑶JNBP1.7,…

JNBP1.6,…

循环程序一般包括以下几个部分: ⑴循环初值; ⑵循环体; ⑶循环修改; ⑷循环控制; 其结构可以有两种组织形式,如图4-6所示。4.2.3循环程序

【例4-7】设Xi均为单字节数,并按顺序存放在以50H为首地址的内RAM存储单元中,数据长度(个数)N存在R2中,试编程求和S=X1+X2+‥‥+XN,并将S(双字节)存放在R3R4中(设S<65536)。解:程序如下:SXN: MOVR2,#N

;置数据长度(循环次数)

MOVR3,#00H;和单元(高8位)清0

MOVR4,#00H;和单元(低8位)清0

MOVR0,#50H;求和数据区首址LOOP:MOVA,R4

;读前次低8位和

ADDA,@R0

;低8位累加

MOVR4,A

;存低8位和

CLRA

ADDC

A,R3

;高8位加进位

MOVR3,A

;存高8位和

INCR0

;指向下一数据

DJNZ

R2,LOOP;判N个数据累加完否?

RET

;退出循环循环体置循环初值循环修改循环控制退出循环

DY1ms:MOVR7,#250;置循环次数

DLOP:DJNZ

R7,DLOP;2机周×250=500机周

RET

;【例4-8】按下列要求编写延时子程序:⑴延时1ms,fosc=6MHz;⑵延时10ms,fosc=12MHz;⑶延时1s,fosc=6MHz;解⑴:延时1ms,fosc=6MHz,一个机器周期为2s说明:MOVRn指令为1个机器周期;DJNZ指令为2个机器周期;RET指令为2个机器周期;[(2机周×250)+1+2]×2s/机周=1006s≈1msKeilC51软件调试编译(扩展名用.asm)链接并进入调试状态后,全速运行。观察寄存器窗口Sys中:states值为501(机周),sec值为0.001002(s)

RET(返回)指令需与子程序调用指令成对出现,单独执行时会出错。因此,Keil调试时,需去除RET指令,用伪指令END替代,才能得到正确的延时时间。但实际调用时,仍需加上RET指令,延时时间增加2机周。

注意:DY10ms:MOVR6,#20;置外循环次数DLP1:MOV

R7,#250;置内循环次数DLP2:

DJNZ

R7,DLP2

;2机周×250=500机周

DJNZ

R6,DLP1

;500机周×20=10000机周

RET

;解⑵:延时10ms,fosc=12MHz,一个机器周期为1s。说明:MOVRn指令为1个机器周期;DJNZ指令为2个机器周期;RET指令为2个机器周期;{[(2机周×250)+1+2]×20+1+2}×1s/机周

=10063s≈10msKeilC51软件调试结果(用END替代RET):

states=10061(机周),sec=0.010061(s)。

DY1S:MOV

R5,#5;置外循环次数DYS0:MOV

R6,#200;置中循环次数DYS1:MOV

R7,#250;置内循环次数DYS2:DJNZ

R7,DYS2;2机周×250=500机周

DJNZ

R6,DYS1;500机周×200=100000机周

DJNZ

R5,DYS0;100000机周×5=500000机周

RET

;解⑶:fosc=6MHz,一个机器周期为2s。说明:M

温馨提示

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

评论

0/150

提交评论