krstc 发表于 2014-10-23 10:00:32

求助坛友,如何用DEFINE将零散的IO组合为一组P0这种。谢谢

求教各位坛友,目前有一个小点阵板,因为EDA布线的需要,把IO口打散了,没法用P0=0x45这种形式直接赋值了。
以前看过一个用DEFINE方法把零散io组合回一个整P0格式的,搜了半天也没有搜到。
麻烦坛友帮忙,多谢多谢!

kenshudemayi 发表于 2014-10-23 10:05:27

我一般就写一个函数,然后把传送来的值一位一位的输出,哈哈 我只用到数码管

krstc 发表于 2014-10-23 11:06:52

自己顶顶。。。。不想用函数的方式。。。

didadida 发表于 2014-10-23 11:10:53

你现在剩什么IO资源也没说清楚啊,我倒是简单写过一个32的,不过没人关注

krstc 发表于 2014-10-23 11:13:08

didadida 发表于 2014-10-23 11:10
你现在剩什么IO资源也没说清楚啊,我倒是简单写过一个32的,不过没人关注

不用管剩余的啊,我就是想把零散的8个io通过define的方法组合成一个PX的形式。谢谢啦。

fengyuzhails 发表于 2014-10-23 11:29:05

问题解决了吗

krstc 发表于 2014-10-23 11:30:33

fengyuzhails 发表于 2014-10-23 11:29
问题解决了吗

木有捏。。。。

myin4 发表于 2014-10-23 11:36:17

你就是用define到最后也是要一堆移位操作,相比直接用函数真能省下几个始终周期?

didadida 发表于 2014-10-23 11:36:21

本帖最后由 didadida 于 2014-10-23 11:40 编辑

假设 P0 剩余 P0.0 P0.3,P1 剩余 P1.1 P1.3 P 1.5,P2 剩余 P2.2 P2.3 P2.6

(顺序MSB->LSB:P0.3 P0.0 P1.5 P1.3 P1.1 P2.6 P2.3 P2.2)
#define PX(val)P2 &= ~(1<<2 | 1<<3 | 1<<6); P2 |= (val&0x01)<<2 | (val&0x02)<<3 | (val&0x04)<<6;\
P1 &= ~(1<<1 | 1<<3 | 1<<5); P1 |= (val&0x08)<<1 | (val&0x10)<<3 | (val&0x20)<<5;\
P0 &= ~(1<<0 | 1<<3); P0 |= (val&0x40)<<0 | (val&0x80)<<3;

以上代码未经测试,请自行调整。

myxiaonia 发表于 2014-11-11 10:07:01

51可以用位操作,肯定是多个组合的没办法。。。

jyrpxj 发表于 2014-11-11 11:33:46

笨办法。一个引脚一个引脚地操作吧。

356053261 发表于 2014-11-11 13:04:29

不想用函数,就用9楼的,呵呵

sywh 发表于 2014-11-11 14:09:18

九楼好方法,很多例程都是这么写的。

zerttao 发表于 2014-11-11 14:35:22

搜索关键词 位域

dxzky 发表于 2014-11-12 18:43:00

9楼方法感觉不错~

老马识途 发表于 2014-11-12 20:11:22

不错,理解应用
页: [1]
查看完整版本: 求助坛友,如何用DEFINE将零散的IO组合为一组P0这种。谢谢