2013-02-06 26 views
0

因为我在我的设计中找不到整个端口,但我希望我的程序变得统一(当我更换引脚时,我只需要更改此数组),所以我想通过在数组中定义它们来制作虚拟端口。操作时,我想将每个虚拟引脚设置为循环。这就像下面的那些宏代码(当然,我可以分别为端口和引脚定义2个阵列)。在编译之前,阵列(引脚)的长度是可变的(可能是2/3/4个引脚),但这并不重要。虚拟端口在atmega MCU上运行,可能吗?

unsigned char bitorder[]={PORTC,6,PORTD,2}; 
    foreach i,j in (bitorder){ 
     asm SBI i,j 
     // some delay or operation here 
     asm CBI i,j 
    } 

如果有可能?使用函数还是宏?或指针操作指针?

+0

我真的不明白你在这里要做什么。你是否想要设置一个二维数组然后遍历它? C没有任何类型的功能。 – Vicky

回答

0

这是可能的,但只有通过采取端口的地址,如下面的代码:

#define PINS_COUNT 2 
volatile uint8_t * ports[PINS_COUNT] = {&PORTB, &PORTD}; 
uint8_t pins[PINS_COUNT] = {1, 2}; 
int i; 
for (i=0; i<PINS_COUNT; i++) { 
    *ports[i] |= pins[i]; // 
    /* do something */ 
    *ports[i] &= ~pins[i]; 
} 

你可以东西端口指针和销到同一阵列,但要记住的ATmega指针是16位宽。我相信在汇编中也有这样做的方法,但由于问题被标记为“C”,我假设您正在寻找一个C解决方案。

相关问题