求助 arduino mega2560 能不能一次操作8个IO口
mega有很多个口 然后我现在需要一次操作连续的8个IO口 能不能像51单片机那样 可以把一个字节的8位数据用一条指令给到8个口上?而不用一个位一个位的HIGH、LOW 本帖最后由 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);
}
} 建议看一下《Arduino技术内幕》这本书,里面有关于AVR单片机底层的操作代码详解,估计用得上 pz_cloud 发表于 2013-8-28 12:33 static/image/common/back.gif
但是楼主要求同时操作的不一定是portB或者C或者D这样的啊,因为arduino的io引脚跟avr的port也并不是一一对应的,不能直接用给port赋值的方法,所以只能这样实现了吧。延迟会有一点不过相对于一个一个digitalwrite来说应该不是问题了 用一个8位串转并{:soso_e132:} 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? FoieDEEEE_仲敬 发表于 2013-8-28 12:49 static/image/common/back.gif
建议看一下《Arduino技术内幕》这本书,里面有关于AVR单片机底层的操作代码详解,估计用得上
恩恩,我现在正在看,看到第三章AVR那里了 我仔细看一下。谢啦 xxfx1118 发表于 2013-8-28 23:15 static/image/common/back.gif
如果是连续的在同一个port里的 例如PORTD 或者PORTH PORTJ那要怎么做?我可以接线的时候尽量放在同一个 ...
就是这样。如果不在一组PORT里,确实无法同时操作,但是两次这样的操作间隔也只有2us。
digitalWrite要接近0.7ms,简直是漫漫长夜。 laji3865689 发表于 2013-8-29 12:37 static/image/common/back.gif
就是这样。如果不在一组PORT里,确实无法同时操作,但是两次这样的操作间隔也只有2us。
digitalWrite要接 ...
谢谢,谢谢大家。PORTB |= 0b10000000,bitSet(PORTB, 7)这些的句子确实比digitalWrite更方便 而且更节省空间
页:
[1]