I/O 接口高低位互换

  在设计硬件电路的时候,稍有马虎,就有可能把 8 位接口的口线序号弄反了。

  比如,本打算用 P3.0~P3.7 连接到 D0~D7 的,
  一不小心,却把 P3.7~P3.0 连接到 D0~D7 了。

  可参考下图:

  图中的上部,是正确的接法。而在设计电路板的时候,却用了下部的接法。

  电路板已经做好,想要更改,是不可能的。这时就需要在软件方面来解决。

  也就是说,在硬件设计时,是把 8 条线,全弄拧了。因此就需要在软件中,用一个函数,把 8 位数,再拧回来。呵呵

  请看下面的函数:

uchar  num(uchar  dat)
{
    uchar  val;
val = ((dat & 0x01) << 7) | ((dat & 0x02) << 5) | ((dat & 0x04) << 3) | ((dat & 0x08) << 1) |
      ((dat & 0x10) >> 1) | ((dat & 0x20) >> 3) | ((dat & 0x40) >> 5) | ((dat & 0x80) >> 7);
    return  val;
}

  在这个函数中,即实现了把 dat 中的
   第 7 位和第 0 位交换、
   第 6 位和第 1 位交换、
   第 5 位和第 2 位交换、
   第 4 位和第 3 位交换。

  使用这个函数,就可以解决接口序号弄反的问题。

  这个函数,来自于:百度知道的题目

  这个函数,不怎么好,比较冗长,执行起来,也不算快。不值得推荐。

  做而论道写了一个函数如下:

char  x_shift (char  x) 
{
    char  i = 0, y = 0;
    for ( ; i < 8; i++)  if (x & (1 << i))  y += (128 >> i);
    reture  y;
}

  在这个函数中,使用了循环结构,所以,生成的程序代码,就会简短得多。

  同时,在函数中,使用了 if else 分支结构,这就会根据具体的问题,越过某一段代码,使得执行速度得以提高。

  上述两个函数,做而论道都做过检验,都是好用的。各位网友可以放心使用。

--本文完--

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值