2011-11-19 54 views
0

我想配置兩個AVR蝶形板,使得PORT D是第一個輸出端口,此PORT D的兩個引腳連接到第二個AVR的端口B的引腳B.4和B.5蝴蝶板。我也想在這些端口B引腳上啓用上拉電阻。這個配置對於​​第二個AVR是否正確?有什麼我失蹤了嗎?將AVR ATMega 169中的PINB.4和PINB.5配置爲輸入引腳並啓用上拉功能?

//Init port pins 
DDRB = 0x00; 
    PORTB |= 0X30; 

//Enable pin change interrupt on PORTB 
PCMSK1 = 0X30; 
EIFR = 0XC0; 
EIMSK = 0XC0; 

SIGNAL(SIG_PIN_CHANGE1) - 管腳改變中斷PIN B.4 {..} SIGNAL(SIG_PIN_CHANGE2)的 - 針變化中斷PIN B.5的 {.....}

回答

1

您已經正確設置了PORT B,但稍微改善您的編碼約定並沒有什麼壞處。

DDRB&= ~(1<<PB0)|(1<<PB1); 
PORTB|= (1<<PB0)|(1<<PB1); 

除非我很想知道你想完成什麼,我不認爲你的中斷配置正確。

PB4PB5分別對應於PCINT12PCINT13

由於兩者都對應於引腳變化中斷使能1,所以您只需要啓用該引腳。

EIMSK = (1<<PCIE1); 

你實際上並不需要設置EIFR,除非你試圖手動觸發中斷。只要發生引腳變化,該寄存器就會自動標記。

PCMSK1要設置PCINT13PCINT12

PCMSK1 |= (1<<PCINT12)|(1<<PCINT13); 

這能相應的引腳中斷。

信號也被折舊。 #include avr/interrupt.h並使用ISR。

ISR(PCINT1_vect){} 

這兩個引腳的變化將由此向量處理。

希望這可以清理一些東西。