2016-10-19 12 views
0

arduino Mega2560を使用しています。 私はtrigerを割り込みに設定したいと思っています。 を53,52,51,50および12,13にピンする。Arduino Mega2560割り込みを設定する

void setup(){ 

PCICR |= (1 << PCIE0); 

    PCMSK0 |= (1 << PCINT0); 
    PCMSK0 |= (1 << PCINT1); 
    PCMSK0 |= (1 << PCINT2); 
    PCMSK0 |= (1 << PCINT3); 
    PCMSK0 |= (1 << PCINT6); 
    PCMSK0 |= (1 << PCINT7); 
} 

ISR(PCINT0_vect){ 
// Code when one of the pins was changed 
} 

これは私のために働いていない誰かが助けてくれますか?

答えて

1

は、テストの結果、それが働いている:

/* 
* Connections: 
* A0 (PF0) -> PCINT0 (PB0/53) 
* A1 (PF1) -> PCINT1 (PB1/52) 
* A2 (PF2) -> PCINT2 (PB2/51) 
* A3 (PF3) -> PCINT3 (PB3/50) 
* A4 (PF4) -> PCINT6 (PB6/12) 
* A5 (PF5) -> PCINT7 (PB7/13) 
*/ 

uint8_t pins[] = {A0,A1,A2,A3,A4,A5}; 

void setup() { 
    Serial.begin(115200); 

    // Make PF0-5 outputs: 
    DDRF = _BV(PF0) | _BV(PF1) | _BV(PF2) | _BV(PF3) | _BV(PF4) | _BV(PF5); 

    PCICR = _BV(PCIE0); 
    PCMSK0 = _BV(PCINT0) | _BV(PCINT1) | _BV(PCINT2) | _BV(PCINT3) | _BV(PCINT6) | _BV(PCINT7); 

    // Arduino sets global interrupts, so we don't have to do it here: 
    // sei(); 
} 

volatile uint8_t data = 0; 
uint8_t   last = 0; 

uint32_t change_ts = 1000; 
uint8_t  out_val = 0; 

void loop() { 

    if (data != last) { 
    Serial.print("Got: "); Serial.println(data, BIN); 
    last = data; 
    } 

    if (change_ts <= millis()) { 
    change_ts += 1000; 
    Serial.print(F("Changed to: ")); Serial.println(++out_val, BIN); 
    PORTF = out_val; 
    } 
} 

ISR(PCINT0_vect) { 
    data = PINB & PCMSK0; // read data and clear unused pins 
} 

あなたはArduinoのフレームワークを使用しない場合、あなたはsei()でグローバル割り込みを有効にする必要があります。 ISRの内部で変数セットが外部から見えない場合は、volatileにする必要があります。

+0

おかげさまで完璧な仲でありがとう! –

関連する問題