Rabu, 04 Juli 2012

Eksternal Interupt Pada ATmega


          Interupsi adalah kondisi dimana pada saat program utama dijalankan/dieksekusi oleh CPU, kemudian tiba-tiba berhenti untuk sementara waktu karena ada rutin laian yang harus ditangani terlebih dahulu oleh CPU, dan setelah selesai mengerjakan rutin tersebut CPU kembali mengerjakan instruksi pada program utama. Berikut ini adalah sumber interupsi pada ATmega8535.

Interupsi Eksternal
          Pada ATmega8535 terdapat 3 pin untuk interupsi eksternal, yaitu INT0, INT1, dan INT2. Interupsi eksternal dapat dibangkitkan apabila terdapat perubahan logika 1 atau logika 0 pada pin INT0, INT1, dan INT2. Inisialisasi external interrupt pada ATmega16 dapat dilakukan dengan melakukan konfigurasi register MCUCR, MCUCSR, GICR, GIFR.
          Bit-bit INT0, INT1, dan INT2 pada register GICR digunakan untuk mengaktifkan masing-masing interupsi eksternal. Ketika bit-bit tersebut diset 1 (aktif) maka interupsi eksternal akan aktif jika bit I (interupt) pada SREG (status register) diset 1 juga (enable interupt), instruksi untuk mengaktifkan global interupt yaitu sei. Program interupsi dari masing-masing interupsi akan dimulai dari vektor interupsi pada masing-masing jenis interupsi eksternal. 
          Untuk interupsi yang dijalankan terlebih dahulu pada ATmega8535 yaitu ditunjukkan oleh tabel 1. Sehingga interupsi eksternal yang dijalankan terlebih dahulu adalah INT0, INT1, dan INT2. Untuk membuktikannya kita lakukan percobaan seperti berikut.

ALAT DAN BAHAN YANG DIGUNAKAN
  1. 1 set Personal Computer/Laptop yang sudah berisi program Code Vision dan Khazama
  2. 1 buah ISP Downloader AVR
  3. 1 buah sistem minimum AVR
  4. 1 buah I/O
  5. 1 buah kabel printer USB

PROSEDUR
A.    Interupt
  • Rangkailah peralatan yang diperlukan seperti dalam Gambar 1. Hubungkan soket jumper PORTC pada minimum system dengan soket jumper pada OUTPUT LED. Hubungkan PIN D2, PIN D3, dan PIN B2 ke push button ( INT0, INT1, dan INT2 ).
Gambar 1. Blok diagram antarmuka mikrokontroler dengan I/O
  • Buka program Code Vision AVR
  • Buatlah project baru. Pada saat mengeset chip, clock, dan External IRQ, set juga bagian PORTC untuk LED. Kemudian simpanlah file tersebut.
Gambar 2. Setting LED dan Interupt
  • Perhatikan blok program berikut.
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
// untuk program interupt 0
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
// untuk program interupt 1
}

// External Interrupt 2 service routine
interrupt [EXT_INT2] void ext_int2_isr(void)
{
// Place your code here
// untuk program interupt 2
}
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Falling Edge
// INT2: On
// INT2 Mode: Falling Edge
GICR|=0xE0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xE0;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
     // Untuk program utama
      };
}


  • Tuliskan script berikut dalam program utama:
while (1)
      {
      // Place your code here
      PORTC=0x00;
      delay_ms(1000);
      PORTC=0x01;
      delay_ms(1000);
      PORTC=0x03;
      delay_ms(1000);
      PORTC=0x07;
      delay_ms(1000);
      PORTC=0x0F;
      delay_ms(1000);
      PORTC=0x1F;
      delay_ms(1000);
      PORTC=0x3F;
      delay_ms(1000);
      PORTC=0x7F;
      delay_ms(1000);
      PORTC=0xFF;
      delay_ms(1000);
      };

  • Tuliskan script berikut dalam program interupt:

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
PORTC=0xFF;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
PORTC=0xFF;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
PORTC=0xFF;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
PORTC=0xFF;
delay_ms(1000);
PORTC=0x7F;
delay_ms(1000);
PORTC=0x3F;
delay_ms(1000);
PORTC=0x1F;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
PORTC=0x07;
delay_ms(1000);
PORTC=0x03;
delay_ms(1000);
PORTC=0x01;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
}

// External Interrupt 2 service routine
interrupt [EXT_INT2] void ext_int2_isr(void)
{
// Place your code here
PORTC=0xF0;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
PORTC=0xF0;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
PORTC=0xF0;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
}
  • Downloadkan program ke mikrokontroler, setelah itu tekan pada push button yang berhubungan dengan PIN D2 (INT0).
  • Perhatikan dan catat nyala LED.
  • Lakukan hal serupa dengan Interup 1  dan Interupt 2.
  • Selanjutnya jalankan interup 0, interupt 1, dan interupt 2 secara bersamaan (antara program utama, program interup 0, program interupt 1, dan program interupt 2 harus berbeda).
  • Perhatikan dan catat nyala LED.

UNTUK PERCOBAAN INI SAYA BERI FILE PROTEUS UNTUK SIMULASI!!!!


1 komentar:

Unknown mengatakan...

terimakasih ,sangat membantu.izin copy

Posting Komentar

 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes