Setelah kita bisa menggunakan interrupt dalam ATMega sekarang kita bisa menambahkan tidak hanya satu interupsi bisa tambah satu atau dua dengan mengaktifkan INT1 dan INT2. Dengan demikian kita bisa menambahkan 3 buah interrupt pada program utama.

Yang masih tetap harus diingat adalah settingan register GICR, GIFR MCUCR dan MCUCSR untuk mengatur mode2 Interrupt yang akan kita gunakan. Nah untuk memperjelasnya kita akan melakukan sebuah percobaan lagi, basicnya masih sama dengan program pertama, hanya sekarang kita menambahkan INT1 dengan mode falling edge.

Ketika terjadi interrupt dari INT1 maka nyala led akan berjalan terbalik dari program utama. Setting pada input PIND.3 juga harus disesuaikan dengan input tombol aktif high. Berikut adalah listing programnya

#include <mega16.h>
#include <delay.h>
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{

/*****************************************************

program ini dibuat oleh priyo harjiyono http://anotherorion.com

*****************************************************/

// Place your code here
unsigned char rr=0;
while(rr<5)
{
PORTA=0x0F;
delay_ms(100);
PORTA=0xf0;
delay_ms(100);
}

}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
unsigned char dd=0x80;
while(dd>=1)
{
PORTA=dd;
delay_ms(100);
dd=dd>>1;
}
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here
unsigned char data=1;
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

BACA JUGA:   Buku: Mikrokontroler ATmel AVR (ISIS Proteus & Codevision AVR)

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Rising Edge
// INT1: On
// INT1 Mode: Rising Edge
// INT2: Off
GICR|=0xC0;
MCUCR=0x0B;
MCUCSR=0x00;
GIFR=0xC0;

BACA JUGA:   Membuat Papan Skor Counter Up/Down Codevision

// 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
PORTA=data;
delay_ms(100);
data=data<<1;
if(data==0){data=1;}
};
}

Anda bisa menambahkan INT2, menggunakan Any Change atau Low Mode dan memvariasikan outputnya.

Selamat mencoba

program interupsi sederhana ntala leddi CVavr, listing program counter avr led ketika terjadi interupsi, pengertian GICR MCUCR MCUCSR GIFT di cvavr, program tombol aktif high codevision avr
News Reporter
Priyo Harjiyono, blogger kelahiran Cilacap yang kini menjadi warga Ngayogyakarta Hadiningrat, baginya blog adalah dunia untuk menciptakan mimpi2nya. Saat ini masih disibukkan sebagai pembelajar dalam dunia pendidikan.