Interupsi ATMega dengan Codevision AVR (2)

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 https://anotherorion.com

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

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

BACA JUGA:   [Buku] 20 Aplikasi Mikrokontroler atmega 8535 & atmega16

}

// 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;

// 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;

BACA JUGA:   Bermain dengan codevision AVR (3) gerbang logika dasar NAND dan NOR

// 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;

// 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

Tinggalkan komentar

(Note, links and most HTML attributes are not allowed in comments)

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.

Ingin produk/website Anda kami ulas? Silahkan klik tombol dibawah ini