五、位操作类指令

五、位操作类指令

MCS-51单片机硬件结构中有一个布尔处理器,因此设有一个专门处理布尔变量的指令子集(又称位操作指令子集)。这类指令包括位传送、位逻辑运算、控制程序转移等指令。在布尔处理器中,位的传送和位逻辑运算是通过CY标志位(程序状态字PSW.7)来完成的,此时,CY的作用相当于一般CPU中的累加器,在位操作指令中用“C”表示。

位操作中的位地址可以是片内RAM 20 H~2FH单元中连续的128位和特殊功能寄存器中的可寻址位。

在进行位操作时,汇编语言中位地址的表达方式可有多种方式。

(1)直接位地址方式:如07 H为20H单元的D7位,0D6H为PSW的D6位即AC标志位。

(2)点操作符号方式:如PSW.2,P1.1。

(3)位名称方式:如RS1,RS0。

(4)用户定义名方式:经指令SLC bit F0定义后,允许指令中用SLC代替F0。

位操作指令所用的助记符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB和JBC,共11种。该类指令见表3-7。

(一)位数据传送指令(第1~第2条)

这两条指令主要用于直接寻址位与C之间的数据传送。其中的一个操作数必须是C,另一个可以是任何可直接寻址的位。

【例3-33】把21H单元的第2位赋给端口P2.3位。

MOV C,21H.2  ;CY←21H.2

MOV P2.3,C  ;P2.3←CY

表3-7 MCS-51位操作类指令表

【例3-34】把片内2FH单元的D1位传送至C中,假定2FH.1=1。

MOV C,79H  ;79H为2FH单元D1的位地址

执行结果:CY=l。

(二)位修改指令(第3~第8条)

CLR C   ;C←0

CLR bit  ;bit←0

CPL C  ;进位位取反

CPL bit  ;bit位取反

SETB C  ;C←1

SETB bit  ;bit←1

这组指令的功能是将操作数指出的位清零、取反、置进位标志位和置直接寻址位,指令执行后不影响其他标志。

【例3-35】应用举例

CLR 27H  ;24H.7←0,对位地址为27H的位清0

SETB P2.6  ;P2.6←1,对P2.6位口线置1

(三)位逻辑运算指令(第9~第12条)

ANL C,bit  ;C←C∧bit

这组指令的功能是把进位标志位CY的内容与直接寻址位进行逻辑与、逻辑或的操作,操作的结果送至CY中,式中的斜杠“/”表示对该位取反后再参与运算,并不影响操作数本身的内容。

【例3-36】设P1作输入口,P3.1作输出线,执行下列指令:

MOV C,P1.0

ANL C,P1.2

ANL C,/P1.3

MOV P3.1,C

执行的结果是:P3.1=P1.0∧P1.2∧P1.3。

(四)判位转移指令(第13~第17条)

JC rel  ;C=1时转移:PC←PC+2+rel,否则顺序执行

JNC rel  ;C=0时转移:PC←PC+2+rel,否则顺序执行

JB bit,rel  ;bit=1时转移:PC←PC+3+rel,否则顺序执行

JNB bit,rel  ;bit=0时转移:PC←PC+3+rel,否则顺序执行

JBC bit,rel  ;bit=1时转移:PC←PC+3+rel,bit←0,否则顺序执行

第1、第2条指令是判断进位标志位C是否为“1”或为“0”,当满足此条件时则转移,否则继续执行程序。第3、第4、第5条指令是判断直接寻址位是否为“1”或“0”,满足此条件时转移,否则继续执行程序。最后一条指令当条件满足时转移,同时还将该寻址位清0。

【例3-37】比较内部RAM中60 H和70H中的两个无符号数的大小,将大数存入80H,小数存入90 H单元中,若两数相等使片内RAM的位127置“1”。

以上是MCS-51单片机指令的系统介绍。