Interrupt merupakan salah satu fasilitas yang sangat penting pada UC.
Ada dua macam interrupt yaitu interrupt internal dan interrupt
external. Pada kedua interrupt ini, UC melompat ke program interrupt
vektor dari program utama. Setelah interrupt vektor dijalankan maka
UC kembali ke program utama untuk melanjutkan perintah yang
ditinggalkan. Contoh dalam kehidupan kita, bayangkan kita sedang
bekerja didepan komputer mengerjakan tugas kampus. Ketika sedang
mengerjakan tugas, HP kita berdering sehingga kita meninggalkan
pengerjaan tugas kampus untuk menjawab panggilan HP. Setelah
pembicaraan di HP selesai maka kita melanjutkan kembali untuk
mengerjakan tugas kampus.
Interrupt eksternal terjadi karena perubahan keadaan (state) pada
pin UC. Beberapa interrupt eksternal yaitu INT0, INT1, PCINT0 s/d
PCINT23. Interrupt eksternal akan tetap terjadi jika Pin tersebut
mendapat trigger meskipun disetting sebagai output. Interrupt
internal terjadi karena telah dipenuhi suatu kondisi sehingga UC
harus meninggalkan program utama untuk menuju interrupt vektor.
Beberapa interrupt internal yaitu timer, compare, ADC, serial
communication (USART Rx). Kesemua interrupt dapat dijalankan jika
global interrupt enable bit dalam keadaan set dan
sumber interrupt bit juga dalam keadaan set. Disini kita akan
membahas interrupt eksternal karena interrupt internal akan dibahas
pada masing masing topik.
Register
Untuk mengaktifkan Interrupt Eksternal
EICRA – External Interrupt Control Register A
Bit
3, 2 – ISC11, ISC10: Interrupt Sense Control 1 Bit 1 and Bit 0
Kedua bit ini merasakan atau menkonfigurasi eksternal sinyal
yang masuk ke Pin INT1 (kaki no. 5 pada UC ATMega328), seperti
ditunjukkan pada table 12.1
Bit 1, 0 – ISC01, ISC00:
Interrupt Sense Control 0
Bit 1 and Bit 0
Pada
INT0 untuk mengkonfigurasi eksternal sinyal yang akan menyebabkan
terjadinya interrupt diatur oleh bit ISC01 dan ISC00. Ditunjukkan
pada table 12.2
EIMSK – External Interrupt Mask Register
Bit 1 – INT1: External Interrupt Request 1 Enable
Jika bit ini di set dan global interrupt pada SREG juga dalam keadaan
set maka pin interrupt eksternal INT1 menjadi enable. Perubahan
state pada pin akan menyebabkan permintaan interrupt meskipun pin
INT1 atau kaki no. 5 di konfigurasi sebagai output.
Bit 0 – INT0: External Interrupt Request 0 Enable
Sama seperti bit 1 pada register
EIMSK
Register terakhir pada INT0 interrupt dan INT1 interrupt adalah register EIFR (External Interrupt Flag Register)
Register terakhir pada INT0 interrupt dan INT1 interrupt adalah register EIFR (External Interrupt Flag Register)
Bit
1 – INTF1: External
Interrupt Flag 1 dan
Bit 0 – INTF0: External
Interrupt Flag 0
Untuk mengaktifkan PCINT0 sampai PCINT23 maka kita perlu mengkonfigurasi register register yang terkait. Register register tersebut adalah :
Untuk mengaktifkan PCINT0 sampai PCINT23 maka kita perlu mengkonfigurasi register register yang terkait. Register register tersebut adalah :
PCICR
– Pin Change Interrupt Control Register
Bit
2 - PCIE2: Pin Change Interrupt Enable 2, Jika
bit ini diset, maka setiap perubahan pada pin PCINT23 s/d PCINT16
akan menghasilkan sebuah interrupt. Nama interrupt vektor dari pin
pin adalah ISR(PCINT2_vect). Masing masing pin ini (PCINT23 s/d
PCINT16) adalah di enable dari register PCMSK2.
Bit
1 - PCIE1: Pin
Change Interrupt Enable 1. Jika
bit ini diset, maka setiap perubahan pada pin PCINT14
s/d PCINT8
akan menghasilkan sebuah interrupt. Nama interrupt vektor dari pin
pin adalah ISR(PCINT1_vect).
Masing masing pin ini (PCINT14
s/d PCINT8)
adalah di enable dari register PCMSK1.
Bit 0 - PCIE0: Pin Change Interrupt Enable 0, Jika bit ini diset, maka setiap perubahan pada pin PCINT7 s/d PCINT0 akan menghasilkan sebuah interrupt. Nama interrupt vektor dari pin pin adalah ISR(PCINT0_vect). Masing masing pin ini (PCINT7 s/d PCINT0) adalah di enable dari register PCMSK0.
Bit 0 - PCIE0: Pin Change Interrupt Enable 0, Jika bit ini diset, maka setiap perubahan pada pin PCINT7 s/d PCINT0 akan menghasilkan sebuah interrupt. Nama interrupt vektor dari pin pin adalah ISR(PCINT0_vect). Masing masing pin ini (PCINT7 s/d PCINT0) adalah di enable dari register PCMSK0.
PCIFR – Pin Change Interrupt Flag Register
Bit
2 - PCIF2: Pin Change Interrupt Flag 2, Bit 1 - PCIF1: Pin Change
Interrupt Flag 1, dan
Bit 0 - PCIF0: Pin Change Interrupt Flag 0 masing masing bersesuaian
dengan PCIE2,
PCIE1, PCIE0 yang terdapat pada register PCICR
Contoh
program
# include
<avr/io.h>
# include <avr/interrupt.h>
# include <avr/interrupt.h>
int main(void)
{
sei();
while(1)
DDRB
|=(1<<PINB5); // PINB5 sebagai output
DDRB
&=~(1<<PINB7); // PINB7 sebagai PCINT7
PCMSK0 |=(1<<PCINT7); // mengaktifkan PINB7 sebagai PCINT7 hal. 74
PCMSK0 |=(1<<PCINT7); // mengaktifkan PINB7 sebagai PCINT7 hal. 74
PCICR
|=(1<<PCIE0); // Sekarang PCINT7 sudah enable. Hal 73
{
}
}
ISR(PCINT0_vect)
{
PORTB
^= 1<<PINB5; // PINB5 bersifat toggle
Tidak ada komentar:
Posting Komentar