×
单片机 > 单片机程序设计 > 详情

逻辑运算与51单片机的位操作指令

发布时间:2020-08-27 发布时间:
|

一个单片机逻辑电路题目,要求编一程序实现下面逻辑电路的逻缉功能。

逻辑图:

 

悬赏分:20 | 解决时间:2011-1-2 22:53
;------------------------------------------------------------
最佳答案:

先把逻辑图写成如下的表达式:(用“P1.6\” 代表“P1.6 的非”,其它的也雷同)

    P3.0 = ((P1.0 * P1.1)\ * (P1.4 + P1.5)\) + P1.6\)\

再反复应用摩根定理化简:

    P3.0 = ((P1.0 * P1.1)\ * (P1.4 + P1.5)\)\ * P1.6

    P3.0 = ((P1.0 * P1.1) + (P1.4 + P1.5)) * P1.6

最后写成:

    P3.0 = (P1.0 * P1.1 + P1.4 + P1.5) * P1.6

这就简单多了,四个取反的步骤,都化没了。

等效的逻辑图如下:

 

 用汇编语言和C语言编写的局部程序如下:
====================================
;汇编语言:

    MOV  C,  P1.0
    ANL  C,  P1.1
    ORL  C,  P1.4
    ORL  C,  P1.5
    ANL  C,  P1.6
    MOV  P3.0,  C

SJMP  $

;===================================
//C语言:

sbit  a = P1^0;                //将引脚确定为变量
sbit  b = P1^1;
sbit  c = P1^4;
sbit  d = P1^5;
sbit  e = P1^6;
sbit  f = P3^0;

    f = (a & b | c | d) & e; //一行语句即可

//这个题目,在教材里面,一般是要求使用51单片机的位操作指令来编程的,所以,答题时应该用汇编语言。
//但是,看到多数网友,对汇编比较迟钝,所以,也就把C语言写在这里了。

//==================================

有些网友直接按照逻辑图来编写程序,没有先行逻辑化简,所以编写出来的程序难免笨重。
这里给出的程序,比楼上的几种方法,都简单的多,执行速度也快的多。

回答者: 做而论道
提问者对于答案的评价:非常感谢!
====================================
下面是另外一个关于逻辑化简的题目。

利用布尔代数的公理和定理求 F = (A ? B) ⊙ AB 的最简逻辑函数表达式。
悬赏分:0 | 解决时间:2011-1-2 19:40 
-------------------------------------
最佳答案:

以下用 A\ 代表“A的非”,其它的也雷同。
题目中的?和⊙,分别代表异或和同或,下面把它们用与或非逻辑运算展开并化简。

F = (A ? B) ⊙ AB
  = (A\B + AB\) * AB   +  (A\B + AB\)\ * (AB)\
  = (A\B * AB + AB\ * AB)  +  (A\B + AB\ ) + (AB)
  = ( 0  +  0 )  +  (A\B + AB\ ) + (AB)
  = ( 0  +  0 )  +   A\B + AB\  + AB
  = ( 0  +  0 )  +   A\B + AB + AB\  + AB
  = ( 0  +  0 )  +   A\B + AB + AB\  + AB
  = ( 0  +  0 )  +  (A\ + A)B + (B\ + B)A
  =  B + A




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil(MDK-ARM)系列教程(七)_菜单