MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集。在进行位处理时,CY(便是咱们前面讲的进位位)称“位累加器”。有自已的位RAM,也便是咱们刚讲的内部RAM的20H-2FH这16个字节单元即128个位单元,还有自已的位I/O空间(即P0.0…..P0.7,P1.0…….P1.7,P2.0……..P2.7,P3.0……..P3.7)。当然在物理实体上它们与本来的以字节寻址用的RAM,及端口是完全相同的,或者说这些RAM及端口都能有两种运用方法。
(1)位传送指令
MOV C,BIT
MOV BIT,C
这组指令的功用是完成位累加器(CY)和其它位地址之间的数据传递。
例:MOV P1.0,CY ;将CY中的状况送到P1.0管脚上去(假如是做算术运算,咱们就能经过调查知道现在CY是多少啦)。
MOV P1.0,CY ;将P1.0的状况送给CY。
(2)位批改指令
位清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
以咱们做过的试验为例,假如本来灯是亮的,则履行本指令后灯灭,反之本来灯是灭的,履行本指令后灯亮。
(3)位逻辑运算指令
位与指令
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
这个的功用咱们自行剖析吧,然后对照上面的例程,编一个验证程序,看看你相得对吗?
(4)位条件搬运指令
判CY搬运指令
JC rel
JNC rel
第一条指令的功用是假如CY等于1就搬运,假如不等于1就次第履行。那么搬运到什么地方去呢?咱们能这样了解:JC 标号,假如等于1就转到标号处履行。这条指令咱们在上节课中已讲到,不再重复。
第二条指令则和第一条指令相反,即假如CY=0就搬运,不等于0就次第履行,当然,咱们也相同了解: JNC 标号
判位变量搬运指令
JB bit,rel
JNB bit,rel
第一条指令是假如指定的bit位中的值是1,则搬运,否则次第履行。相同,咱们能这样了解这条指令:JB bit,标号
第二条指令请咱们先自行剖析
下面咱们举个例程阐明:
ORG 0000H
LJMP START
ORG 30H
START:MOV SP,#5FH
MOV P1,#0FFH
MOV P3,#0FFH
L1: JNB P3.2,L2 ;P3.2上接有一只按钮,它按下时,P3.2=0
JNB P3.3,L3 ;P3.3上接有一只按钮,它按下时,P3.3=0
LJM P L1
L2: MOV P1,#00H
LJMP L1
L3: MOV P1,#0FFH
LJMP L1
END
把上面的例程写入片子,看看有什么现象………
按下接在P3.2上的按钮,P1口的灯全亮了,松开或再按,灯并不平息,然后按下接在P3.3上的按钮,灯就全灭了。这像什么?这不便是工业现场常常用到的“发动”、“中止”的功用吗?
怎样做到的呢?一开始,将0FFH送入P3口,这样,P3的一切引线都处于高电平,然后履行L1,假如P3.2是高电平(键没有按下),则次第履行JNB P3.3,L3句子,相同,假如P3.3是高电平(键没有按下),则次第履行LJMP L1句子。这样就不停地检测P3.2、P3.3,假如有一次P3.2上的按钮按下去了,则搬运到L2,履行MOV P1,#00H,使灯全亮,然后又转去L1,再次循环,直到检测到P3.3为0,则转L3,履行MOV P1,#0FFH,例灯全灭,再转去L1,如此循环不已。