极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17448|回复: 8

求助 arduino mega2560 能不能一次操作8个IO口

[复制链接]
发表于 2013-8-28 11:46:38 | 显示全部楼层 |阅读模式
mega有很多个口 然后我现在需要一次操作连续的8个IO口 能不能像51单片机那样 可以把一个字节的8位数据用一条指令给到8个口上?而不用一个位一个位的HIGH、LOW
回复

使用道具 举报

发表于 2013-8-28 12:33:03 | 显示全部楼层
本帖最后由 pz_cloud 于 2013-8-28 12:37 编辑
  1. 自己写了个函数可以实现,把下面这个数组里的编号换成你要操作的io口号,调用IOIO函数就行了,比如IOIO(0x3F);


  2. char port[8]={2,3,4,5,6,7,8,9};

  3. void IOIO(byte input)
  4. {
  5.         char i=8;
  6.         while(i--)
  7.         {
  8.                 if(input&(0x01<<i))
  9.                     digitalWrite(port[i],HIGH);
  10.                 else
  11.                     digitalWrite(port[i],LOW);
  12.         }
  13. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-8-28 12:49:41 | 显示全部楼层
建议看一下《Arduino技术内幕》这本书,里面有关于AVR单片机底层的操作代码详解,估计用得上
回复 支持 反对

使用道具 举报

发表于 2013-8-28 13:08:23 | 显示全部楼层
pz_cloud 发表于 2013-8-28 12:33

但是楼主要求同时操作的不一定是portB或者C或者D这样的啊,因为arduino的io引脚跟avr的port也并不是一一对应的,不能直接用给port赋值的方法,所以只能这样实现了吧。延迟会有一点不过相对于一个一个digitalwrite来说应该不是问题了
回复 支持 反对

使用道具 举报

发表于 2013-8-28 17:11:17 | 显示全部楼层
用一个8位串转并{:soso_e132:}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-28 23:15:21 | 显示全部楼层
pz_cloud 发表于 2013-8-28 13:08
但是楼主要求同时操作的不一定是portB或者C或者D这样的啊,因为arduino的io引脚跟avr的port也并不是一一对 ...

如果是连续的在同一个port里的 例如PORTD 或者PORTH PORTJ  那要怎么做?我可以接线的时候尽量放在同一个port里
PORTH = 0x00?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-28 23:16:36 | 显示全部楼层
FoieDEEEE_仲敬 发表于 2013-8-28 12:49
建议看一下《Arduino技术内幕》这本书,里面有关于AVR单片机底层的操作代码详解,估计用得上

恩恩,我现在正在看,看到第三章AVR那里了 我仔细看一下。谢啦
回复 支持 反对

使用道具 举报

发表于 2013-8-29 12:37:41 | 显示全部楼层
xxfx1118 发表于 2013-8-28 23:15
如果是连续的在同一个port里的 例如PORTD 或者PORTH PORTJ  那要怎么做?我可以接线的时候尽量放在同一个 ...

就是这样。如果不在一组PORT里,确实无法同时操作,但是两次这样的操作间隔也只有2us。
digitalWrite要接近0.7ms,简直是漫漫长夜。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-29 22:02:52 | 显示全部楼层
laji3865689 发表于 2013-8-29 12:37
就是这样。如果不在一组PORT里,确实无法同时操作,但是两次这样的操作间隔也只有2us。
digitalWrite要接 ...

谢谢,谢谢大家。  PORTB |= 0b10000000  ,  bitSet(PORTB, 7)  这些的句子确实比digitalWrite更方便 而且更节省空间
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-6 00:24 , Processed in 0.036716 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表