xxfx1118 发表于 2013-8-28 11:46:38

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

mega有很多个口 然后我现在需要一次操作连续的8个IO口 能不能像51单片机那样 可以把一个字节的8位数据用一条指令给到8个口上?而不用一个位一个位的HIGH、LOW

pz_cloud 发表于 2013-8-28 12:33:03

本帖最后由 pz_cloud 于 2013-8-28 12:37 编辑

自己写了个函数可以实现,把下面这个数组里的编号换成你要操作的io口号,调用IOIO函数就行了,比如IOIO(0x3F);


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

void IOIO(byte input)
{
        char i=8;
        while(i--)
        {
                if(input&(0x01<<i))
                  digitalWrite(port,HIGH);
                else
                  digitalWrite(port,LOW);
        }
}

FoieDEEEE_仲敬 发表于 2013-8-28 12:49:41

建议看一下《Arduino技术内幕》这本书,里面有关于AVR单片机底层的操作代码详解,估计用得上

pz_cloud 发表于 2013-8-28 13:08:23

pz_cloud 发表于 2013-8-28 12:33 static/image/common/back.gif


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

数字 发表于 2013-8-28 17:11:17

用一个8位串转并{:soso_e132:}

xxfx1118 发表于 2013-8-28 23:15:21

pz_cloud 发表于 2013-8-28 13:08 static/image/common/back.gif
但是楼主要求同时操作的不一定是portB或者C或者D这样的啊,因为arduino的io引脚跟avr的port也并不是一一对 ...

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

xxfx1118 发表于 2013-8-28 23:16:36

FoieDEEEE_仲敬 发表于 2013-8-28 12:49 static/image/common/back.gif
建议看一下《Arduino技术内幕》这本书,里面有关于AVR单片机底层的操作代码详解,估计用得上

恩恩,我现在正在看,看到第三章AVR那里了 我仔细看一下。谢啦

laji3865689 发表于 2013-8-29 12:37:41

xxfx1118 发表于 2013-8-28 23:15 static/image/common/back.gif
如果是连续的在同一个port里的 例如PORTD 或者PORTH PORTJ那要怎么做?我可以接线的时候尽量放在同一个 ...

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

xxfx1118 发表于 2013-8-29 22:02:52

laji3865689 发表于 2013-8-29 12:37 static/image/common/back.gif
就是这样。如果不在一组PORT里,确实无法同时操作,但是两次这样的操作间隔也只有2us。
digitalWrite要接 ...

谢谢,谢谢大家。PORTB |= 0b10000000,bitSet(PORTB, 7)这些的句子确实比digitalWrite更方便 而且更节省空间
页: [1]
查看完整版本: 求助 arduino mega2560 能不能一次操作8个IO口