Anda di halaman 1dari 17

MODUL 02 TIMER, COUNTER, INTERRUPT

Muhammad Adhitya Dharmawan (13217055)


Asisten: Angelica Hartono (13216061)
Tanggal Percobaan: 18/02/2020
EL3214-Praktikum Sistem Mikroprosesor
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak menyala) berubah setelah 2x penekanan tombol


Interrupt dan Counter Input, tugas II.B.2 praktikan
Pada percobaan kali ini praktikan dikenalkan dengan
diminta untuk mengeluarkan output (LED
mikroprosesor ATMega 8535, praktikan diminta untuk
menyala) berubah setelah (x mod 5) + 3 kali,
memahami bagaimana sistem Timer/Counter dan sistem
dimana x adalah nomor kelompok, penekanan
Interrupt pada ATMega 8535. Pada praktikum kali ini
tombol Interrupt dan Counter Input. Tugas 3
terdapat 4 tugas utama, tugas 1 praktikan mencoba
praktikan mencoba memahami kerja port sebagai
memahami bagaimana kerja timer/counter internal, tugas 2
output dan port sebagai input, pada tugas 3 terbagi
praktikan mencoba memahamibagaimana kerja
2 sub tugas yaitu, tugas II.C.1 praktikan diminta
timer/counter external, tugas 3 praktkan mencoba memahami
untuk mengeluarkan output (LED menyala)
bagaimana kerja interrupt dengan timer/counter, tugas 4
berbeda saat interrupt terjadi dimana interrupt
praktikan mencoba memahami bagaimana kerja interrupt
terjadi setiap 1 detik, tugas II.C.2 praktikan diminta
external.
untuk mengeluarkan output (LED menyala)
Kata kunci: ATMega 8535, AVR, Interrupt, berbeda saat interrupt terjadi dimana interrupt
Timer/Counter. terjadi setiap (x mod 5) + 2 detik, dimana x adalah
nomor kelompok. Tugas 4 praktikan mencoba
1. PENDAHULUAN memahami kerja interrupt external, pada tugas 4
Pada percobaan ini praktikan mulai dikenalkan terbagi 2 sub tugas yaitu, tugas II.D.1 praktikan
dengan mikroporsesor ATMEga 8535 dan software diminta mengeluarkan output (LED menyala)
WinAVR yang menggunakan Bahasa berbeda saat interrupt external dilakukan (tombol
pemrograman C. Praktikum kali ini memiliki IS1 ditekan), tugas II.D.2 praktikan diminta
tujuan sebagai berikut. mengeluarkan output (LED menyala) berbeda
tergantung 3 kondisi, tanpa interrupt maka LED
• Praktikan memahami datasheet ATMega menyala bergantian 0xFF dengan 0x00 setiap 500
8535. ms, saat interrupt 1 (IS1 ditekan) maka LED
• Praktikan mampu membuat aplikasi menyala bergantian 0x99 dengan 0x66 setiap 500
Timer/Counter dan Interrupt pada AVR ms, saat interrupt 2 (IS2 ditekan) maa LED menyala
dengan menggunakan Bahasa bergantian 0xXX dengan 0xYY setiap 500 ms,
dimana XX merupakan nim 1 anggota kelompok,
pemrograman C pada WinAVR.
dan YY merupakan nim 2 anggota kelompok.
• Praktikan mampu membuat aplikasi
External Interrupt pada AVR dengan 2. STUDI PUSTAKA
menggunakan Bahasa pemrograman C
pada WinAVR. 2.1 WINAVR
Praktikum kali ini terdiri dari empat tugas utama. WinAVR adalah sebuah paket AVR Development
Pada tugas 1 praktikan mencoba memahami System yang bersifat open source dengan sederetan
bagaimana kerja timer/counter internal, pada program pendukung yakni : IDE, Assembler,
tugas 1 terbagai dua sub tugas, yaitu II.A.1 Compiler, Linker, Librarian, File Converter, C
praktikan diminta untuk mengeluarkan output Library, Programmer AVR, Debugger, In-Circuit
(LED menyala) bergantian setiap 1 detik antara 4bit Emulator, dan beberapa program utilitas lainnya
MSB dan 4bit LSB, tugas 1.A.2 praktikan diminta [2].
untuk mengeluarkan output (LED menyala)
bergantian setiap (x mod 5) + 2 detik, dimana x 2.1.1 ASSEMBLER DAN COMPILER
merupakan nomor kelompok, antara 4bit MSB dan WinAVR menggunakan as sebagai assembler
4bit LSB. Pada tugas 2 praktikan mencoba dalam paket programnya. as merupakan
memahami bagaimana kerja external clock, pada assembler multi-target yang bersifat open source.
tugas 2 terbagi 2 sub tugas, yaitu II.B.1 praktikan Sedangkan compiler yang digunakan dalam paket
diminta untuk mengeluarkan output (LED
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1
WinAVR adalah GNU Compiler Collection, Deskripisi register Timer/Counter 8 bit
atau GCC, sebuah kompiler open source yang (Datasgeet ATMega8535 Hal. 583)
tersedia untuk berbagai platform prosesor dan
sistem operasi. GCC yang ada dalam paket
WinAVR adalah compiler dengan target khusus
yakni mikrokontroler AVR [2].

2.1.2 EDITOR/IDE
Untuk keperluan editing program, WinAVR Konfigruasi mode operasi (Datasgeet
dilengkapi dengan Programmers Notepad (PN). ATMega8535 Hal. 83)
Program yang juga open source ini memilki fitur-
fitur sebuah IDE secara umum. PN memiliki
fasilitas command-line tool yang dapat digunakan
untuk mengeksekusi perintah-perintah sistem dan
meng-capture hasil eksekusi dan menampilkannya
di layar IDE, sangat ideal untuk memanggil
perintah make untuk proses kompilasi program
dan memanggil program downloader untuk Pengaturan Perilaku pin OCO (Datasgeet
memrogram IC AVR setelah kompilasi selesai. ATMega8535 Hal. 84)
WinAVR menggunakan AVRDUDE sebagai
programmer IC AVR [2].
Programmers Notepad tidak memiliki fitur
selengkap produk komersial, oleh karenanya
pembuatan proyek aplikasi masih mengandalkan
makefile. WinAVR juga Pengaturan sumber clock (Datasgeet
mengikutsertakan WinAVR Makefile ATMega8535 Hal. 85)
Editor dengan sebuah template yang siap untuk
dimodifikasi melalui perantaraan menu yang
lengkap [2].
Seperti telah dikatakan di atas, Paket WinAVR
menggunakan program AVRDUDE sebagai
downloader. Program ini mendukung berbagai
tipe ISP Downloader seperti STK200, DAPA, dll
[2].
Register-register penting lain (Datasgeet
2.1.3 DEBUGGER/SIMULATOR/EMUL
ATMega8535 Hal. 85)
ATOR

Masih menggunakan program open source, paket


WinAVR menggunakan GDB dan Insight sebagai
debugger yang dapat dikombinasikan dengan
simulavr untuk mensimulasikan program [2].
Ada beberapa paket program gratis yang dapat
digunakan sebagai simulator mendampingi
WinAVR GCC sebagai kompiler, yakni:
• ATMEL AVR Studio
• VMLAB (Visual Micro Lab)
• Proteus VSM
2.3 KONFIGUTASI EXTERNAL
2.2 KONFIGUTASI TIMER/COUNTER DAN INTERRUPUT
INTERRUPUT
Register-register untuk keperluan external
Gambar dan table berikut ini dikutipkan dari interrupt diuraikan pada hal. 68-70 di datasheet
datasheet ATMega 8535 [1]. ATMega8535. Di sini diberikan kutipan-
kutipannya [1].

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2


3.2 TUGAS 1

Buatlah program dengan source


code sesuai modul praktikuam
tugas II.A.1.

Compile dan download program


tersebut ke ATMega8535, amati
keluarannya.

Modifikasi source code programnya


sehingga LED berkedip bergantian
dengan delay 2 detik.

Compile dan download program


tersebut ke ATMega8535, amati
keluarannya.

Gambar 3-1 Tugas 1

3.3 TUGAS 2
3. METODOLOGI
Buatlah program dengan source
code sesuai modul praktikuam
3.1 ALAT DAN KOMPONEN YANG tugas II.B.1.
DIGUNAKAN

1. Komputer (1 buah)
2. Kit ATMega 8535 (1 buah)
Compile dan download program
3. Software WinAVR tersebut ke ATMega8535, amati
keluarannya.

Modifikasi source code programnya


sehingga LED menyala sela,a 3
detik ketika tombol ditekan 3 kali.

Compile dan download program


tersebut ke ATMega8535, amati
keluarannya.

Gambar 3-2 Tugas 2

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3


3.4 TUGAS 3 4. HASIL DAN ANALISIS
Pada modul percobaan kali ini praktikan
Buatlah program dengan source
code sesuai modul praktikuam mendapatkan hasil sebagai berikut.
tugas II.C.1.
4.1 TUGAS II.A.1
Flowchart init_tim()
Compile dan download program
tersebut ke ATMega8535, amati
keluarannya.

Modifikasi source code


programnya sehingga interrupt
terjadi setiap 2 detik.

Compile dan download program


tersebut ke ATMega8535, amati
keluarannya.

Gambar 3-3 Tugas 3

3.5 TUGAS 4 Flowchart main

Buatlah program dengan source


code sesuai modul praktikuam
tugas II.D.1.

Compile dan download program


tersebut ke ATMega8535, amati
keluarannya. init_tim()

Modifikasi source code programnya


sehingga LED menyala bergantian
0xFF ke 0x00 selama 0.5 detik

Dan saat interrupt 1 ditekan maka


LED menyala bergantian 0x99 ke
0x66 selama 0.5 detik

Dan saat interrupt 2 ditekan maka


LED menyala bergantian 0x54 ke
0x55 selama 0.5 detik.

Compile dan download program


tersebut ke ATMega8535, amati
keluarannya.

Gambar 3-3 Tugas 4

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4


Flowchart Delay()

Flowchart main

Hasil init_tim()

Dari hasil diatas terlihat bahwa LED akan menyala


bergantian antara 4bit MSB dengan 4bit LSB setiap Flowchart Delay()
1 detik.
Jika kita lihat flowchart diatas, delay LED
bergantian 1 detik didapatkan pada fungsi delay
dimana kita menggunakan metode compare,
sehingga LED akan berganti saat register TCNT =
register OCR, untuk didapatkan 1 detik maka kita
ubah nilai OCR sehingga TCNT dapat bernilai
sama dengan OCR saat setiap 1 detik, untuk itu kita
hitung OCR dengan rumus berikut.
𝑇𝑑𝑒𝑙𝑎𝑦 × 𝑓𝐶𝐿𝐾
𝑂𝐶𝑅 =
𝑁
Dimana N merupakan nilai prescaler, karena pada
program ini kita menggunakan prescaler 256 dan
frekuensi clock 7372800 Hz, kita dapatkan agar
delay 1 detik, OCR bernilai 28800 atau 0x7080.

4.2 TUGAS II.A.2


Flowchart init_tim()
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5
Flowchart main

Hasil

Dari hasil diatas terlihat bahwa LED akan menyala


bergantian antara 4bit MSB dengan 4bit LSB setiap
2 detik.
Jika kita lihat flowchart diatas program yang
digunakan hanya berbeda pada fungsi delay, delay
LED bergantian 2 detik didapatkan pada fungsi
delay dimana kita menggunakan metode compare,
sehingga LED akan berganti saat register TCNT =
register OCR, untuk didapatkan 2 detik maka kita
ubah nilai OCR sehingga TCNT dapat bernilai
sama dengan OCR saat setiap 2 detik, untuk itu kita
hitung OCR dengan rumus berikut. Hasil

𝑇𝑑𝑒𝑙𝑎𝑦 × 𝑓𝐶𝐿𝐾
𝑂𝐶𝑅 =
𝑁
Dimana N merupakan nilai prescaler, karena pada
program ini kita menggunakan prescaler 256 dan
frekuensi clock 7372800 Hz, kita dapatkan agar
delay 2 detik, OCR bernilai 57600 atau 0xE100.

4.3 TUGAS II.B.1


Flowchart init_tim()
Dari hasil diatas terlihat bahwa LED menyala
10101010 dan akan berganti menjadi 01010101
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6
setiap tombol interrupt yaitu IS1 ditekan 2x, dan
kembali menjadi 10101010 setelah 500 ms.
Jika kita lihat flowchart diatas program
menggunakan external clock untuk menambah
nilai TCNT yang awalnya bernilai 123 dan kita
berikan batas maksimal TCNT yaitu 124 kita set
pada register OCR, setiap interrupt ditekan 1x
maka TCNT bertambah 1, dan overflow akan
didapat saat interrupt dtekan 2x dimana TCNT
(125) akan bernilai lebih dari OCR (124).

4.4 TUGAS II.B.2


Flowchart init_tim()

Flowchar Delay()
Flowchart main

Hasil

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7


Dari hasil diatas terlihat bahwa LED menyala
10101010 dan akan berganti menjadi 0xFF setiap
tombol interrupt yaitu IS1 ditekan 3x, dan kembali
menjadi 10101010 setelah 3 s.
Jika kita lihat flowchart diatas program
menggunakan external clock untuk menambah
nilai TCNT yang awalnya bernilai 123 dan kita Flowchart main
berikan batas maksimal TCNT yaitu 125 kita set
pada register OCR, setiap interrupt ditekan 1x
maka TCNT bertambah 1, dan overflow akan
didapat saat interrupt dtekan 3x dimana TCNT
(126) akan bernilai lebih dari OCR (125). Kita dapat
merubah nilai awal TCNT atau nilai batas OCR
asalkan OCR-TCNT+1 = 3, yaitu banyaknya tombol
ditekan yang kita inginkan.
Pada tugas ini juga kita menggunakan delay
dengan timer bukan delay biasa, sehingga kita
perlu setting timer yang digunakan, kita inginkan
delay 3 s, dan dengan metode CTC kita tentukan
OCR dengan rumus berikut.
𝑇𝑑𝑒𝑙𝑎𝑦 × 𝑓𝐶𝐿𝐾
𝑂𝐶𝑅 =
𝑁
Dimana N merupakan nilai prescaler, karena pada
program ini kita menggunakan prescaler 1024 dan
frekuensi clock 7372800 Hz, kita dapatkan agar
delay 3 s, OCR bernilai 21600 atau 0x5460.

4.5 TUGAS II.C.1


Flowchart init_int() Hasil

Gambar Keterangan

Loop terus
menurus
selama delay
masih belum
mencapai
keliapatan 1
detik.

Setiap delay
mencapai
kelipatan 1
detik, LED
menyala
semua.
Flowchart ISR
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8
Dari hasil diatas terlihat bahwa LED akan menyala
bergantian dari 01010101 menjadi 10101010 setiap
100 ms, dan setiap 1 detik maka interrupt akan
terjadi sehingga LED menyala semua 0xFF.
Jika kita perhatikan flowchart diatas, kita gunakan
ISR() untuk melakukan interrupt dimana didalam
ISR() merupakan perintah yang akan dilaksanakan
ketika interrupt terjadi.
Untuk mengatur agar interrupt terjadi setiap 1
detik kita gunakan metode overflow dan mode
operasi timer normal, dalam mode ini timer akan
terus bertambah sampai overflow, ketika sudah
overflow maka timer akan diset kembali menjadi 0,
agar timer overflow setiap 1 detik, kita atur nilai
awal TCNT agar TCNT overflow setiap 1 detik, kita
gunakan rumus berikut. Flowchart main
𝑇𝑑𝑒𝑙𝑎𝑦 × 𝑓𝐶𝐿𝐾
𝑇𝐶𝑁𝑇 = (1 + 𝐹𝐹𝐹𝐹ℎ) −
𝑁
Dimana FFFFh merupakan batas maksimal
overflow dari timer, dan N merupakan prescaler
yang digunakan. Dengan menggunakan timer 1
yang berupa timer 16-bit maka FFFFh+1 = 65535,
dan dengan prescaler 1024 kita dapatkan nilai awal
dari TCNT1 adalah 58335 atau 0xE3DF.

4.6 TUGAS II.C.2


Flowchart init_int()

Hasil

Gambar Keterangan

Loop terus
menurus
Flowchar tISR selama
delay
masih
belum
mencapai
keliapatan
2 detik.

Setiap
delay
mencapai
kelipatan 2
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9
detik, LED
menyala
semua.

Dari hasil diatas terlihat bahwa LED akan menyala


bergantian dari 01010101 menjadi 10101010 setiap
100 ms, dan setiap 2 detik maka interrupt akan
terjadi sehingga LED menyala semua 0xFF.
Jika kita perhatikan flowchart diatas, kita gunakan
ISR() untuk melakukan interrupt dimana didalam
ISR() merupakan perintah yang akan dilaksanakan
ketika interrupt terjadi.
Untuk mengatur agar interrupt terjadi setiap 2
detik kita gunakan metode overflow dan mode
operasi timer normal, dalam mode ini timer akan
terus bertambah sampai overflow, ketika sudah
overflow maka timer akan diset kembali menjadi 0,
agar timer overflow setiap 2 detik, kita atur nilai
awal TCNT agar TCNT overflow setiap 2 detik, kita
gunakan rumus berikut.
𝑇𝑑𝑒𝑙𝑎𝑦 × 𝑓𝐶𝐿𝐾
𝑇𝐶𝑁𝑇 = (1 + 𝐹𝐹𝐹𝐹ℎ) − Flowchart main
𝑁
Dimana FFFFh merupakan batas maksimal
overflow dari timer, dan N merupakan prescaler
yang digunakan. Dengan menggunakan timer 2
yang berupa timer 16-bit maka FFFFh+1 = 65535,
dan dengan prescaler 1024 kita dapatkan nilai awal
dari TCNT1 adalah 51135 atau 0xC7BF.

4.7 TUGAS II.D.1


Flowchart Init_Ext_Int()

Hasil

Gambar Keterangan

Flowchart ISR1
Loop terus
menurus
setiap 500
ms selama
interrupt
external
belum

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 10


ditekan
(tombol IS1)

Saat tombol
interrupt
external
ditekan
(IS1) maka
LED
menyala
akan
bergeser 1
bit ker kiri
dari
00000001
Flowchart ISR1
setiap 250
ms sampai
menjadi
10000000

Dari hasil diatas terlihat bahwa LED akan menyala


bergantian dari 01010101 menjadi 10101010 setiap
500 ms selama interrupt belum ada (tombol IS1
belum ditekan), ketika interrupt sudah ada (tombol
IS1 ditekan) maka LED akan menyala menjadi
00000001 dan bergeser 1 bit ke kiri setiap 250 ms
sampai menjadi 10000000, dan akan kembali
melanjutkan keadaan program sebelum interrupt
ditekan, bila interrupt ditekan saat sedang delay,
maka setelah interrupt delay akan dilanjutkan, dan
sebagainya.
Jika kita perhatikan flowchart diatas, kita gunakan Flowchart ISR2
ISR() untuk melakukan interrupt dimana didalam
ISR() merupakan perintah yang akan dilaksanakan
ketika interrupt terjadi.
Untuk mengatur agar interrupt external dapat
digunakan, kita atur register MCUCR, GICR, dan
GIFR, karena kita menggunakan tombol IS1
sebagai interrupt external dan tombol tersebut kita
hubungkan dengan INT0 yang berada pada pin
PD2, maka MCUCR kita set menjadi 0x02, GICR
menjadi 0x40, dan GIFR menjadi 0x40. Dimana
letak bit ISC01, INT0, dan INTF0 kita set menjadi 1.

4.8 TUGAS II.D.2


Flowchart Init_Ext_Int()

Flowchart main

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 11


dengan jeda
500 ms

Dari hasil diatas terlihat bahwa LED akan menyala


bergantian dari 0xFF menjadi 0x00 setiap 500 ms
selama interrupt belum ada (tombol IS1 dan IS2
belum ditekan), ketika interrupt sudah ada (tombol
IS1 ditekan) maka LED akan menyala bergantian
dari 0x99 menjadi 0x66 dengan delay 500 ms, ketika
interrupt sudah ada (tombol IS2 ditekan) maka
LED akan menyala bergantian dari 0x54 menjadi
0x54 dengan delay 500 ms, dan akan kembali
melanjutkan keadaan program sebelum interrupt
ditekan, bila interrupt ditekan saat sedang delay,
maka setelah interrupt delay akan dilanjutkan, dan
sebagainya.
Jika kita perhatikan flowchart diatas, kita gunakan
ISR() untuk melakukan interrupt dimana didalam
ISR() merupakan perintah yang akan dilaksanakan
ketika interrupt terjadi.
Untuk mengatur agar interrupt external dapat
Hasil digunakan, kita atur register MCUCR, GICR, dan
GIFR, karena kita menggunakan tombol IS1 dan IS2
Gambar Keterangan sebagai interrupt external dan tombol IS1 kita
hubungkan dengan INT0 yang berada pada pin
Loop terus PD2 dan tombol IS2 kita hubungkan dengan INT1
menurus yang berada pada pin PD3, maka MCUCR kita set
setiap 500 menjadi 0x0A, GICR menjadi 0xC0, dan GIFR
ms selama menjadi 0xC0. Dimana letak bit ISC11, ISC01, INT0,
interrupt INT1, INTF0 dan INTF1 kita set menjadi 1
external
belum 5. KESIMPULAN
ditekan Berdasarkan percobaan diatas praktikan dapat
(tombol IS1 menyimpulkan :
dan IS2)
• Prescaler digunakan untuk memperbesar
Saat tombol delay dengan merubah frekuensi yang
interrupt besar menjadi lebih kecil.
external 1 • Delay biasa menahan normal code agar
ditekan (IS1) berjalan setelah delay yang diset, delay
maka LED timer tidak menahan normal code
menyala melainkan berjalan secara parallel dan saat
bergantian delay berahir maka akan melompat pada
dari 0x99 code yang disediakan setelah delay timer
mejadi 0x66 lalu kembali ke main code.
dengan jeda
500 ms • TCNT merupakan register yang
menyimpna nilai timer/counter. OCR
Saat tombol merupakan register yang menyimpan
interrupt compare TCNT saat mdoe CTC. TIMSK
external 2 merupakan register yang mengatur
ditekan (IS2) interrupt. TIFR merupakan register yang
maka LED menyimpan flag dati interrupt.
menyala • Pada mode normal maka TCNT akan terus
bergantian bertambah sendiri sampai overflow, TCNT
dari 0x54
mejadi 0x55
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 12
awal harus diset agar overflow terjadi pada DAFTAR PUSTAKA
waktu yang diinginkan.
[1] Hutabarat, Mervin T., et. all., Praktikum Sistem
• Pada mode CTC batas overflow TCNT Mikroporsesor, hal 7-16, Laboratorium Dasar
dapat diubah dengan mengeset OCR Teknik Elektro, Bandung, 2020
sehingga overflow terjadi saat TCNT >
[2] https://telinks.wordpress.com/2008/12/05/
OCR.
vinavr-avr-gcc-for-windows/, 09 Februari
• Saat interrupt external dan internal terjadi 2020, 18:59.
bersamaan, maka AVR akan
mendahulukan interrupt external.
• ISR() berfungsi sebagai prosedur yang
menyimpan perintah yang akan dieksekusi
saat interrupt terjadi.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 13


LAMPIRAN
Source Code while (1)
{
Tugas II.A.1 PORTA = 0x0F;
#include <avr/io.h> Delay();
void init_tim(void); PORTA = 0xF0;
void Delay(void); Delay();
int main(void) }
{ return 0;
DDRA=0xFF; }
PORTA = 0x00;
init_tim(); void init_tim(void)
while (1) {
{ //mode operasi CTC, sumber clock
PORTA = 0x0F; prescaller 256
Delay(); TCCR1A = 0;
PORTA = 0xF0; TCCR1B = 0b00001101;
Delay(); //overflow interrupt disable
} TIMSK|=(0<<TOIE1);
return 0; }
}
void Delay(void)
void init_tim(void) {
{ //overflow interrupt enable
//mode operasi CTC, sumber clock TIMSK|=_BV(TOIE1);//(1<<TOIE1);
prescaller 256 //penentuan nilai awal timer
TCCR1A = 0; TCNT1H = 0;
TCCR1B = 0b00001100; TCNT1L = 0;
//overflow interrupt disable //penentuan nilai compare untuk
TIMSK|=(0<<TOIE1); delay 2 detik
} OCR1AH = 0xE1;
OCR1AL = 0x00;
void Delay(void) //menunggu hingga compare match,
{ nilai TCNT1 = OCR1A)
//overflow interrupt enable
TIMSK|=_BV(TOIE1);//(1<<TOIE1); loop_until_bit_is_set(TIFR,OCF1A);
//penentuan nilai awal timer //meng-nol-kan flag
TCNT1H = 0; TIFR|=_BV(OCF1A);
TCNT1L = 0; //overflow interrupt disable
//penentuan nilai compare untuk TIMSK|=_BV(TOIE1);
delay 1 detik }
OCR1AH = 0x70;
OCR1AL = 0x80;
Tugas II.B.1
//menunggu hingga compare match,
#include<avr/io.h>
nilai TCNT1 = OCR1A)
#include<avr/io.h>
#define F_CPU 7372800UL // 8MHz
loop_until_bit_is_set(TIFR,OCF1A);
#include <util/delay.h>
//meng-nol-kan flag
TIFR|=_BV(OCF1A);
void init_tim(void);
//overflow interrupt disable
TIMSK|=_BV(TOIE1);
int main(void)
}
{
init_tim();
DDRA=0xFF;
Tugas II.A.2 while (1)
#include <avr/io.h> {
void init_tim(void); //penentuan nilai awal timer
void Delay(void); TCNT0 = 123;
int main(void) //penentuan nilai compare
{ OCR0 = 124;
DDRA=0xFF; //menanti compare match
PORTA = 0x00;
init_tim(); while(bit_is_clear(TIFR,OCF0))
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 14
{ TIMSK=(0<<OCIE0);
PORTA = 0b10101010; }
}
//meng-nol-kan flag void Delay(void)
TIFR|=_BV(OCF0); {
PORTA = 0b01010101; //overflow interrupt enable
_delay_ms(500); TIMSK|=_BV(TOIE1);//(1<<TOIE1);
} //penentuan nilai awal timer
return 0; TCNT1H = 0;
} TCNT1L = 0;
//penentuan nilai compare untuk
void init_tim(void) delay 3 detik
{ OCR1AH = 0x54;
//mode operasi dan sumber clock OCR1AL = 0x60;
TCCR0=0b00000110; //menunggu hingga compare match,
//overflow interrupt disable nilai TCNT1 = OCR1A)
TIMSK=(0<<OCIE0);
} loop_until_bit_is_set(TIFR,OCF1A);
//meng-nol-kan flag
Tugas II.B.2 TIFR|=_BV(OCF1A);
#include<avr/io.h> //overflow interrupt disable
#include<avr/io.h> TIMSK|=_BV(TOIE1);
#define F_CPU 7372800UL // 8MHz }
#include <util/delay.h>
Tugas II.C.1
void init_tim(void); #include <avr/io.h>
void Delay(void); #define F_CPU 7372800UL
#include <util/delay.h>
int main(void) #include <avr/interrupt.h>
{ void init_int(void);
init_tim(); ISR(TIMER1_OVF_vect)
DDRA=0xFF; {
while (1) unsigned char i;
{ PORTA=0xFF;
//penentuan nilai awal timer _delay_ms(200);
TCNT0 = 123; TIFR=(1<<TOV1);
//penentuan nilai compare TCNT1H=0xE3;
OCR0 = 125; TCNT1L=0xDF;
//menanti compare match }

while(bit_is_clear(TIFR,OCF0)) int main(void)


{ {
PORTA = 0b10101010; init_int();
} DDRA=0xFF;
//meng-nol-kan flag while (1)
TIFR|=_BV(OCF0); {
PORTA = 0xFF; PORTA = 0b01010101;
Delay(); _delay_ms(100);
} PORTA = 0b10101010;
return 0; _delay_ms(100);
} TIMSK=0b000100;
}
void init_tim(void) return 0;
{ }
//mode operasi dan sumber clock
TCCR0=0b00000110; void init_int(void)
//mode operasi CTC, sumber {
clock prescaller 1024 TIMSK =0b000000;
TCCR1A = 0; TCCR1B=0b00000101; //prescalar
TCCR1B = 0b00001101; 1024
//overflow interrupt disable TCNT1H=0xE3;
TIMSK|=(0<<TOIE1); TCNT1L=0xDF;
//overflow interrupt disable sei();

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 15


} sei();
DDRA=0xFF;
Tugas II.C.2 while (1)
#include <avr/io.h> {
#define F_CPU 7372800UL PORTA = 0b10101010;
#include <util/delay.h> _delay_ms(500);
#include <avr/interrupt.h> PORTA = 0b01010101;
void init_int(void); _delay_ms(500);
ISR(TIMER1_OVF_vect) }
{ return 0;
unsigned char i; }
PORTA=0xFF;
_delay_ms(200); void Init_Ext_Int(void)
TIFR=(1<<TOV1); {
TCNT1H=0xC7; MCUCR=0x02;
TCNT1L=0xBF; MCUCSR=0x00;
} GICR=0x40;
GIFR=0x40;
int main(void) }
{
init_int(); Tugas II.D.2
DDRA=0xFF; #include <avr/io.h>
while (1) #include <util/delay.h>
{ #include <avr/interrupt.h>
PORTA = 0b01010101; #define F_CPU 7372800UL
_delay_ms(100);
PORTA = 0b10101010; void Init_Ext_Int(void);
_delay_ms(100);
TIMSK=0b000100; ISR(INT0_vect)
} {
return 0; PORTA = 0x99;
} _delay_ms(500);
PORTA = 0x66;
void init_int(void) _delay_ms(500);
{ }
TIMSK=0b000000;
TCCR1B=0b00000101; //prescalar ISR(INT1_vect)
1024 {
TCNT1H=0xC7; PORTA = 0x54;
TCNT1L=0xBF; _delay_ms(500);
sei(); PORTA = 0x55;
} _delay_ms(500);
}
Tugas II.D.1
#include <avr/io.h> int main(void)
#define F_CPU 7372800UL {
#include <util/delay.h> Init_Ext_Int();
#include <avr/interrupt.h> sei();
void Init_Ext_Int(void); DDRA = 0xFF;
ISR(INT0_vect) while (1)
{ {
unsigned char i=0x01,n; PORTA = 0xFF;
for(n=0;n<8;++n) _delay_ms(500);
{ PORTA = 0x00;
PORTA = i; _delay_ms(500);
_delay_ms(250);
i=(i<<1)|(i>>7); }
} return 0;
} }

int main(void) void Init_Ext_Int(void)


{ {
Init_Ext_Int(); MCUCR = 0x0A; // ganti

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 16


MCUCSR = 0x00;
GICR = 0xC0; // ganti
GIFR = 0xC0; // ganti
}

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 17

Anda mungkin juga menyukai