指令与编程课件_第1页
指令与编程课件_第2页
指令与编程课件_第3页
指令与编程课件_第4页
指令与编程课件_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

第三章指令系统及程序设计

(P.43)

系列单片机指令集含有HI条指令

G每条指令在程序存储器ROM中占据一定的空间,

以字节为单位。按指令场占为芳裁分类:

单字节(49条);双字节(46条);3字节(16条)

0每条指令在执行时要花去一定的时间,以机器

周期为单位。按指令期行时间分类:

单周期(64条);双周期(45条);4周期(2条)

G按指令的功能分类,可分为5大类:

数据传送类(29条);算术运算类(24条)

逻辑运算及移位类控制转移类」:

侬-51指令的格式(P.44)

[标号:]操作码[目的操作数]L源操作数][;注释

方括符[]表示可选项

标号代表指令所在地址,1-8个字母/数字,

结尾

操作码就是指令功能助记符,指令实体

目的操作数

,源操作数

。注释,以;”开头

《单片机原理与应用技术》教学课件

寄存器寻址——(P.45)

从寄存器中读取操作数或存放操作数进寄存器

例:MOVA,B

MOV30H,RO

MOVA,RI

《单片机原理与应用技术》教学源

立即寻址——(P.45)

G寄存器间接寻址—(P.46)

寄存器中的内容是一个地址,由该地址单元

寻址到所需的操作数

[MOVRI,#30H;(R1)-立即数30H]

MOVQR1,#0FH;

MOVA,QR1;

注意:

1)“间接”表示某寄存器中的“内容”只是一个

“单元地址”,这个地址单元中存放的才

是要找的“操作数”。

2、;符号表示“在…”,其含义与读音皆同

t”。

《单片机原理与应用技术》教学课件

口直接寻址P.46

指令中直接给出了操作数所在单元的地址或名称

MOVRI,1FH;

MOV30H,4AH;

在本单片机中规定:访问特殊功能寄存器SFR

只能采用直接寻址方式。例如:

MOVA,SP(A)SP相同

81H(A)SP

相同

30HB(30H

的地址见P.33表

里片机原理」

在本单片机中访问特殊功能寄存器SFR只能采用直

接寻址方式的原因:SFR分布在80H〜0FFH范围内,

而52系列单片机有256字节的片内RAM,其中的

80H〜OFFH的RAM与SFR所占o

于是规定:80H〜0FFH范围内的只能用

方式,而SFR只能用直接寻址方式。从而

解决了地址冲突的问题。例如:

OVA,90H等效于MOVA,Pl属直接寻址

WA,@R0;[事先已知(RO)=#90H]

a执行的操作:A-(90H)属寄存器间接寻址,

★随意写的指令如:则是非法的!

《单片机原理与应用技术》教学课件

存储器配置(片内RAM

・89c51片内RAM128字节(OOH7FH)

・89c52片内RAM256字节(OOHOFFH)

SFR分布在

80H-FFH

其中92个位

可位寻址

80HI-----------——I

只能直接寻址

,,变址寻址P.47

也称为:基址寄存器+变址寄存器间接寻址

以16位的地址指针寄存器DPTR或16位的PC寄存器为

基址寄存器,以累加器A为变址寄存器,两者中的

内容”形成一个16位的“地址”,该“地址”所

指的存储单元中的内容才是操作数。

[设:AB已存有#A4H,DPTR中已存有#1234H]

MOVCA,@A+DPTR;

操作:将A4H+1234H=12D8H单元中的数放进累加器A

相对寻址—(P.47)

当前PC值加上指令中规定的偏移量rel,构成实际

的操作数地址

F例:SJMPrel

操作:跳转到的目的地址=当前16位PC值+rel

1)“当前PC值”指程序中下一条指令所在的首地址,

是一个16位数;

rel”表示“偏移量”,是一个带符号的单

二位寻址——(P.48)

指令中直接给出了操作数所在的位地址。

例:CLRPl.0;(PL0)0

SETBACC.7;1

CPLC;(C)一NOT(C)

汪息:

1)位地址里的数据只可能是一个0或1

2)有的位地址十分明确,如P1.0,ACC.7等,

有的位地址则“不太明确”,如:

[[MOVA,17H;(A)-(17H).17H是字节地址]

MOVACC.0,17H;(ACC.0)-(),这里ACC.0

谆..所以该指令中的是22H单元的第7位

《单片机原理与应用技术》教学课件

•片内RAM中有128个位

可按位寻址的位,位

地址:OOH—7FH分布

在:20H—2FH单元;

•另外,在SFR中还有92

个位可按位寻址

总共

128

52子系列才有个可

的RAM区按位

寻址

的位

位寻址区

位寻址P.48

指令中直接给出了操作数所在的位地址。

CLRP1.0L.0)

SETBACC.7;(ACC.7,

CPLC;NOT(

注意:

1)位地址里的数据只可能是一个0或1

2)有的位地址十分明确,如Pl.IACC.7等,

有的位地址则“不太明确”,如:

[MOVA,17H;(A)-(17H),17H是字节地址]

MOVACC.0,17H;(ACC.0)(),这里ACC.0

所以该指令中的是22H单元的第7位

《单片机原理与应用技术》教学课件

MCS-51指令集

功能分五类,共”1条指令

(五大类功能)

P.49页

数据传送类指令:(29条)

算术运算类指令:(24条)

逻辑运算及移位类指令:(24条)

控制转移类指令:(17条)

立操作(布尔操作)类指令:(17条)

(5种/29条)

49

6条

内部存储器间传送:(MOV—

外部数据存储器与累加器间传送:

4条

(MOVX-

程序存储器向累加器传送:

2条

(MOVC-

5条

数据交换:(XCH,XCHD,SWAP-

2条

堆栈操作:(PUSH,POP-

见P.49的表3-2

半米T1(5种/29条)

内部存储器间传送指令(16条):

2MOV类指令的操作方向总是后面的

操作数指向前面的操作数!

例:MOVA,30H(A)—(30H)

Acc累加器Rn:RO—R7

©Ri:@R0,@R1

Direct直接寻址@Ri间接寻址#data:8位立即数

#datal6:16位立即数

direct:直接地址

Rn寄存器#data立即数

rel:8位带符号偏移量

(续)

MOVX类指令可在累加器与以@DPTR或@Ri所代表的

外部RAM之间进行数据传送。

例如:

MOVXA,©DPTRA-DPTR

MOVX©Ri(A)一((Ri))

©DPTR,ADPTR-A

督MOVX©Ri,((Ri))”(A)

MOVCA,©A+DPTR

MOVCA,©A+PC

通常称为查表指令,寻址方式属:

+器间接寻址

@A+DPTR或@A+PC指向程序存储器中的某单元。拟

传送给累加器ACC的数据就是程序中事先写进去

的表格数据。这些表格数据往往用伪指令DB,DW

甯定义在程序中。

(续)

kA

BSS指令(5条):P.53

XCHA,direct(字节互换)

XCHA,QRi(字节互换)

XCHA,Rn(字节互换)

(A)z=T(direct)[或((Ri)),或(Rn)]

XCHDA,@Ri

累加器Acc的低4位与((Ri))的低4位互换,

各自的高4位不变

SWAPA

累加器Acc的低4位与自身的高4位互换

(续)

栈操作指令(2条):P.54

PUSH——压栈指令

POP——弹栈指令

堆栈区由特殊功能寄存器重茂援力侬管理

堆栈区可以安排在RAM区任意位置,一般不安

排在工作寄存器区和可按位寻址的RAM区,而是放

艮在RAM区的靠后的位置

堆栈总是指向栈顶

通常PUSH与POP两条指令成对使用,

,例如:设(A)=7BH;(35H)=11H

并且知道(SP)=60H

PUSHACC;(61H)—#7BH

PUSH35H;(62H)—(35H)

即:(62H)—#11H

POPACC;(A)—(62H)

即:(A)—#11H

POP5AH;(5AH)—(61H)

即:(5AH)—#7BH

(6种/24条)

P.54

4条

G加法运算:(ADD

4条

H带进位加法运算:(ADDC

4条

G带借位减法运算:(SUBB

9条

P加1/减1操作:(INC,DEC

2条

P单字节乘/除法运算:(MUL,DIV-

1条

P十进制调整:(DAA

A

7

ADD4条

ADDC4条

带进位加法运算:

sB4条

带借位减法运算:UB

所有的加法(ADD)、带进位加法(ADDC)、带借位减

法(SUBB)运算都是以A为一个加数或被减数,最终

结果也存进A。

加法(ADD)、带进位加法(ADDC)以及带借位减法

(SUBB)运算中,如果产生了进位或借位,将自动对

中的Cy标志位置“1”。

进位加法(ADDC):(A)—(A)+(Cy)+(第二操作数)

:(A)―(A)-(Cy)-(第二操作彳

(续)

P.57

I加1/减1操作:INC,DEC9条)

INC,DEC与用力口/减法指令做加1/减1操作不同之

处在于INC、DEC不影响琢志位.

,单字节乘/除运算:(MUL,DIV2条)

两个单字节数的乘/除法运算只在A与B之间进行。

MULAB:(A)与(B)相乘,积为16位数,

(A)一积的图8位;(B)一积的低8位

DIVAB:(A)除以(B),结果用2字节表示,

(A)一商的整数部分;(B)一余数

(二)算术运算类指令(续)

P.60/

二十4制调整:(DAA——1条)

用于两个BCD码之间的相加,这条指令只能跟在

ADD或ADDC之后

BCD码是指

十进制数20可以用二进制数00010100B表示;

也可以用十六进制数14H表示;

还可以用BCD码00100000B或20H表示。

7、〕4个二进制位就可以表示一位BCD码:

pO-1001可表示十进制数(BCD数)0-9;

▲v\\>>k>\\K>L>\UJ—一T

-I—7,/、〜J717I——/一L7

3000-10011001表示00〜99。

指令“DAA”完成的操作:

若(A)3〜o〉9(AC)=1则(A)3~0一(A)3~0+6;

若(A)7~4〉9(CY)=1则(A)7〜47〜4+6;

P.60例5:两个十进制数“65”与“58”相加,根

据常识,显然其和应当为“123”。

6501100101

MOVA,#65H

ADDA,#58H5801011000

DAA

6601100110

23H

1819

23

《单片机原理与反

指令“DAA”完成的操作:

若(A)3〜o〉9(AC)=1则(A)37—(A)3〜。+6;

若(A)7T〉9(CY)二1则(A)7〜4^~(A)7〜4+6;

又如:两个十进制数“39”与“58”相加,根据常

识,显然其和应当为“97”。

3900111001

MOVA,#39H

ADDA,#58H5801011000

DAA•60110

23

0—97

?逻援与(AND,逻辑或(ORL),逻辑异或(XRL):

指令形式ByteTm

ANL(ORL,XRL)directA21

ANL(ORL,XRL)direct,#data32

ANL(ORL,XRL)A#data21

ANL(ORLXRL)Adirect21

ANL(ORL,XRL)A,©Ri11

ANL(ORL,XRL)A,Rn11

G累加器清零/取反操作(CLR,CPL2条)

对累加器清零Byte个Tm

rni对累加器按位取非Byte个Tm

用磕n累加器A中已存有数:9AH)

逻辑与ANL用于也或者住空某些位:

?逻辑或ORL用于置1或者住置某些位:

逻辑异或XRL用于取反或者保留某些位:

则(A)=95H

(A)10011010

#0FH->00001111

95H<-10010101

《单片机原理与应用技术》教学课件

(续)

4条)

(4种/17条)

P.6

此类指令改变程序的执行顺序改变当前PC值

「无条件转移:

(LJMP,AJMP,SJMP,JMP4条)

心条件转移(判断跳转):

(JZ,JNZ,CJNE,DJNZ8条)

•:子程序调用及返回:

(LCALL,ACALL,RET,RETI4条)

以空操作:

NOP1条)

“耗时”一个机器周期。donothing!

(17条)

P.71

位操作类指令以位为单位进行逻辑运算及操作,

可分为4种:

位传送:(MOV——2条)

,位清零/置位:(CLR,SETB——4条)

二位逻辑与/或/非运算:

(ANL,ORL?CPL------6条)

位条件转移:(JC,JNC,JB,JNB,JBC-----5条)

位操作类指令(续)

巴蕊送指令(2条):

MOVC,bit——(C)—(bit)

MOVbit,C——(bit)«-(C)

注:bit表示位地址

r位清零/置位指令《条):

CLRbit(或C)——(bit^C)<-"0"

ISETBbit(或C)----(bit^C)<-"1"

位逻辑与/或/非指令(6条):

C,bit(或/bit)

C,bit(或/bit)

t(或C)

t”表示对bit位先取反然后再参加运算

(续)

件转移指令(5条):

JCre]“1”就跳转;否则不跳转

re'(Cy)#就跳转;否则不跳转

bit,re:

(bit)=“1”就跳转;否则不跳转

bit,rel

(bit)#“1”就跳转;否则不跳转

•:JBCbit,rel

(bit)='T就先将其清零再跳转;

否贝h不动此位也不跳转,

《单片机原理与应用

前面I测控实例

位操作指令

JOB1:CLRPl.0;P1.。清“0P亮红灯

HERE:AJMPHERE;原地等待,不做别的事

J0B2:CPLPl.0”把1・0取反:红灯亮/灭

ACALLDELAY;延时1秒

AJMPJOB2;重复

JOB3:CLRPl.1;PL1清"0”,亮绿灯

REDO:SETBPl.3;<P1.3置"

CHECK:JNBP1.3,CHECK;传感器是否被阻断

LOOP:••…;有入侵者,

AJMPREDO;再跳回去检测

测控实例

跳转指令

红巾

J0B1:CLRPl.0;P1.0清“0”,亮红灯

HERE:AJMPHERE;原地等待,不做别的事

4寻期性地

J0B2:CPLPl.0;对「1・0取反:红灯亮/灭

ACALLDELAY;延时1秒

AJMPJOB2;重复

红外防盗报邈

J0B3:CLRPl.1;Pl.1清"0”,亮绿灯

REDO:SETBPl.3;将P1.3置“1”

CHECK:JNBPl.3,CHECK;检测传感器是否被阻断

LOOP:...............;有入侵者,报警!

__AJMPREDO;再跳回去检测

(5种/29条)

内部存储器间传送:(MOV——16条)

■外部数据存储器RAM与累加器间传送

4条

(MOVX——

程序存储器ROM向累加器传送:

2条

5条

数据交换:(XCH,XCHD,SWAP

2条

堆栈操作:(PUSH,POP

/24条)

4条

r加法运算(ADD

4条

p带进位加法运算(ADDC

4条

n带借位减法运算(SUBB

9条

G加1/减1操作(INC,DEC

2条

?单字节乘/除法运算(MUL,DIV

1条

,十进制调整(DAA

■㈢逻辑运算及移位指令(5种

/24条)

6条

二逻辑与运算:(ANL

6条

二逻辑或运算:(ORL

6条

二逻辑异或运算:(XRL

2条

E累加器清零/取反:(CLRCPL

,4条

G累加器移位操作:(RL,RLC,RR,RRC

(4种/17条)

心无条件转移:

(LJMP,AJMP,SJMP,JMP4条)

己条件转移(判断跳转):

(JZ,JNZ,CJNE,DJNZ8条)

二子程序调用及返回:

(LCALL,ACALL,RET,RETI4条)

G空操作:NOP1条)

《单片机原理与应用技术》教学课件

汇编语言与

简单程序设计

汇编语言程序设计中的数

计算机只能识别二进制数——机器指令,它原本是

不认识常用的十六进制数和十进制数的。

C机器指令/目标代码:

由0/1代码组成的操作码与操作数。

二进制数:由0/1组成、“逢2进的数制。

如:01011110B(0-1后缀:B/b)

六进制数:便于读写记忆的二进制数的简写形式。

(0〜9,A〜F后缀:H/h)

CD码:用二进制数表达的十进制数。

(0〜9表示为:0000〜1001B后缀:B/b,H/h)

汇编语言编程基本规则

不汇编语言:用助记符描述的指令的集合。

2汇编程序:汇编语言编写的程序借助编译工具

编译成为目标代码,计算机才能识别。这个编译工具

称为汇编程序。

■]操作码[

指令中以A—F开头的十六进制数前必须添一个

飞一;进制数必须带后缀或,■”;进制数必

须带后缀州”或“h”;十进制数的后缀是或

“心或无--------------------------------

《单片机原理与应用技术》教学课件

汇编程序的伪指令

汇编程序—软件一工具—工具软件:

将程序员用汇编语言编写的程序翻译成机器码

用汇编语言编写的程序在此被称为应用程序

(真)指令:告诉计算机如何操作以及做何种操作

伪指令:告诉汇编程序在翻译应用程序时有何具

体约定。伪指令不进行具体的操作,那是真指令

的事。

比如:从何处开始,何处结束,某些编程者自己

规定的表述代表什么意思……

汇编程序的常用伪指令

ORGaddrl6

规定编译后的机器代码存放的起始位置。

1END

表示翻译到此结束,其后的任何内容不予理睬。

“当前PC值”也叫位置计数器

代表正在执行的指令所在位置。

?符号名称EQU表达式

’将表达式的值赋予符号名称。程序中凡出现该符

号名称就等同于该表达式。

号名称BIT位地址

将位地址的值赋予符号名称。程序中凡出现该

符号名称就代表该位地址。

DB8位数据[或8位数据组]

将8位数据[或8位数据组]顺序存放在此后的存

储单元中O占相应数量的存储空间。

GDW双字节数据[或双字节数据组]

将双字节数据[或双字节数据组]顺序存放在此

后的存储单元中。占据相应存储空间。

ANLA,#OFH;取出个位

ADDA,R3

MOVR2,A;结果一R2

RET;若不是子程序可用功赍

程序的顺序/分支/循环三种基本结

例P.82—2:将R5R4中的双字节BCD码数转为二进

制数存于R5R4中。

编程要点:

两字节BCD码数范围为:0000H—9999H

相应2进制/16座制数%:OOOOH—270FH

调用BCD2B子程序实现“千位,百位”转为二进

制,

并乘100;

♦再调BCD2B子程序实现“十位,个位”转为二进

制;

最后,对位相加。

程序的顺序/分支/循环三种基本结

列P.82—2:(R5)千百十个(R4)

将R5R4中的两

调BCD2B

字节BCD码数转

为二进制数存(A)调BCD2B

于R5R4中X100

(R5)I(R6)I(A)

二进制二进制+二进制

+

二进制二进制

(R5)(R4)

程序的手/分支/循环三种基本结

P.83例3:ORG2000H

VAREQU30H;定义缓存单元

FUNCEQU31H;书中缺此二句

1(X>0)

BRI:MOVA,VAR;取出变量“X”

0(x=o)

Y二々JZCOMP;若=0,就赋0

-1(X<0)

JNBACC.7,POS1;判断=正?

MOVA,#0FFH(-1=+1取反加1)

出I

SJMPCOMP-

出+l

P0S1:MOVA,#01H

赋a

函Y

COMP:MOVFUNC,A

HERE:AJMPHERE

END

《单片机原理与应用技术》教学课件

/.季一分好飞支/循环三种基本结

I

JORG0000H控制一盏灯点亮

,AJMPMAIN红灯周期性亮/灭

ORG0003H红外防盗报警

RLA

CLRPl.0;亮红灯

ACALLDELAY

HEREAJMPHERE

RETI

MAIN:MOVA,#80HJCPLPl.0;亮/灭

SETBEXOACALLDELAY;延时1秒

J0B2;重4

一SETBEAAJMP

'WAIT:JBACC.0,JOB1

CLRPl.1;亮绿灯

JBACC.1,JOB2SETBP1.3

JBACC.2,JOB3CHECK:JNBP1.3,CHECK

AJMPWAITLOOP:........;报警!

AJMPREDO;再检测।

《单片机原理与应F

程序疗/分支/循环三种基本结

85—86:软件循环延时lOOmS(晶振12MHz)

☆ITm=luSlOOmS=100000uS

☆MOVRn#data和NOP是单机器周期指令

☆DJNZRn,rel是双机器周期指令

☆200=0C8H;248=0F8H

ORG1000H

DELAY:MOVR6,#200

温馨提示

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

评论

0/150

提交评论