★3.3.5  位操作类指令

★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 位操作指令、功能操作、机器代码和执行机器周期数

978-7-111-54295-7-Chapter03-45.jpg

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。