Interupsi ATmega dengan codevision AVR (1)

Setelah kita memahami cara kerja interupsi pada keluarga AVR ATMega dalam postingan ini, maka sekarang kita akan mencoba membuat program yang menggunakan pemanggilan rutin interupsi.

Interrupt yang akan kita gunakan adalah interrupt 0 atau INT0 yang berada pada PIND.2, ketika PIND.2 ditekan maka program akan menjalankan subrutin interupsi.

Program yang akan kita buat adalah program menyalakan LED dari PORTA.0 – PORTA.7 secara bergantian, dan ketika terjadi interupsi program akan menyalakan 4 LED di PORTA secara bergantian selama 5 x.

Program ini inspirasinya dari buku Pemrograman Bahasa C untuk Mikrokontroler ATMEGA 8535 karya M. Ary Heryanto dan Wisnu Adi P. Tentu saja teman2 masih bisa mengembangkannya sendiri sesuai selera teman2. Yang perlu diperhatikan ketika kita membuat new project di Codevision AVR pastikan anda telah mengenable External IRQ INT0 pada tab yang tersedia, mode yang saya gunakan adalah rising edge.

Berikut adalah listing programnya

/*this program inspired from pemrograman bahasa C
untuk mikrokontroler atmega 8535 dan telah mengalami
modifikasi sesuai selera penulis, silahkan modifikasi
sesuai selera temen2

trimakasih

priyo harjiyono
http://anotherorion.com

*/
#include <mega16.h>
#include <delay.h>
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
unsigned char rr=0;
while(rr<5)
{
PORTA=0x0f;delay_ms(100);
PORTA=0xf0;delay_ms(100);
++rr;
}
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here
unsigned char dt=1;
// Input/Output Ports initialization
// Port A 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
PORTA=0x00;
DDRA=0xFF;

// 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: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x03;
MCUCSR=0x00;
GIFR=0x40;

// 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=dt;delay_ms(10);
dt=dt<<1;
if(dt==0){dt=0x01;}
};
}

 

Selamat mencoba

contoh program interrupt cvavr, definisi program interupsi pada cv avr, cara menggunakan interupsi di cvavr ATMega16, cara menggunakan interrupt pada cv avr, contoh program cvavr timer1 interrupt routine, menggunakan internal interrupt atmega 8, contoh program interrupt avr, program interrupt cvavr, contoh program interupt pada avr, intrupsi cvavr

Berikan tanggapan anda

This site uses Akismet to reduce spam. Learn how your comment data is processed.