Aplikasi Interrup



1. Dasar Teori [kembali]
INTERUPSI ATMEGA 16

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. 

Interupsi Eksternal
Pengaturan kondisi keadaan yang menyebabkan terjadinya interupsi ekternal diatur oleh registet MCUCR (MCU Control Register) tang terlihat seperti Gambar 4.1.

2. Hardware [kembali]


3. Rangkaian Simulasi [kembali]


4. Flowchart [kembali]

5. Listing Program [kembali]
#include <mega16.h>                               // pemanggilan fungsi pada atmega 16
#include <delay.h>                                // pemanggilan fungsi delay

interrupt [EXT_INT0] void ext_int0_isr(void)      // mengaktifkan interupsi eksternal 0
{
PORTB=0xff;                                        // Led hidup
delay_ms(100);                                     // delay 100 ms
PORTB=0x00;                                        // Led mati
delay_ms(100);                                     // delay 100 ms
    PORTB=0xff;                                    // Led hidup
delay_ms(100);                                     // delay 100 ms
PORTB=0x00;                                        // Led mati
delay_ms(100);                                     // delay 100 ms
PORTB=0xff;                                        // Led hidup
delay_ms(100);                                     // delay 100 ms
PORTB=0x00;                                        // Led mati
delay_ms(100);                                     // delay 100 ms
}

void main(void)                                    // program utama
{
PORTB=0x00;                                        // nilai awal portb '0'
DDRB=0xff;                                         // port sebagai output

DDRD=0x00;                                         // portd sebagai input
PORTD=0xff;                                        // nilai awal portd '1'
                            
GICR|=0x40;                                        // mengaktifkan interupsi INT0
MCUCR=0x00;                                        // logika '0' pada pin INT0 menyebabkan interupsi
GIFR=0x40;                                         // mengaktifkan interupsi INT0

#asm("sei")

while (1)                                          // program akan berulang, karena syarat while bernilai 1 (true)
      {
   

      }
}

6. Vidio [kembali]

7. Link Download [kembali]
<rangkaian simulasi>
<listing program>
<html>

Tidak ada komentar:

Posting Komentar