- 位传送指令
MOV C , BIT
MOV BIT , C
这组指令的功能是实现位累加器( CY )和其它位地址之间的数据传递。
例: MOV P1.0,CY ; 将 CY 中的状态送到 P1.0 引脚上去(如果是做算术运算,我们就可以通过观察知道现在 CY 是多少啦)。
MOV P1.0,CY ; 将 P1.0 的状态送给 CY 。
- 位修正指令
- 位清 0 指令
CLR C ; 使 CY=0
CLR bit ; 使指令的位地址等于 0 。例: CLR P1.0 ; 即使 P1.0 变为 0
- 位置 1 指令
SETB C ; 使 CY=1
SETB bit ; 使指定的位地址等于 1 。例: SETB P1.0 ; 使 P.0 变为 1
- 位取反指令
CPL C ; 使 CY 等于原来的相反的值,由 1 变为 0 ,由 0 变为 1 。
CPL bit ; 使指定的位的值等于原来相反的值,由 0 变为 1 ,由 1 变为 0 。
例: CPL P1.0
以我们做过的实验为例,如果原来灯是亮的,则执行本指令后灯灭,反之原来灯是灭的,执行本指令后灯亮。
- 位逻辑运算指令
- 位与指令
ANL C,bit ;CY 与指定的位地址的值相与,结果送回 CY
ANL C,/bit ; 先将指定的位地址中的值取出后取反,再和 CY 相与,结果送回 CY ,但注意,指定的位地址中的值本身并不发生变化。
例: ANL C,/P1.0
设执行本指令前, CY=1 , P1.0 等于 1 (灯灭),则执行完本指令后 CY=0 ,而 P1.0 也是等于 1 。
可用下列程序验证:
ORG 0000H
AJMP START
ORG 30H
START : MOV SP , #5FH
MOV P1 , #0FFH
SETB C
ANL C , /P1.0
MOV P1.1,C ; 将做完的结果送 P1.1, 结果应当是 P1.1 上的灯亮,而 P1.0 上的灯还是不亮。
- 位或指令
ORL C,bit
ORL C,/bit
这个的功能大家自行分析吧,然后对照上面的例程,编一个验证程序,看看你相得对吗?
- 位条件转移指令
- 判 CY 转移指令
JC rel
JNC rel
第一条指令的功能是如果 CY 等于 1 就转移,如果不等于 1 就顺序执行。那么转移到什么地方去呢?我们可以这样理解: JC 标号,如果等于 1 就转到标号处执行。这条指令我们在上节课中已讲到,不再重复。
第二条指令则和第一条指令相反,即如果 CY=0 就转移,不等于 0 就顺序执行,当然,我们也同样理解: JNC 标号