Anda di halaman 1dari 9

Percobaan II

Timer, Counter, Interrupt


Iwan Panjaitan (14S16054)
Tanggal Percobaan: 08/03/2019
ELS3203 - Praktikum Sistem Mikroprosesor
Laboratorium Dasar Teknik Elektro – Teknik Elektro
Institut Teknologi Del

Abstrak— Pada praktikum Timer, Counter, Interrup ini akan Mikrokontroler AVR ATmega8535 telah dilengkapi dengan
dilakukan percobaan untuk memahami bagaimana suatu ADC internal EEPROM internal, Timer/Counter, PWM,
timer/counter yang ada pada suatu microprocessor ATMega analog comparator, dll. Sehingga dengan fasilitas yang
8335 berjalan. Dimana pertama-tama praktikan diharapkan lengkap ini memungkinkan kita belajar mikrokontroler
mampu memahami datasheet dari ATMega 8535, untuk
keluarga AVR dengan lebih mudah dan efisien, serta dapat
melihat bagaimana fungsi dari tiap register yang ada serta
nilai bit yang dimiliki pada timer/counter ATMega 8535.
mengembangkan kreativitas penggunaan mikrokontroler
Untuk melakukan praktikum ini digunakan bahasa ATmega8535. Timer/Counter ialah salah satu fitur yang
pemrograman C pada CV AVR. Konfigurasi untuk terdapat pada mikrokontroller yang mempunyai fungsi
timer/counter ini juga akan diaplikasikan dengan membuat penyacah nilai berdasarkan nilai frekuensi yang digunakan.
sebuah delay melalui register timer/counter yang ada pada Nilai frekuensi ini juga bisa kita ubah-ubah sesuai dengan
ATMega 8535. Delay yang telah dibuat akan ditampilkan kebutuhan. Nilai Frekuensi ini didapat dari hasil bagi antara
pada LED Display yang akan diamati dan dimodifikasi frekuensi mikrokontroller dengan nilai prescaller. Adapun
sebagai keluaran untuk delay serta external interrupt. tujuan dari penggunaan timer dan counter AVR ialah
Sehingga pada akhirnya praktikan mampu membuat
melaksanakan tugas tertentu secara berulang (mode
aplikasi External Interrupt pada AVR dengan menggunakan
bahasa pemprograman C pada CV AVR.
normal), menghitung panjang pulsa (input capture),
menghitung banyaknya event (sebagai counter),
mengendalikan kecepatan motor DC (pulsa wide
Kata Kunci: Counter, Interrupt, Timer. modulation /PWM), membuat penundaan waktu (delay),
sinyal generator. Komponen utama Timer/Counter adalah
sebuah register yg tugasnya hanya berhitung dari 0 sampai
I. PENDAHULUAN
batas maximumnya, register ini pada AVR disebut register
TCNT. Misalnya sebuah register TCNT pada AVR
Mikrokontroler adalah IC yang dapat deprogram adalah 8 bit, maka nilai maksimunya adalah 255.
berulang kali, baik ditulis atau dihapus. Biasanya Poin penting yang ingin dicapai pada praktikum ini ialah
digunakan untuk pengontrolan otomatis dan manual pada agar praktikan:
perangkat elektronika. Beberapa tahun terakhir, a. Praktikan memahami datasheet ATMega 8535.
mikrokontroler sangat banyak digunakan terutama dalam b. Praktikan mampu membuat aplikasi Timer/ Counter dan
pengontrolan robot. Seiring perkembangan elektronika, Interrupt pada AVR dengan menggunakan bahasa
mikrokontroler dibuat semakin kompak dengan bahasa pemprograman C pada CV AVR.
pemrograman yang juga ikut berubah. Salah satunya adalah c.Praktikan mampu membuat aplikasi External Interrupt
mikrokontroler AVR (Alf and Vegard’s Risc processor) pada AVR dengan menggunakan bahasa pemprograman
ATmega8535 yang menggunakan teknologi RISC (Reduce C pada CV AVR.
Instruction Set Computing) dimana program berjalan lebih
cepat karena hanya membutuhkan satu siklus clockuntuk
mengeksekusi satu instruksi program. Secara umum, AVR II. LANDASAN TEORETIS
dapat dikelompokkan menjadi 4 kelas, yaitu kelas ATtiny, Dasar teori yang akan digunakan pada praktikum ini ialah
keluarga AT90Sxx, keluarga ATmega, dan AT86RFxx. sebagai berikut:
Pada dasarnya yang membedakan masing-masing kelas 1. ATmega 8535
adalah memori, peripheral, dan fungsinya. Dari segi
arsitektur dan instruksi yang digunakan, mereka bisa ATMega8535 adalah mikrokontroler CMOS 8 bit daya
dikatakan hampir sama. Mikrokontroler AVR rendah berbasis arsitektur RISC. Instruksi dikerjakan
ATmega8535 memiliki fitur yang cukup lengkap.
pada satu siklus clock, ATMega8535 mempunyai Avcc Pin tegangan suplai untuk port A dan ADC. Pin ini
throughput mendekati 1 MIPS per MHz, hal ini harus dihubungkan ke Vcc walaupun ADC tidak digunakan,
membuat ATMega8535 dapat bekerja dengan maka pin ini harus dihubungkan ke Vcc melalui low pass
kecepatan tinggi walaupun dengan penggunaan daya filter
Aref pin referensi tegangan analog untuk ADC
rendah. Mikrokontroler ATmega8535 memiliki
AGND pin untuk analog ground. Hubungkan kaki ini ke
beberapa fitur atau spesifikasi yang menjadikannya GND, kecuali jika board memiliki analog ground yang
sebuah solusi pengendali yang efektif untuk berbagai terpisah, Berikut ini adalah penjelasan dari pin
keperluan. Fitur-fitur tersebut antara lain: mikrokontroler ATMega8535 menurut port-nya masing-
masing:
1. Saluran I/O sebanyak 32 buah, yang terdiri atas - Port A
Port A, B, C dan D Pin33 sampai dengan pin 40 merupakan pin dari port A.
2. ADC (Analog to Digital Converter) Merupakan 8 bit directional port I/O. Setiap pin-nya dapat
3. Tiga buah Timer/Counter dengan kemampuan menyediakan internal pull-up resistor (dapat diatur per bit).
perbandingan Output buffer port A dapat memberi arus 20 mA dan dapat
4. CPU yang terdiri atas 32 register mengendalikan display LED secara langsung. Data
Direction Register port A (DDRA) harus di-setting terlebih
5. Watchdog Timer dengan osilator internal
dahulu sebelum port A digunakan. Bit-bit DDRA diisi 0 jika
6. SRAM sebesar 512 byte ingin memfungsikan pin-pin port A yang disesuaikan
7. Memori Flash sebesar 8kb dengan kemampuan sebagai input, atau diisi 1 jika sebagai output. Selain itu,
read while write pin-pin pada port A juga memiliki fungsi-fungsi alternatif
8. Unit Interupsi Internal dan External khusus seperti yang dapat dilihat dalam tabel:
9. Port antarmuka SPI untuk men-download program Penjelasan pin pada port A
ke flash Pin Keterangan
10. EEPROM sebesar 512 byte yang dapat diprogram PA.7 ADC7 (ADC Input Channel 7)
saat operasi PA.6 ADC6 (ADC Input Channel 6)
11. Antarmuka komparator analog PA.5 ADC7 (ADC Input Channel 5)
12. Port USART untuk komunikasi serial. PA.5 ADC4 (ADC Input Channel 4)
PA.3 ADC3 (ADC Input Channel 3)
PA.2 ADC2 (ADC Input Channel 2)
- Konfigurasi Pin ATMega8535 PA.1 ADC1 (ADC Input Channel 1)
PA.0 ADC0 (ADC Input Channel 0)
Mikrokontroler AVR ATMega memiliki 40 pin dengan 32
pin diantaranya digunakan sebagai port paralel. Satu port - Port B
paralel terdiri dari 8 pin, sehingga jumlah port pada Pin 1 sampai dengan pin 8 merupakan pin dari port B.
mikrokontroler adalah 4 port, yaitu port A, port B, port C Merupakan 8 bit directional port I/O. Setiap pin-nya dapat
dan port D. Sebagai contoh adalah port A memiliki pin menyediakan internal pull-up resistor (dapat diatur per bit).
antara port A.0 sampai dengan port A.7, demikian Output buffer port B dapat memberi arus 20 mA dan dapat
selanjutnya untuk port B, port C, port D. Diagram pin mengendalikan display LED secara langsung. Data
mikrokontroler dapat dilihat pada gambar berikut: Direction Register port B (DDRB) harus di-setting terlebih
Berikut ini adalah tabel penjelasan mengenai pin yang dahulu sebelum port B digunakan. Bit-bit DDRB diisi 0 jika
terdapat pada mikrokontroler ATMega8535: ingin memfungsikan pin-pin port B yang disesuaikan
sebagai input, atau diisi 1 jika sebagai output. Selain itu,
Vcc Tegangan suplai (5 volt) pin-pin port B juga memiliki fungsi-fungsi alternatif khusus
GND Ground seperti berikut:
RESET Input reset level rendah, pada pin ini selama lebih Penjelasan pin pada port B
dari panjang pulsa minimum akan menghasilkan reset Pin Keterangan
walaupun clock sedang berjalan. RST pada pin 9 PB.7 SCK (SPI Bus Serial Clock)
merupakan reset dari AVR. Jika pada pin ini diberi PB.6 VISO (SPI Bus Master Input/Slave Output)
masukan low selama minimal 2 machine cycle maka sistem PB.5 VOSI (SPI Bus Master Output/Slave Input)
akan di-reset PB.4 SS (SPI Slave Select Input)
XTAL 1 Input penguat osilator inverting dan input pada PB.3 AIN1 (Analog Comparator Negative Input)
rangkaian operasi clock internal OCC (Timer/Counter0 Output Compare Match Output)
XTAL 2 Output dari penguat osilator inverting
PB.2 AIN0 (Analog Comparator Positive Input) memungkinkan dua register yang berbeda dapat diakses
INT2 (External Interrupt2 Input) dalam satu siklus clock
PB.1 T1 (Timer/Counter1 External Counter Input)
PB.0 T0 (Timer/Counter0 External Counter Input) 2. Prescaler
XCK (JSART External Clock Input/Output)
- Port C Timer pada dasarnya hanya menghitung pulsa clock.
Pin 22 sampai dengan pin 29 merupakan pin dari port C.
Frekuensi pulsa clock yang dihitung tersebut bisa
Port C sendiri merupakan port input atau output. Setiap pin-
nya dapat menyediakan internal pull-up resistor (dapat sama dengan frekuensi crystal yang dipasang atau
diatur per bit). Output buffer port C dapat memberi arus 20 dapat diperlambat menggunakan prescaler dengan
mA dan dapat mengendalikan display LED secara faktor 8, 64, 256 atau 1024. Berikut penjelasannya:
langsung. Data Direction Register port C (DDRC) harus di- Sebuah AVR menggunakan crystal dengan frekuensi
setting terlebih dahulu sebelum port C digunakan. Bit-bit 8 MHz dan timer yang digunakan adalah timer 16 bit,
DDRC diisi 0 jika ingin memfungsikan pin-pin port C yang maka maksimum waktu timer yang bisa dihasilkan
disesuaikan sebagai input, atau diisi 1 jika sebagai output. adalah:
Selain itu, pin-pin port D juga memiliki fungsi-fungsi
alternatif khusus seperti berikut: TMAX = 1/fCLK x (FFFFh+1) = 0.125uS x 65536
Penjelasan pin pada port C = 0.008192 S
Pin Keterangan
PC.7 TOSC2 (Timer Oscillator Pin 2)
PC.6 TOSC1 (Timer Oscillator Pin 1) Untuk menghasilkan waktu timer yang lebih lama
PC.1 SDA (Two-Wire Serial Bus Data Input/Output Line) dapat digunakan prescaler, misalnya 1024, maka
PC.0 SCL (Two-Wire Serial Bus Clock Line) maksimum waktu timer yang bisa dihasilkan adalah:

- Port D TMAX = 1/fCLK x (FFFFh+1) x N = 0.125uS x


Pin 14 sampai dengan pin 20 merupakan pin dari port D. 65536 x 1024 = 8.388608 S
Merupakan 8 bit directional port I/O. Setiap pin-nya dapat
menyediakan internal pull-up resistor (dapat diatur per bit). 3. Macam-macam Timer/Counter
Output buffer port D dapat memberi arus 20 mA dan dapat
mengendalikan display LED secara langsung. Data a. Timer/Counter 0
Direction Register port D (DDRD) harus di-setting terlebih Merupakan 8bit timer/counter, pengaturan Timer/Counter 0
dahulu sebelum port D digunakan. Bit-bit DDRD diisi 0 diatur oleh TCCR0 (Timer/Counter control register 0)
jika ingin memfungsikan pin-pin port D yang disesuaikan seperti berikut ini:
sebagai input, atau diisi 1 jika sebagai output. Selain itu,
pin-pin port D juga memiliki fungsi-fungsi alternatif
khusus seperti yang dapat dilihat dalam tabel:
Penjelasan pin pada port D
Pin Keterangan Bit 3 ~ 7 digunakan untuk setting PWM.
PD.0 RDX (UART input line) Bit 2, 1, 0 (CS02, CS01, CS00): Clock select. Ketiga bit tersebut
PD.1 TDX (UART output line) memilih sumber clock yang akan digunakan oleh timer/counter.
PD.2 INT0 (external interrupt 0 input)
PD.3 INT1 (external interrupt 1 input)
PD.4 OC1B (Timer/Counter1 output compareB
match output)
PD.5 OC1A (Timer/Counter1 output compareA match
output)
PD.6 ICP (Timer/Counter1 input capture pin)
PD.7 OC2 (Timer/Counter2 output compare match output)

Diagram Blok ATMega8535


Pada diagram blok ATMega8535 digambarkan 32 general b. Timer/Counter 1
purpose Working register yang dihubungkan secara Merupakan 16-bit timer/counter sehingga terdapat
langsung dengan Arithmetic Logic Unit (ALU). Sehingga perbedaan cara pengaksesannya dengan 8-bit
timer/counter. 16-bit (1 word) timer/counter harus diakses
dengan 8 bit high dan 8bit low. Pengaturan
Timer/Counter1 juga diatur oleh register TCCR1B.
Register TIFRernilai 1 (set) jika terjadi compare match
antara Timer/Counter x dan data di OCRx (Output Compare
Register x). OCFx di-clear secara hardware ketika
pengeksekusian corresponding interrupt handling vector.
Bit 2,1,0 (CS1 2:0): Clock Select. Ketiga bit tersebut Atau, jika diberi nilai 1 secara lagsung ke bit flag. Saat bit I
(CS2/CS1/CS0) mengatur sumber clock yang SREG, OCIEx, dan OCFx set (berlogika 1), maka
digunakan untuk Timer/Counter1. Timer/Counter x Compare Match Interrupt dieksekusi.

TOVx: Timer/Counter x Overflow Flag. Bit ini akan set (bernilai


1) saat terjadi overflow di Timer/Counter x. TOVx akan clear
(bernilai 0) secara hardware saat pengeksekusian corresponding
interrupt handling vector. Atau, diberikan logika 1 ke bit flag.
Saat bit i SREG, TOIEx (Timer/Counter x Overflow Interrupt
Enable), dan TOVx set, akan terjadi pengeksekusian
Timer/Counter x Overflow Interrupt. Pada mode PWM, bit ini set
ketika Timer/Counter x mengubah arah perhitungan hingga
menuju nilai 0x00.

c. Timer/Counter 2

Timer/Counter2 adalah 8-bit Timer/Counter,


pengaturan pada Timer/Counter2 diatur oleh TCCR2
(Timer/Counter Control Register 2).

Bit 2,1,0 (CS22; CS21, CS20): Clock Select. Ketiga bit ini
memilih sumber clock yang akan digunakan oleh
Timer/Counter.

4. Register TIMSK dan TIFR


Selain register-register di atas, terdapat pula register TIMSK
(Timer/Counter Interrupt Mask Register) dan register TIFR
(Timer/Counter Interrupt Flag Register).

• OCIEx: Output Compare Match Interrupt Enable. Jika bit


tersebut diberi logika 1 dan bit I SREG juga berlogika 1,
maka bisa dilakukan enable interupsi Output Compare
Match Timer/Counter x.
• TOIEx: Overflow Interrupt Enable. Jika diberi logika 1
dan bit I SREG juga berlogika 1, maka bisa dilakukan
enable interupsi Overflow Timer/Counter x.
• TCIE1: Timer/Counter 1, Input Capture Interrupt Enable
III. HASIL DAN ANALISIS Code akan diinput pada AVR dengan melihat fungsi dari tiap
baris code, dimana Perintah #include artinya kita menggunakan
file Header mega8535.h yang berisi perintah-perintah yang dapat
A. Tugas I : DELAY DENGAN TIMER/COUNTER dikenali oleh compiler. Pada program ini dibuat sebuah delay
dengan memanfaatkan timer/counter yang ada pada ATMega
8535 atau dengan kata lain tidak memanfaatkan library delay
- Tugas II.A.1 yang ada pada AVR. Dengan mengetahui nilai clock yang akan
Pada bagian percobaan satu praktikan membuat program diset pada Register TCNT1 untuk menghasilkan waktu tunda 1
dengan delay dengan memanfaatkan Timer/Counter detik. Serta pada mikrokontroler ATMega 8535 perlu
dengan code sebagai berikut: diperhatikan pemilihan sumber clock. Hal ini berhubungan
#include<mega8535.h> dengan frekuensi yang kita inginkan, dengan mengatur frekuensi
16 MHz maka mikrokontroler ini dapat mencapai 16MIPS
void main()
{ (Million Instruction per Second).
DDRB = 0xFF;
while(1)
{
TCNT1 = 49910;
TCCR1B = 0b101;
while ((TIFR & 0b00000100) == 0); Dimana nilai maksimal untuk 16 bit ialah 65535 (2 pangkat 16)
TCCR1B = 0; atau berdasarkan rumus merupakan nilai (1+FFFFh). Kemudian
TIFR = 0b00000100;
dikurangkan dengan (16MHZ/1024) = 15625. Maka didapat
PORTB = ~PORTB;
} nilai yang akan diset pada
} TCNT1 = (65535 – 15625)
= 49910
Berdasarkan code tersebut diharapkan didapat hasil berupa
nyala LED (blink) dengan delay selama satu detik: Nilai delay 1 detik merupak representasi dari nilai clock 15625,
dapat disimpulkan untuk mendapatkan delay dengan melebihi
nilai clock 65535, maka diperlukan nilai maksimal clock yang
lebih besar atau bit yang lebih lagi. Karena untuk nilai clock
maksimal 65535 hanya dapat menghasilkan waktu tunda 4 detik
START (15625 * 4 = 62500).
Berdasarkan code, while(True) maka set nilai register TCNT1 =
49910 dengan prescaler 1024, yang diatur pada TCCR1B =
0b101, ini berarti CS02 = 1, CS01 = 0, dan CS00 = 0. Dimana
DDRB = 0XFF (Set Port B Sebagai Output) semakin kecil nilai pembagi atau prescalernya, maka akan
semakin cepat clock yang dihasilkan (semakin kecil waktu
delay). Berdasarkan hal tersebut dapat kita atur delay yang
diinginkan dengan mengatur prescaler lebih kecil lagi.
- Tugas II.A.2
Atur nilai awal Timer1 berdasarkan clock frekuensi dari
ATMega8535 (49910) pada register TCNT1 Pada bagian ini dimodifikasi code pada bagian pertama,
agar waktu delay yang ditampilkan menjadi x detik.
Dimana x = (modulus 9 dari nomor kelompok) + 1,
sehingga untuk kelompok 4, nilai x menjadi 5.
#include<mega8535.h>
TCCR1B atur untuk nilai prescaler (101 => 1024)
void main()
{
DDRB = 0xFF;
while(1)
END {
//TCNT1 = 49910;
//TCNT1 = 0xD5D0;
LED DISPLAY untuk 1 detik pertama TCNT2 = 4294889171;
TCCR1B = 0b101;
7 6 5 4 3 2 1 0 while ((TIFR & 0b00000100) == 0);
TCCR1B = 0;
LED DISPLAY untuk 1 detik berikutnya
TIFR = 0b00000100;
7 6 5 4 3 2 1 0 PORTB = ~PORTB;
}
}
Hasil yang didapat:
START

START

DDRB.0 = 0 dan PORTB.0=1 Untuk


mengatur inoput dari saklar
DDRB = 0XFF (Set Port A Sebagai Output)

TRUE (1)

Atur nilai pada register TCNT2 = 42949594835


Counter 0 bertipe integer di TCNT di konversi ke
String

END

Dimana untuk mendapatkan delay selama 5 detik digunakan Tampilkan nilai Counter 0 di LCD
timer counter 2 agar mendapatkan nilai lebih 32 bit. Hal ini
dikarenakan untuk TCNT1 tidak menghasilkan delay > = 4
detik.
2^32 = 4294967296, sebagai nilai maksimal Dimana input counter 0 berasal dari tombol yang ketika
4294967296 – (15535*5) = 4294889171 tombol terbuka menjadi tidak ada sinyal input, maka kondisi
Maka akan didapatkan nilai delay 5 detik, dengan prescaler portb.0 (T0) dibuat input pull-up (Portb.0=1) supaya ketika
tetap yaitu 1024. tombol terbuka logika pada pin T0 adalah High.
Diatur nilai dari TCCR0 = 0b110, dimana ini akan membuat
B. Tugas II: EXTERNAL CLOCK SEBAGAI COUNTER
nilai External Clock Sources T0 pin. Clock on Falling edge.
- Tugas II.B.1 Konfigurasi timer 0 yang difungsikan sebagai counter dengan
Pada percobaan ini diatur dimana nilai counter yang sinyal deteksi pada sisi turun (falling), secara otomatis pula
ditampilkan pada LCD merupakan hasil dari banyaknya Counter 0 akan aktif, sehingga ketika ada pulsa yang masuk
keypad ke pin T0 mulai dicacah/dihitung. Pulsa berasal dari
perubahan logika pada pin T0. Ketika SW 1 ditekan maka
#include <mega8535.h> logika pin T0=Low, sehingga timbul pulsa hig-low-high.
#include <alcd.h> Selanjutnya menampilkan hasil cacahan counter 0 ke LCD.
#include <stdio.h>
Nilai counter 0 ada di register TCNT0. Bertipe integer supaya
char str[10]; tampil di LCD kita konversi dulu ke string dengan
void main() menggunakan fungsi sprintf(str,”%i”,TCNT0).
{
DDRB.0 = 0;
Perintah ini akan dikerjakan terus-menerus, sehingga
PORTB.0 = 1; ditempatkan dalam loop while(1). Pada saat praktikum,
lcd_init(16); terdapat nilai-nilai yang tidak sesuai antara jumlah keypad
lcd_clear(); yang ditekan dengan jumlah counter yang ditampilkan di
lcd_putsf("Counter 0= "); LCD. Hal tersebut dikarenakan bounching pada saklar
TCCR0 =0b110; mekanik, jadi semacam pantulan pada dua sisi koneksi saklar
while(1)
{
mekanik tersebut. Anda dapat menggunakan masukan pulsa
sprintf(str,"%i",TCNT0); dari function generator untuk mendapatkan hasil yang bagus.
lcd_gotoxy(10,0);
lcd_puts(str);
}
}
Hasil yang didapat:

Untuk menampilkan hasil delay led yang sesuai dengan jumlah


Counter 0 ketika ditekan pada keypad. Sehingga nilai Counter 0
(TCNT0) menjadi inputan untuk delay pada LED PortA.

- Tugas II.B.2
#include <mega8535.h>
START
#include <delay.h>
#include <alcd.h>
#include <stdio.h>

char str[10];
void main() DDRB.0 = 0 dan PORTB.0=1 Untuk
{ mengatur inoput dari saklar
DDRA = 0xFF;
//PORTA =0xFF;
DDRB.0 = 0;
PORTB.0 = 1;
lcd_init(16); TRUE (1)
lcd_clear();
lcd_putsf("Counter 0= ");
TCCR0 =0b110;
while(1) Counter 0 bertipe integer di TCNT di konversi ke
{ String
sprintf(str,"%i",TCNT0);
lcd_gotoxy(10,0);
lcd_puts(str);
PORTA = 0b11111111;
delay_ms(200*TCNT0);
PORTA = 0b00000000;
Tampilkan Keluaran LED Blink delay setiap 1 detik
delay_ms(200*TCNT0); dikali dengan jumlah yang ditekan (nilai Counter 0
pada TCNT0)
}

}
Tampilkan nilai Counter 0 di LCD
C. Tugas III: PORT A SEBAGAI OUTPUT DAN PORT D Hasil yang didapat:
SEBAGAI INPUT

- Tugas I.C.1
Pada percobaan ini dilakukan display pada LCD sebagai
keterangan interrupt yang digunakan dengan menekan keypad
yang telah diatur:
#include <mega8535.h>
#include <alcd.h>
void main()
{
DDRD.2 = 0;
DDRD.3 = 0;
PORTD.2 = 1;
PORTD.3 = 1;
GICR = 0b11000000;
MCUCR = 0b00000000;
#asm("sei")
lcd_init(16);
lcd_clear(); Diatur output pada lcd dengan memanggil fungsi interrupt
lcd_putsf("Ext Interrupt"); global yaitu #asm(“sei”), sehingga dapat diatur jenis fungsi
while(1); untuk menampilkan keterangan interrupt pada bagian LCD.
} Yang disesuaikan dengan PORTD pada keypad.
interrupt[2]void interupsi_ext0(void)
{
- Tugas I.C.2
lcd_gotoxy(0,1);
lcd_putsf("INT Ext 0"); Digunakan interrupt untuk melakukan interupsi pada suatu main
} program,
#include <mega8535.h>
interrupt[3]void interupsi_ext1(void) #define F_CPU 8000000UL
{ #include <delay.h>
lcd_gotoxy(0,1); #include <alcd.h>
lcd_putsf("INT Ext 1"); void main()
} {
unsigned char i = 0xFE; //254 = 1111 1110
DDRA = 0xFF;
PORTA = i;
START DDRD.2 = 0;
DDRD.3 = 0;
PORTD.2 = 1;
PORTD.3 = 1;
GICR = 0b11000000;
Set nilai MCUCR sesuai dengan MCUCR = 0b00000000;
Konfigurasi 0b00000000 #asm("sei")
Dan #asm(“sei”) global interrupt lcd_init(16);
lcd_clear();
lcd_putsf("Ext Interrupt");
while(1) // (untuk rotasi pada led display)
TRUE (1) {
PORTA = i;
delay_ms(40);
i=(i<<1)|(i>>7);
Diatur nilai PORTD sebagai input pada Fungsi }
interrupt while(1);
}

interrupt[2]void interupsi_ext0(void)
{
PORTA = 0xFF;
Jalankan fungsi pertama (ext0) atau kedua (ext1)
delay_ms(200);
ketika menerima input dari PORTD lcd_gotoxy(0,1);
lcd_putsf("INT Ext 0");

Tampilkan keterangan interrupt di LCD


interrupt[3]void interupsi_ext1(void) IV. SIMPULAN
{
PORTA = 0x00;  Praktikan telah memahami datasheet ATMega8538
delay_ms(200);  Praktikan mampu membuat aplikasi input dan output
lcd_gotoxy(0,1); pada AVR dengan menggunakan bahasa pemrograman
lcd_putsf("INT Ext 1"); C pada winAVR
}  Praktikan telah memahami pengesetan fuse yang
Main program yang digunakan pada percobaan ini diambil dari berkaitan dengan penggunaan besar dan jenis kristal
praktikum pertama, yaitu menampilkan LED berotasi. Dimana  Praktikan telah mampu membuat aplikasi dan
disusun code, dengan menjalankan program utama yaitu LED memahami External Interrupt pada AVR dengan
yang berotasi. Kemudian di set ketika External interrupt 0 menggunakan bahasa pemprograman C pada CV AVR.
diaktifkan, melalui keypad, maka LED akan menyala semua
selama 3 detik. Hal ini dilakukan dengan menambahkan
command berikut PORTA = 0xFF; pada fungsi interrupt[2]void
interupsi_ext0(void). Lalu kembali ke main program. Hal yang
sebaliknya dilakukan pada fungsi external interrupt 1 dengan REFERENSI
membuat LED (PORTA = 0X00) mati selama 3 detik lalu [1] Hutabarat, Mervin T., Waskita Adijarto, dan Harry
kembali ke main programnya yaitu menampilkan LED yang Septanto, Praktikum Sistem Mikroprosesor, Sekolah Teknik
berotasi. Elektro dan Informatika InstitutTeknologi Bandung,
Bandung, 2013.
[2] ATMega 8535 Datasheet from www.atmel.com

Anda mungkin juga menyukai