PCINT

De ArduWiki
Saltar a: navegación, buscar

Descripcion

Existen dos tipos de interrupciones externas:

  • INT, interrupciones de harware externo
  • PCINT, interrupciones Pin Change, que actual a nivel de bancos completos.

Sintaxis

PCICR;
PCMSK0;
PCIFR;
ISP(PCINT0_vect) //D8 a D13
ISP(PCINT1_vect) //A0 a A5
ISP(PCINT2_vect) //D0 a D7

Puertos INT

Arduino UNO y NANO
Pin Port INT
2 PD2 INT0
3 PD3 INT2
Arduino MEGA
Pin Port INT
6 PE4 INT4
7 PE5 INT5
43 PD0 INT0
44 PD1 INT1
45 PD3 INT2
46 PD6 INT3

Puertos PCINT

Arduino UNO y NANO
Pin Port PCINT Pin Port PCINT Pin Port PCINT
2 PD2 PCINT18 8 PB0 PCINT0 A0 PC0 PCINT8
3 PD3 PCINT19 9 PB1 PCINT1 A1 PC1 PCINT9
4 PD4 PCINT20 10 PB2 PCINT2 A2 PC2 PCINT10
5 PD5 PCINT21 11 PB3 PCINT3 A3 PC3 PCINT11
6 PD6 PCINT22 12 PB4 PCINT4 A4 PC4 PCINT12
7 PD7 PCINT23 13 PB5 PCINT5 A5 PC5 PCINT13
Arduino UNO y NANO
Pin Port PCINT Pin Port PCINT Pin Port PCINT
10 PB4 PCINT4 SS PCINT0 PB0 A8 PK0 PCINT16
11 PD7 PCINT5 SCK PCINT1 PB1 A9 PK1 PCINT17
12 PD7 PCINT6 MOSI PCINT2 PB2 A10 PK2 PCINT18
13 PD7 PCINT7 MISO PCINT3 PB3 A11 PK3 PCINT19
14 PD7 PCINT10 - - - A12 PK4 PCINT20
15 PD7 PCINT9 - - - A13 PK5 PCINT21
- - - - - - A14 PK6 PCINT22
- - - - - - A15 PK7 PCINT23

Advertencias

Ejemplo

// Activar PCINT en un PIN
void pciSetup(byte pin){
    *digitalPinToPCMSK(pin) |= bit (digitalPinToPCMSKbit(pin));  //activar pin en PCMSK
    PCIFR  |= bit (digitalPinToPCICRbit(pin));                   //limpiar flag de la interrupcion en PCIFR
    PCICR  |= bit (digitalPinToPCICRbit(pin));                   //activar interrupcion para el grupo en PCICR
}
 
// Definir ISR para cada puerto
ISR(PCINT0_vect) {    
  //gestionar para PCINT para D8 a D13
}
 
ISR(PCINT1_vect){
  //gestionar PCINT para A0 a A5
}  
 
ISR(PCINT2_vect){
  //gestionar PCINT para D0 a D7
}  
 
void setup(){  
   //Activar las PCINT para distintos pins
   pciSetup(7);
   pciSetup(8);
   pciSetup(9);
   pciSetup(A0);
}
 
void loop(){
   //Nada
}

Vea tambien

Referencias externas