-
Notifications
You must be signed in to change notification settings - Fork 1
/
InterruptTest2.ino
58 lines (51 loc) · 1.7 KB
/
InterruptTest2.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <phys253.h>
#include <avr/interrupt.h>
#include <LiquidCrystal.h>
volatile unsigned int INT_0 = 0;
volatile unsigned int INT_1 = 0;
volatile unsigned int INT_2 = 0;
volatile unsigned int INT_3 = 0;
double rotation;
ISR(INT0_vect) {LCD.clear(); LCD.home(); LCD.print("INT0: "); LCD.print(INT_0++); rotation = (INT_0)/48;
LCD.print(" "); LCD.print(rotation);};
//ISR(INT1_vect) {LCD.clear(); LCD.home(); LCD.print("INT1: "); LCD.print(INT_1++);};
//ISR(INT2_vect) {LCD.clear(); LCD.home(); LCD.print("INT2: "); LCD.print(INT_2++);};
//ISR(INT3_vect) {LCD.clear(); LCD.home(); LCD.print("INT3: "); LCD.print(INT_3++);};
/* Enables an external interrupt pin
INTX: Which interrupt should be configured?
INT0 - will trigger ISR(INT0_vect)
INT1 - will trigger ISR(INT1_vect)
INT2 - will trigger ISR(INT2_vect)
INT3 - will trigger ISR(INT3_vect)
mode: Which pin state should trigger the interrupt?
LOW - trigger whenever pin state is LOW
FALLING - trigger when pin state changes from HIGH to LOW
RISING - trigger when pin state changes from LOW to HIGH
*/
void enableExternalInterrupt(unsigned int INTX, unsigned int mode)
{
if (INTX > 3 || mode > 3 || mode == 1) return;
cli();
/* Allow pin to trigger interrupts */
EIMSK |= (1 << INTX);
/* Clear the interrupt configuration bits */
EICRA = ~(1 << (INTX*2+0));
EICRA = ~(1 << (INTX*2+1));
/* Set new interrupt configuration bits */
EICRA |= mode << (INTX*2);
sei();
}
void disableExternalInterrupt(unsigned int INTX)
{
if (INTX > 3) return;
EIMSK = ~(1 << INTX);
}
void setup()
{
#include <phys253setup.txt>
enableExternalInterrupt(INT0, FALLING);
Serial.begin(9600);
}
void loop()
{
}