2013-02-06 53 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解決方案。

相關問題