首页 理论教育 单片机逻辑运算指令详解

单片机逻辑运算指令详解

时间:2023-11-16 理论教育 版权反馈
【摘要】:逻辑运算类指令的功能是进行与、或、非、异或逻辑运算和对数据进行清0、移位。例如:上面的第1条指令是将数据31H送到累加器A中,第2条指令是将数据12H送到寄存器R3中,第3条指令是将A和R3中的数据按位进行相或运算。表3-21 逻辑非指令下面以一个程序段为例来说明逻辑非指令的功能。逻辑异或指令有6条,各条指令的形式和功能见表3-22。

单片机逻辑运算指令详解

逻辑运算类指令的功能是进行与、或、非、异或逻辑运算和对数据进行清0、移位。它包括逻辑与、逻辑或、逻辑非、逻辑异或、清0和移位指令。

1.逻辑与指令

逻辑与指令的操作码助记符是“ANL”。

指令格式:ANL操作数1,操作数2

指令的功能是将操作数1与操作数2按位进行相与运算,结果保存在操作数1中。

逻辑与指令有6条,各条指令的形式和功能见表3-19。

表3-19 逻辑与指令

978-7-111-43252-4-Chapter03-36.jpg

(续)

978-7-111-43252-4-Chapter03-37.jpg

下面以一个程序段为例来说明逻辑与指令的功能。例如:

978-7-111-43252-4-Chapter03-38.jpg

上面的第1条指令是将数据31H(00110001)送到累加器A中,第2条指令是将数据12H(00010010)送到寄存器R3中,第3条指令是将A和R3中的数据进行按位相与(00110001∧00010010)运算。运算过程如下:

978-7-111-43252-4-Chapter03-39.jpg

运算结果为00010000(10H),将结果保存在A中。

2.逻辑或指令

逻辑或指令的操作码助记符是“ORL”。

指令格式:ORL操作数1,操作数2

指令的功能是将操作数1与操作数2按位进行相或运算,结果保存在操作数1中。

逻辑或指令有6条,各条指令的形式和功能见表3-20。

表3-20 逻辑或指令

978-7-111-43252-4-Chapter03-40.jpg

下面以一个程序段为例来说明逻辑或指令的功能。例如:

978-7-111-43252-4-Chapter03-41.jpg

上面的第1条指令是将数据31H(00110001)送到累加器A中,第2条指令是将数据12H(00010010)送到寄存器R3中,第3条指令是将A和R3中的数据按位进行相或(00110001∨00010010)运算。运算过程如下:

978-7-111-43252-4-Chapter03-42.jpg

运算结果为00110011(33H),将结果保存在A中。

3.逻辑非指令

逻辑非指令的操作码助记符是“CPL”。

逻辑非指令的形式和功能见表3-21。

表3-21 逻辑非指令

978-7-111-43252-4-Chapter03-43.jpg

下面以一个程序段为例来说明逻辑非指令的功能。例如:

MOV A,#35H

CPL A

上面的第1条指令是将数据35H(00110101)送到累加器A中,第2条指令是将的数据35H按位取反,得到的结果CAH(11001010)仍保存在A中。

4.逻辑异或指令

逻辑异或指令的操作码助记符是“XRL”。

指令格式:XRL操作数1,操作数2(www.xing528.com)

指令的功能是将操作数1与操作数2按位进行异或运算,结果保存在操作数1中。在两位数进行异或运算时,若两数相异(即两位数不同)结果为“1”,相同则为“0”。

逻辑异或指令有6条,各条指令的形式和功能见表3-22。

表3-22 逻辑异或指令

978-7-111-43252-4-Chapter03-44.jpg

下面以一个程序段为例来说明逻辑异或指令的功能。例如:

978-7-111-43252-4-Chapter03-45.jpg

上面的第1条指令是将数据31H(00110001)送到累加器A中,第2条指令是将数据12H(00010010)送到寄存器R3中,第3条指令是将A和R3中的数据按位进行异或运算(00110001⊕00010010)。运算过程如下:

978-7-111-43252-4-Chapter03-46.jpg

运算结果为00100011(23H),将结果保存在A中。

【例3-6】 图3-6所示为单片机系统硬件图,把8个LED分成两组(高4位与低4位),实现两组交互闪烁。

解答:设计要点如下

1)若LED亮,则P1口输出0,因此刚开始时输出00001111B(化成十六进制为0FH),高4位亮,低4位不亮。

2)若实现两组LED(高4位和低4位)交替闪烁只需要使P1交替输出00001111(0FH)和11110000(F0H),可以看出两个数刚好相反。

3)在交替之中,需要加入一段延时,因为单片机运行速度很快,如不加延时人眼会分辨不出。

流程图与程序设计如下:

978-7-111-43252-4-Chapter03-47.jpg

978-7-111-43252-4-Chapter03-48.jpg

978-7-111-43252-4-Chapter03-49.jpg

小提示

请思考后,用多种方式实现将A的内容取反。

5.清0指令

清0指令的操作码助记符是“CLR”。清0指令的形式和功能见表3-23。

表3-23 清0指令

978-7-111-43252-4-Chapter03-50.jpg

下面以一个程序段为例来说明清0指令的功能。例如:

978-7-111-43252-4-Chapter03-51.jpg

上面的第1条指令是将数据35H(00110101)送到累加器A中,第2条指令是将A中的内容清0,A中清0的结果是00H(00000000)。

6.移位指令

移位指令又分不带进位的左环移指令、带进位的左环移指令、不带进位的右环移指令和带进位的右环移指令。各条指令的形式和功能见表3-24。

表3-24 移位指令

978-7-111-43252-4-Chapter03-52.jpg

(续)

978-7-111-43252-4-Chapter03-53.jpg

下面以一个程序段为例来说明移位指令的功能。例如:

978-7-111-43252-4-Chapter03-54.jpg

上面的第1条指令是将数据12H(00010010)送到累加器A中;第2条指令是将A中的数据00010010(12H)左移上位,数据变为00100100(24H);第3条指令是将A中的数据00100100(24H)再左移一位,数据变为01001000(48H)。

可以看出,数据每左移一位,相当于将累加器A中的数据进行了“×2”运算(如数据12H左移一位变为24H,数据24H左移一位就变为48H)。同样在右移(RR A)时,A中的数据每移一位,就相当于进行了“÷2”运算

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈