Bab 4
Bab 4
BAB IV
INTERUPSI
MIKROKONTROLLER
4.1. PENDAHULUAN
Interupsi adalah suatu kejadian atau peristiwa yang menyebabkan mikrokontroler
berhenti sejenak untuk melayani interupsi tersebut. Program yang dijalankan pada saat
melayani interupsi disebut Interrupt Service Routine.
Pada sistem mikrokontroler yang sedang menjalankan programnya, saat terjadi
interupsi , program akan berhenti sesaat, melayani interupsi
tersebut dengan
menjalankan program yang berada pada alamat yang ditunjuk oleh vektor dari interupsi
yang terjadi hingga selesai dan kembali meneruskan program yang terhenti oleh
interupsi tadi.
Meskipun memerlukan pengertian yang lebih mendalam, pengetahuan mengenai
interupsi sangat membantu mengatasi masalah pemrograman mikroprosesor /
mikrokontroler dalam hal menangani banyak peralatan input/output. Pengetahuan
mengenai interupsi tidak cukup hanya dibahas secara teori saja, diperlukan contoh
program yang konkrit untuk memahami. ATMEGA16 memiliki 21 buah sumber
interupsi. Interupsi tersebut bekerja jika bit I pada Register status atau Status Register
(SREG) dan bit pada masing-masing register bernilai 1.
24
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
SW2
SE
SW1
SW0
ISC11
ISC10
ISC01
ISC00
b.
ISC10
0
1
0
1
Deskripsi
Logika 0 pada pin INT1 menyebabkan interupsi
Perubahan logika pada pin INT1 menyebabkan interupsi
Perubahan kondisi 1 ke 0 pada pin INT1 menyebabkan interupsi
Perubahan kondisi 0 ke 1 pada pin INT1 menyebabkan nterupsi
ISC00
0
1
0
1
Deskripsi
Logika 0 pada pin INT0 menyebabkan interupsi
Perubahan logika pada pin INT0 menyebabkan interupsi
Perubahan kondisi 1 ke 0 pada pin INT0 menyebabkan interupsi
Perubahan kondisi 0 ke 1 pada pin INT0 menyebabkan nterupsi
25
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
INT1
INT0
INT2
Bit 1
Bit 0
26
VCC
VCC
P0
P1
P2
P3
P4
P5
P6
P7
INT2
VCC
R1
RST
VCC
C 1 22pF
C 3 100nF1
SW 2
X1
C 2 22pF
VCC
INT1
VCC
INT0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
L1
U4
P B 0 (X C K /T 0 )
P B 1 (T 1 )
P B 2 (IN T 2 /A IN 0 )
P B 3 (O C 0 /A IN 1 )
P B 4 (S S )
P B 5 (M O S I)
P B 6 [M IS O )
P B 7 [S C K )
RESET
VCC
GND
XTA L2
P
XTA L1
P
P D 0 (R X D )
P D 1 (T X D )
P D 2 (IN T 0 )
P D 3 (IN T 1 )
P D 4 (O C 1 B )
P D 5 (O C 1 A )
P D 6 (IC P )
P
P
P
P
P
P
P
P
A
A
A
A
A
A
A
A
0 (A
1 (A
2 (A
3 (A
4 (A
5 (A
6 (A
7 (A
D C 0)
D C 1)
D C 2)
D C 3)
D C 4)
D C 5)
D C 6)
D C 7)
AREF
AGND
AVCC
C 7 (T O S C 2 )
C 6 (T O S C 1 )
PC5
PC4
PC3
PC2
P C 1 (S D A )
P C 0 (S C L )
P D 7 (O C 2 )
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
2
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
VCC
A TM E G A 16
HEADER 5
1
2
3
4
5
P5
P6
P7
RST
GND
J IS P
27
//-----------------------------------------------------//EKLARASI VARIABEL
//-----------------------------------------------------unsigned char dt=0x01;
//-----------------------------------------------------//DEKLARASI SUB RUTIN
//-----------------------------------------------------void InisialisasiINT0();
//-----------------------------------------------------//PROGRAM UTAMA
//-----------------------------------------------------void main (void)
{
DDRA=0xff; InisialisasiINT0();
#asm ("sei");
while(1)
{
PORTA=dt;
delay_ms(100);
dt=dt<<1;
if (dt==0) {dt=0x01;}
}
}
//-----------------------------------------------------//SUB RUTIN INTERUPSI EXTERNAL0
//-----------------------------------------------------interrupt [EXT_INT0] void ext_int0_isr(void)
{
unsigned char rr=0;
while (rr<5)
{
PORTA=0x0f;
delay_ms(5);
PORTA=0xf0;
delay_ms(5);
++rr;
}
}
//-----------------------------------------------------//SUB RUTIN INISIALISASI INTERUPSI EXTERNAL0
//-----------------------------------------------------void InisialisasiINT0 ()
{
GICR|=0x80;
MCUCR=0x0C;
28
MCUCSR=0x00;
GIFR=0x80;
}
1
2
3
4
5
R 1
R ST
J IS P
VC C
C 1 22pF
P0
P1
P2
P3
P4
P5
P6
P7
P5
P6
P7
R ST
GN D
L1
C 3 100nF 1
SW 2
X1
C 2 22pF
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
U 4
P B 0 (XC K /T 0 )
P A 0 (A D C 0 )
P B 1 (T 1 )
P A 1 (A D C 1 )
P B 2 (IN T 2 /A IN 0 ) P A 2 (A D C 2 )
P B 3 (O C 0 /A IN 1 ) P A 3 (A D C 3 )
P B 4 (S S )
P A 4 (A D C 4 )
P B 5 (M O S I)
P A 5 (A D C 5 )
P B 6 [M IS O )
P A 6 (A D C 6 )
P B 7 [S C K )
P A 7 (A D C 7 )
R ESET
AR EF
VC C
AGN D
GN D
AVC C
XTA L2
P C 7 (T O S C 2 )
XTA L1
P C 6 (T O S C 1 )
P D 0 (R X D )
PC 5
P D 1 (T X D )
PC 4
P D 2 (IN T 0 )
PC 3
P D 3 (IN T 1 )
PC 2
P D 4 (O C 1 B )
P C 1 (S D A )
P D 5 (O C 1 A )
P C 0 (S C L )
P D 6 (IC P )
P D 7 (O C 2 )
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
VC C
ATM EG A16
29
30
P
P
P
R
G
1
2
3
4
5
R 1
J IS P
P0
P1
P2
P3
P4
P5
P6
P7
5
6
7
ST
N D
R ST
VC C
C 1 22pF
C 3 100nF1
SW 2
P
P
P
P
P
P
P
X1
C 2 22pF
D
D
D
D
D
D
D
0
1
2
3
4
5
6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
VC C
L1
U 4
P B 0 (XC K /T 0 )
P A 0 (A D C 0 )
P B 1 (T 1 )
P A 1 (A D C 1 )
P B 2 (IN T 2 /A IN 0 ) P A 2 (A D C 2 )
P B 3 (O C 0 /A IN 1 ) P A 3 (A D C 3 )
P B 4 (S S )
P A 4 (A D C 4 )
P B 5 (M O S I)
P A 5 (A D C 5 )
P B 6 [M IS O )
P A 6 (A D C 6 )
P B 7 [S C K )
P A 7 (A D C 7 )
R ESET
AR EF
VC C
AG N D
G N D
AVC C
XTA L2
P C 7 (T O S C 2 )
XTA L1
P C 6 (T O S C 1 )
P D 0 (R XD )
PC 5
P D 1 (T X D )
PC 4
P D 2 (IN T 0 )
PC 3
P D 3 (IN T 1 )
PC 2
P D 4 (O C 1 B )
P C 1 (S D A )
P D 5 (O C 1 A )
P C 0 (S C L )
P D 6 (IC P )
P D 7 (O C 2 )
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
D
D
D
D
D
D
D
D
A
A
A
A
A
A
A
A
TA
TA
TA
TA
TA
TA
TA
TA
A
A
A
A
A
A
A
A
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PD 7
2
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
VC C
A TM E G A16
H EAD ER 3
J S e r ia l1
TX1
1 u F 1 6 1V
U 6
R 2 IN
R 1 IN
T2O U T
T1O U T
C +
T 1 IN
R 1O U T
T 2 IN
R 2O U T
C 2+
11
12
10
9
4
+ C 4
+ C 5
3
1uF 16V
1uF 16V
+ C 8
C 1V+
M A X232
C 2V-
5
6
1uF 16V
C 9
+
1
2
3
8
13
7
14
R X1
31
32
DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
PORTA = data;
}
//-----------------------------------------------------//DEKLARASI SUB RUTIN SERIAL
//-----------------------------------------------------void InisialisasiUSART (unsigned long int baud_rate);
//-----------------------------------------------------//PROGRAM UTAMA
//-----------------------------------------------------void main(void)
{
DDRA = 0xFF;
PORTA = 0x00;
InisialisasiUSART(9600);
putsf("Selamat Datang Mas Iswanto");
#asm("sei")
while (1)
{
led<<=1; led|=1;
delay_ms(100);
if (led==0xff) led=0xfe; PORTA=led;
};
}
//-----------------------------------------------------//SUB RUTIN SERIAL
//-----------------------------------------------------void InisialisasiUSART (unsigned long int baud_rate)
{
UBRR = (osilator/(16*baud_rate))-1;
UBRRL = UBRR;
UBRRH = UBRR>>8;
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
}