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

3.3.4 位操作指令

 

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

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

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

(1)直接用位地址表示。例如D4H、2FH。

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

(3)寄存器的位定义名称。例如TR0、OV。

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

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

1.位变量传送指令

MOVC,bit          ;C←(bit)

MOVbit,C          ;bit←C

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

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

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

MOV  P1.7,C         ;P1.7←C

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

MOV C,00H           ;C←(00H)

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

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

解:为了实现56H和78H位地址单元中内容变换,可以采用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位

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

2.位状态修改指令

CLR  C              ;C←0,对C清零

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

CPL  C              ;C←C,对C取反

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

SETB  C             ;C←1,对C置位

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

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

3.位变量逻辑操作指令

ANL C,bit           ;C←C(bit)

ANL C,/bit          ;C←C()

ORL C,bit           ;C←C(bit)

ORL C,/bit          ;C←C()

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

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

MOV C,20H

ANL C,ACC.7

4.位转移指令

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

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

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

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

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

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

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

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

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

设P1.0=A,P1.1=B,P1.2=C,P1.3=D,P1.4=Z,程序如下。

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

ANL C,P1.1          ;和B相与

CPL C               ;将A与B取反

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

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

ANL C,P1.3          ;和D相与

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

ORL C,00H           ;再和将A与B取反的值相或

CPL C               ;结果取反

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