★3.3.5 位操作类指令
由于单片机内部有一个位处理机,所以对位地址空间具有比较丰富的位操作指令。这类指令不影响其他标志位,只影响本身的Cy(写作C)。
位操作指令的操作数不是字节,而只是字节中的某一位,每位取值只能是0或1。位操作指令有位传送、位置位和位清0操作,以及位逻辑运算和位控制转移指令。
为便于阅读程序和设计程序,位寻址的表示方法有4种。
1)直接使用位地址。例如:
MOV C,7FH;(C)←(7FH)
其中,7FH是位地址,它表示片内RAM区中2FH的最高位D7。
2)采用字节某位的表示法。此时可将上例改写为
MOV C,2FH.7;(C)←2FH.7
3)可位寻址的特殊功能寄存器名+位数的命名法。例如,累加器A中最高位可以表示为ACC.7,可以把ACC.7位状态送到进位标志位C的指令是
MOV C,ACC.7;(C)←ACC.7
4)经伪指令定义后的字符名称。例如:
BUSY EAU P3.2;BUSY=P3.2
JB BUSY,$
位操作指令、功能操作、机器代码和执行机器周期数见表3-26。
表3-26 位操作指令、功能操作、机器代码和执行机器周期数
1 数据位传送指令(2条)
比较:
MOV A,2FH;A←(2FH)
MOV C,2FH;Cy←(2FH)
不难看出,第一条指令中的2FH是直接地址direct,第二条指令中的2FH属于位地址bit。
指令中必须有一个位操作数是布尔累加器C,另一个才可以是直接可寻址的位,注意其中一个操作数必须是进位标志。
例如:
MOV P1.5,C;把C中的值送到P1.5口线输出
2 位变量修改指令(4条)
对Cy和位地址bit指定的位单元进行清0。
CLR C;Cy←0
CLR bit;bit←0
对Cy和位地址bit指定的位单元进行置1。
SETB C;Cy←1
SETB bit;bit←1
例如:
CLR C;将Cy位清0
CPL P1.1;P1.1取反
3 位逻辑运算指令(6条)
这组指令的第一操作数必须是C,两位逻辑运算的结果送到C中,式中的斜杠表示位取反,但并不影响操作数本身的值。
指令中的/bit,不影响直接寻址位求反前原来的状态。
逻辑“或”指令的功能是把位地址bit中的内容或bit中的内容取反值与Cy中的内容进行逻辑“与”运算和逻辑“或”运算,结果送回Cy中。
位变量逻辑“非”指令用来实现对位清0,取反,置1,不影响其他标志位。
4 位条件转移类指令(5条)
(1)Cy条件转移指令
JC rel;若(Cy)=1,则PC←(PC)+2+rel,若(Cy)=0,则PC←(PC)+2
JNC rel;若(Cy)=0,则PC←(PC)+2+rel,若(Cy)=1,则PC←(PC)+2
第一条指令的功能是当(Cy)等于1时,转移;第二条指令的功能是当(Cy)等于0时,转移;不满足转移条件时,顺序执行程序。
(2)bit条件转移指令
JB bit,rel;若(bit)=1,则PC←(PC)+3+rel;若(bit)=0,则PC←(PC)+3
JNB bit,rel;若(bit)=0,则PC←(PC)+3+rel;若(bit)=1,则PC←(PC)+3
JBC bit,rel;若(bit)=1,则PC←(PC)+3+rel,且bit←0;若(bit)=0,则PC←(PC)+3
第一条指令的功能是当(bit)=1时,转移;第二条指令的功能是当(bit)=0时,转移;第三条指令的功能与第一条相似,也是当(bit)=1时,转移,但转移时具有将(bit)清0的功能;不满足转移条件时,顺序执行程序。
例3-28:判断正负数要求从P1口输入一个数,若为正数将其存入20H单元,为负数则取反后存20H单元。
解:分析怎样判断数的正负?
D7=1 负数,D7=0 正数
程序如下:
ORG 0030H
MAIN:MOV P1,#0FFH;
MOV A,P1
JNB ACC.7,STOR;正数
CPL A
STOR:MOV 20H,A;
SJMP $
小结:
1)MCS-51系列单片机的指令系统共有111条指令,7种寻址方式,共分为五大类:数据传送类指令、算术运算类指令、逻辑运算类指令、控制转移类指令、位操作类指令。
2)指令按用户规定排列形成程序,该程序顺序被存放在ROM中。
3)每条指令机器码都占若干个字节,有长有短,一旦存好就有确切的地址号。
4)PC程序计数器实时指向该地址号,使CPU按用户所编程序顺序执行指令。
5)如遇跳转,也就是把新的目的地址送给PC。