五、位操作类指令
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单片机指令的系统介绍。