您的位置: 网站首页 > 电子与嵌入式 > 单片机原理与应用 > 第3章 MCS-51单片机指令系统 > 【3.3.4 位操作指令】

3.3.4 位操作指令

 

MCS-51单片机中有丰富的位操作指令和优异的布尔处理能力。MCS-51单片机由硬件及软件构成了完整的按位操作的布尔处理器,又称位处理器,它与一般微处理器的主要区别在于:CPU不是以字节或字为单位,而是以位作为处理对象进行操作的。进行位操作时,以进位标志C作为位累加器,具有一套位处理的指令集,包括位数据传送、位逻辑运算和位条件控制转移等指令。MCS-51中共有17条位操作指令,可进行位传送、清零、置l、求反、逻辑与、逻辑或以及异或等操作。

MCS-51单片机片内数据存储器中,有两部分按位寻址的存储空间:一部分是片内RAM20H2FH16个字节单元128位,其位地址为00H7FH;另一部分是特殊功能寄存器区,其字节地址能被8整除的专用寄存器也具有位地址,其位地址为80HF7H,中间有极少数位未被定义,不能按位寻址。

在汇编语言中,位地址的表达方式有下述几种。

1)直接用位地址表示。例如D4H2FH

2)用点操作符号表示。点操作符(即.的前面部分是字节地址或是可位寻址的专用寄存器;其后面部分的数字表示它们的位。例如ACC.4PSW.7

3)寄存器的位定义名称。例如TR0OV

4用户定义的位符号地址。例如,RED BIT P1.4,即将P1.4定义为位符号地址RED。定义后,可在指令中用RED代替P1.4

下面对位操作指令分类予以介绍。

1.位变量传送指令

MOVC,bit          ;C(bit)

MOVbit,C          ;bitC

说明:第一条指令的功能是将位地址中的1位二进制数送入位累加器C中,第二条指令的功能则是将位累加器C的内容送到指定的位地址。位数据传送指令必须通过位累加器C来实现,其中一个操作数必须是位累加器C,另一个操作数可以是任何直接寻址的位。

例如,已知片内数据存储器中(20H=80HP1口输出的数据为42H,执行下列程序后操作结果为:C=1P1.7=1P1口输出数据为C2H

MOV  C,07H          ;C(20H).7

MOV  P1.7,C         ;P1.7C

又如:将位单元00H的内容传送到位单元20H中。

MOV C,00H           ;C(00H)

MOV 20H,C           ;00H的内容送20H单元

【例3-12试编程把56H位中的内容和78H位中的内容相交换。

解:为了实现56H78H位地址单元中内容变换,可以采用00H位作为暂存位,相应程序如下。

MOV C,56H           ;C(56H)

MOV 00H,C           ;暂存于00H

MOV C,78H           ;C(78H)

MOV 56H,C           ;存入56H

MOV C,00H           ;56H位的原内容送C

MOV 78H,C           ;存入78H

在程序中,00H56H78H均为位地址。其中,00H是指20H单元的最低位,56H是指2AH单元的次高位,78H2FH单元的最低位。

2.位状态修改指令

CLR  C              ;C0,对C清零

CLR bit           ;(bit) 0,对直接位地址中的内容清零

CPL  C              ;CC,对C取反

CPL bit                 ;(bit) ( ),对直接位地址中的内容取反

SETB  C             ;C1,对C置位

SETB bit            ;(bit) 1,对直接位地址中的内容置1

上述6条指令的功能是对位累加器C或直接寻址的位分别进行清零、取反、置1,操作不影响其他标志位。

3.位变量逻辑操作指令

ANL C,bit           ;CC(bit)

ANL C,/bit          ;CC()

ORL C,bit           ;CC(bit)

ORL C,/bit          ;CC()

上述4条指令的功能把位累加器C的内容及直接指定的位地址的内容分别进行逻辑与、逻辑或,结果存于C中。指令中的“/”表示对该位地址内容取反后(不改变位地址内的原内容)再参与运算。

例如,设位地址(20H=1ACC.7=1,执行下列指令后操作结果为:C=1

MOV C,20H

ANL C,ACC.7

4.位转移指令

JC  rel     ;C=1,则转移(PCPC+2+rel);否则程序顺序执行

JNC rel     ;C=0,则转移(PCPC+2+rel);否则程序顺序执行

JB bit,rel ;若(bit=l,则转移(PCPC+3+rel);否则程序顺序执行

JNB bit,rel;若(bit=0,则转移(PCPC+3+rel);否则程序顺序执行

JBC bit,rel;若(bit=l,则转移(PCPC+3+rel);若bit=0;则程序顺序执行

上述5条指令均为相对转移指令,前两条指令为双字节指令,后3条为三字节指令。它们的功能是:分别检测指定位是1还是0,若条件符合,则CPU转向指定的目标地址去执行程序;否则,顺序执行下条指令。前4条指令不影响位地址内容,第5条指令不论条件是否满足,将使指定位地址内容清0

【例3-13用单片机来实现图3-12所示的电路的逻辑功能。

3-12  用位处理实现的逻辑电路

解:为了使逻辑问题适合用单片机来处理,先选择一些端口位作为输入逻辑变量和输出逻辑变量。

P1.0=AP1.1=BP1.2=CP1.3=DP1.4=Z,程序如下。

MOV C,P1.0          ;读入变量A

ANL C,P1.1          ;B相与

CPL C               ;AB取反

MOV 00H,C           ;保存中间运算结果到00H

MOV C,P1.2          ;读入变量C

ANL C,P1.3          ;D相与

ANL C,/P1.3         ;再和D的非相与

ORL C,00H           ;再和将AB取反的值相或

CPL C               ;结果取反

MOV P1.4,C          ;输出运算结果