[STM32F1] 输出一个16进制数到16个引脚上,怎么写执行速度最快

[复制链接]
2271|7
 楼主| magic_yuan 发表于 2014-4-24 10:19 | 显示全部楼层 |阅读模式
各位大侠,
  如题所示。
  将一个16进制的数输出到STM32的16个引脚上(不在同一个系列IO上面,比如有PA,也有PB,PE),怎么写代码最快呢?
  目前我的思路是:引脚使用位带操作。对16进制数实行位与(比如和0X01位与),得到一个新的16进制数。但这个新的16进制数不能直接赋值给引脚,因为数据不匹配,还要判断下。示例代码如下:
   u16 a=0x01;  u16 m=0x98;
  u16 r=0x00;

   r=m&a;//得到m的最后一位数字是0还是1,r的结果为0X00或者0X01.
    if(r==0) PEOUT3=0; else PEOUT3=1;

由于是对16个引脚赋值,所有以上类似的代码书写16次。
  问题:以上代码和思路效率怎么样,更快的执行代码怎么写呢?多谢啊!
mmuuss586 发表于 2014-4-24 11:05 | 显示全部楼层
不好意思,和你想法差不多,没有太好的思路。
airwill 发表于 2014-4-24 22:48 | 显示全部楼层
效率当然不高。
最快当然是放在一个端口上。
或者几个同样端口的位一起写。
290399937 发表于 2014-4-24 23:05 来自手机 | 显示全部楼层
话说!可以不要if吗?PEOUT3=r

评论

这样执行结果不对,数据类型不一致。  发表于 2014-4-25 09:39
 楼主| magic_yuan 发表于 2014-4-25 09:39 | 显示全部楼层
airwill 发表于 2014-4-24 22:48
效率当然不高。
最快当然是放在一个端口上。
或者几个同样端口的位一起写。 ...

比如都放PF口上,即PF0~PF7,这样不是16个口,而是8个口,速度好像和任意的8个口一样的。。。。。
多谢啊!
 楼主| magic_yuan 发表于 2014-4-26 16:56 | 显示全部楼层
顶下,看还有高手指点么
Leeone 发表于 2014-4-27 09:43 来自手机 | 显示全部楼层
位域加联合体就不要与或了,应该快些
foxpro2005 发表于 2014-4-27 10:19 | 显示全部楼层
PEOUT3 = m&a;

PEOUT3 = (m<<15);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:发到3000帖时,生活大概完成了一种转折。

359

主题

2770

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部