有关单片机的指令系统,专业的来

有关单片机的指令系统,专业的来,第1张

不让发那么多 所有分两次 这里接上面的4.循环移位指令(4条)

循环移位指令的功能是将累加器A中内容循环位移或者和进位位一起移位。

例 A=01H, Cy=1

若执行一次 RRC A后,结果为:A=10000000B Cy=1

若执行一次 RLC A后,结果为:A=00000011B Cy=0

5.取反、清0指令

CPL A ;累加器内容按位取反。如果1就变0,如果0就变1

CLR A ;累加器A清0 控制转移类指令计算机运行过程中,有时因为 *** 作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。

控制转移类指令的功能就是根据要求修改程序计数器PC的内容,以改变程序运行方向,实现转移。

控制转移类指令可分为:无条件转移、条件转移、绝对转移、相对转移和调用、返回指令。下面我们将分类介绍。

1.无条件转移指令(4条)

LJMP add16 ;add16→PC,无条件跳转到add16地址,可在64KB范围内

转移,称为长转移指令

AJMP add11 ;add11→PC,无条件转向add11地址,在2KB范围内转移

SJMP rel ;PC+2+rel→PC,相对转移,rel是偏移量,8 位有符号

数,范围-128~127,即可向后跳转128,向前可跳转127

JMP@A+DPTR ;A+DPTR→PC ,属散转指令,无条件转向A与DPTR内容相

加后形成的新地址

例1 执行指令

LJMP 9100H

不管这条指令存放在哪里,执行时将使程序转移到9100H,和AJMP,SJMP指令是有差别的。

例2 程序

2000H MOV R0 , #10H ;10H→PC

2002H SJMP 03H ;PC+2+rel=2002H+2+03H=2007H→PC

┇┇

2006H ┇

2007H ┇

从说明中可见,执行SJMP 03H 指令后,马上跳转到2007H地址执行程序。

2.条件转移指令(8条)

条件转移指令是根据某种特定条件转移的指令。条件满足时转移,条件不满足时则顺序

执行下面的指令。

JZ rel ;A=0转向PC+2+rel→PC,A≠0顺序执行

JNZ rel ;A≠转向PC+2+rel→PC ,A=0顺序执行

CJNE A, direct, rel ;A≠ (direct)转向PC+3+rel→PC且当A>(direct),Cy=0

;当A<(direct),Cy=1

;否则A=(direct),PC+3→PC即顺序执行

CJNE A, #data, rel ;A data P转向PC+3+rel→PC且当A >data,Cy=0

;当A <data,Cy=1,

;A=data,PC+3→PC顺序执行

CJNZ Rn, #data, rel ;Rn≠data转向PC+3+rel→PC

;且当Rn>data,Cy=0,当Rn<data,Cy=1

;Rn=data,PC+3→PC顺序执行

CJNE @Ri,#data, rel ;(Ri) ≠data ,PC+3+rel→PC

;且当(Ri)>data ,Cy=0,当(Ri)<data,Cy=1

;(Ri)=data, PC+3→PC顺序执行

DJNZ Rn, rel ;Rn-1→Rn ,Rn ≠0转向PC+2+rel→PC

;Rn=0,PC+2→PC顺序执行

DJNZ direct, rel ;(direct)-1→(direct),(direct) ≠0转向 PC+2+rel

→PC

;(direct)=0 ,PC+2→PC顺序执行

注意:

1)CJNE类指令借用进位标志Cy作为比较结果的标志位。从指令中可知,目的 *** 作数内容小于原 *** 作数内容Cy置1,反之Cy清0,该类指令多用于分支程序。

2) DJNZ指令执行时Rn或direct先减1,然后再判断Rn或direct内容是否等于0。不为0则转,为0顺序执行。DJNZ用在循环程序中,控制循环次数很方便。

3) JZ和JNZ的 *** 作数只有一个,是对A的内容的进行判断的指令。

例1 以下程序的循环次数是多少,最后(R0)=?

MOV R0 , #0

LL: ┇

DJNZ R0 , LL

分析:由于DJNZ是减1再判断大小的,因为R0=0,所以第一次执行DJNZ R0 , LL后R0=FFH=255,则程序要执行的次数为256次,R0最后的值为0。

解:程序要循环的次数为256次,最后R0=0

3.调用、返回、控 *** 作指令

在程序设计中,常常要把具有一定功能的公用程序编制成子程序。当主程序转至子

程序时用调用指令,而在子程序的最后安排一条返回指令,使执行完子程序后再返回到主程序。

(1) LCALLaddr16;调用入口地址为addr16的子程序

这是一条长调指令,可调用64KB范围内的子程序,因此,可放在程序的任何位置。

指令的执行过程分两步:第一步把断点(当前执行指令的下一条指令地址)压入堆栈。第二步将调用的子程序的入口地址装入PC。即addr16(16位地址)→PC,转向执行子程序。

(2) ACALLaddr11 ;子程序入口地址为addr11的子程序

这是一条短调指令,只能实现2KB范围内的子程序的调用。其指令执行过程与LCALL

指令一样。但是需要注意的是:ACALL中addr11只占用PC的PC.0~PC.10位。

(3) RET ;放在子程序最后,使程序准确返回到主程序断点处

执行过程为:(SP)→PC.8~PC.15断点地址高字节送入PC

SP-1→SP,(SP) →PC.0~PC.7断点低字节送入PC,

这时PC中为主程序断点地址,程序准确返回到调用指令的下一条。

例 设SP=62H,(62H)=07H,(61H)=30H,执行指令RET

结果:SP=60H,(PC)=0730H,CPU从0730H开始执行程序。

(4) RETI ;中断返回指令

该指令用于中断服务程序,使中断程序结束后准确返回到主程序断点处,执行过程同RET,它还能清除优先级状态。

(5) NOP ;空 *** 作

执行该指令时,CPU只进行取指令、译码,而不进行任何 *** 作,故称为控 *** 作。常用于产生一个机器周期延时。位 *** 作指令MCS-51单片机的特色之一是具有很强的位处理功能。位 *** 作指令又称为布尔指令,其功能是对内部RAM中可进行位 *** 作的区域进行位 *** 作。

在进行位 *** 作时,位累加器C即进位标志Cy,位地址是片内RAM字节地址20H~2FH单元中连续的128个位(位地址00H~7FH)和部分功能寄存器。凡SFR中字符等地址能被8整除的特殊功能寄存器都具有可寻址的位地址,其中ACC(位地址E0H~E7H),B(位地址F0H~F7H)和片内RAM中128个位都可作软件标志或存储位变量。

1. 位数据传送类指令(2条)

MOV C , bit ;(bit) →C,寻址位的状态送入C

MOV bit , C ;C→(bit),C的状态送入位地址中

2. 位修正指令(6条)

CLR C;0→C, 清0累加器

CLR bit;0→(bit);清0寻址位

CPL C;/C→C,取反

CPL bit ;(/bit) →(bit),寻址位取反

SETB C ;1→C,C置1

SETB bit ;1→ (bit),寻址位置1

3. 位逻辑运算指令(4条)

ANL C , bit ;C∩(bit) →C,寻址位和C“与”,结果放在C

ANL C , /bit ;C∩(/bit) →C,寻址位的非和C“与”,结果放在C

ORL C , bit ;C∪(bit) →C,寻址位和C“或”,结果放在C

ORL C , /bit ;C∪(bit) →C,寻址位和C的非“或”,结果放在C

4. 位条件转移指令(5条)

JC rel;C=1转向PC+2+rel→PC

C=0顺序执行PC+2→PC

JNC rel ;C=0转向PC+2+rel→PC

C=1顺序执行PC+2→PC

JB bit , rel ;(bit) =1转向PC+3+rel→PC

(bit) =0顺序执行PC+3→PC

JNB bit , rel ;(bit) =0转向PC+3+rel→PC

(bit) =1顺序执行PC+3→PC

JBC bit , rel ;(bit) =1转向PC+3+rel→PC;同时0→(bit)

(bit) =0顺序执行PC+3→PC

注意:JBC与JB指令区别,前者转移后并把寻址位清0,后者只转移不清0寻址位。

例1 设P1为输入口,P3.0作输出线,执行下列指令:

MOV C , P1.0 ;(P1.0) →C

ANL C , P1.1 ;(C)∩(P1.1) →C

ANL C , /P1.32 ;(C)∩(/P1.2) →C

MOV P3.0 , C;C→P3.0

结果是:P3.0=(P1.0) ∩(P1.1) ∩(/P1.2)

例2 用位 *** 作指令编程计算逻辑方程

P1.5=ACC.0 ∩ (B.0∪P1.2) ∪P1.3

解: MOV C , B.0 ;B.0→C

ORL C , P1.2 ;C∪P1.2→C 即B.0+P1.2→C

ANL C , ACC.0 ;C∩ACC.0→C 即ACC.0∩(B.0∪P1.2)→C

ORL C , P1.3 ;C∪P1.3→C 即 ACC.0∩(B.0∪P1.2)∪P1.3→C

MOV P1.5 , C ;C→P1.5

public什么情况下都可以用,使用的话该变量将对整个工程均可用,但会破坏封装性(其实也无所谓啦),一般在Module模块中定义

Public MyArr&(1 to 100)'定义一个下标1到100,生存期为整个工程的Long型数组

尊敬的华硕用户,您好!1、您可以进入华硕的简体中文官网服务与支持页面:.cn/support/2、然后在搜索栏中输入您机器的型号,以X401A为例,点击放大镜图案,搜索:3、搜索结果出现后,看到的是常见问题,然后点击左边的驱动程序和工具软件:4、切换到驱动程序和工具软件后,点击机器目前对应的 *** 作系统:5、出现驱动下载列表,这时您点击需要下载的驱动,高级电源管理驱动就是ATKACPI驱动和ATK热键工具程序,点击公用程序后,然后点击下载符号,就可以下载了:6、如果您有其他驱动下载安装方面的问题,请您通过百度知道向华硕企业平台提问,谢谢!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11524396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存