【问题标题】:Arduino Mega2560 Set interruptsArduino Mega2560 设置中断
【发布时间】:2016-10-19 17:10:26
【问题描述】:

嘿,我正在使用 arduino Mega2560。 我想为中断设置一个触发器。 到引脚 53,52,51,50 和 12,13。

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
}

这对我不起作用,有人可以帮忙吗?

【问题讨论】:

    标签: c++ arduino interrupt-handling


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      相关资源
      最近更新 更多