Anda di halaman 1dari 17

MODUL II TIMER, COUNTER, INTERRUPT

Raden Arifudin Nur Fauzan (13213080)


Asisten: Zuhditazmi (13212149)
Tanggal Percobaan: 29/03/2016
EL3214-Praktikum Sistem Mikroprosesor

Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB
Abstrak
Pada praktikum Timer, Counter, Interrupt ini dipelajari
mengenai cara kerja timer & counter pada ATMega8535
yang merupakan fungsi dasar untuk menghasilkan delay.
Dalam implementasinya dilakukan dengan cara pengujian
seperti delay dengan timer/counter, external clock sebagai
counter, aplikasi interrupt dengan timer/counter, dan external
interrupt.

PENDAHULUAN

Tujuan dari praktikum ini adalah:


a.

memahami datasheet ATMega 8535;

b.

mampu membuat aplikasi Timer/Counter


dan Interrupt pada AVR dengan
menggunakan bahasa pemrograman C
pada WinAVR; serta

2.

c.

Port C (PC0-PC7) merupakan pin I/O dua


arah dan pin fungsi khusus, yaitu TWI,
komparator analog, dan timer oscillator.

2.2.2

Timer/counter dapat digunakan dan diatur dengan


cara mengatur timer register. Timer berfungsi
sebagai pencacah untuk fungsi clock internal
maupun
eksternal.
Mikrokontroler
dapat
menerima interrupt dan akan segera melakukan
instruksi lain ketika sedang menjalankan suatu
tugas atau instruksi utama.

c.

Port B (PB0-PB7) merupakan pin I/O dua


arah dan pin fungsi khusus, yaitu
timer/counter, komparator analog, dan SPI.

d. Port D (PD0-PD7) merupakan pin I/O dua


arah dan pin fungsi khusus, yaitu
komparator analog, interupsi eksternal,
dan komunikasi serial.

Kata kunci: ATMega 8535, clock, counter, delay,


interrupt, timer.
1.

b.

Mikrokontroler ATMega 8535 memiliki 40 pin


untuk model PDIP dan 44 pin untuk model TQFP
dan PLCC.
a. VCC untuk tegangan pencatu daya positif.
b. GND untuk tegangan pencatu daya negatif.
c. Port A (PA0-PA7) sebagai pin I/O dua arah
dan sebagai input ADC.
d. Port B (PB0-PB7) sebagai pin I/O dua arah
dan pin fungsi khusus, yaitu timer/counter,
komparator analog, dan SPI.

mampu membuat aplikasi External


Interrupt pada AVR dengan menggunakan
bahasa pemrograman C pada WinAVR.

e.

Port C (PC0-PC7) sebagai pin I/O dua arah


dan pin fungsi khusus, yaitu TWI,
komparator analog, dan timer oscillator.

f.

Port D (PD0-PD7) sebagai pin I/O dua arah


dan pin fungsi khusus, yaitu komparator
analog,
interupsi
eksternal,
dan
komunikasi serial.

g.

RESET untuk melakukan reset program


dalam mikrokontroler.

STUDI PUSTAKA

2.1

MIKROKONTROLER ATMEGA8535

Mikrokontroler
ATMega
8535
merupakan
mikrokontroler CMOS 8 bit yang memiliki daya
rendah dan termasuk ke dalam basis arsitektur
RISC. ATMega 8535 dapat bekerja dengan
kecepatan tinggi dan mengonsumsi daya rendah
karena instruksi dijalankan pada satu siklus clock
serta ATMega8535 memiliki throughput mendekati
1 MIPS per MHz.

2.1.1
a.

I/O ATMEGA 8535


Port A (PA0-PA7) merupakan pin I/O dua
arah dan pin masukan ADC.

KONFIGURASI PIN
MIKROKONTROLER AVR ATMEGA
8535

h. XTAL1 dan XTAL2


pembangkit sinyal clock.

2.2

sebagai

input

i.

AVCC sebagai pin masukan tegangan


pencatu daya untuk ADC.

j.

AREF untuk pin tegangan referensi ADC.

REGISTER TIMER/COUNTER

Dalam penggunaan timer/counter dapat dilakukan


pengaturan terhadap register timer. Dalam datasheet
ATMega8535 terdapat beberapa register, seperti

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

TCCR (register timer/counter 8 bit (Timer/Counter 0)),


TCNT, OCR, TIMSK, dan TIFR.

Adapun percobaan yang dilakukan adalah sebagai


berikut.

DELAY DENGAN TIMER/COUNTER

3.1

Set alat dan komponen yang diperlukan (sesuai pada


modul). Buka software WinAVR kemudian atur sesuai
dengan ketentuan.

Eksekusi program yang telah dibuat (II.A.1) dengan


menggunakan perintah MakeAll dan MakeProgram
(pastikan kabel/konektor terhubung dengan benar).
Perhatikan dan amati nyala LED.

Modifikasi program yang dibuat sesuai dengan ketentuan


pada Tugas II.A.2. Ulangi langkah sebelumnya.

Gambar 3-1 Diagram percobaan 1


Gambar 2-1 Register TCCR, TCNT, OCR, TIMSK, dan TIFR

3.2

REGISTER EXTERNAL INTERRUPT

2.3

Dalam datasheet ATMega8535 tercantum pula


register-register yang dapat digunakan untuk
keperluan external interrupt, seperti MCUCSR,
GICR, dan GIFR.

EXTERNAL CLOCK SEBAGAI


COUNTER
Set alat dan komponen yang diperlukan (sesuai pada
modul). Buka software WinAVR kemudian atur sesuai
dengan ketentuan.

Eksekusi program yang telah dibuat (II.B.1) dengan menggunakan


perintah MakeAll dan MakeProgram (pastikan kabel/konektor
terhubung dengan benar). Perhatikan dan amati nyala LED.

Modifikasi program yang dibuat sesuai dengan ketentuan pada


Tugas II.B.2. Ulangi langkah sebelumnya.

Gambar 3-2 Diagram percobaan 2


Gambar 2-2 Register MCUCSR, GICR, dan GIFR

3.

METODOLOGI

Peralatan yang digunakan selama praktikum:


a.

1 unit computer

b.

Software WinAVR

c.

Sismin ATMega 8535

d. Trainer Board
e.

Power supply

f.

Kabel/konektor
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

3.3

APLIKASI INTERRUPT DENGAN

TIMER/COUNTER

Set alat dan komponen yang diperlukan (sesuai pada


modul). Buka software WinAVR kemudian atur sesuai
dengan ketentuan.

Eksekusi program yang telah dibuat (II.C.1) dengan


menggunakan perintah MakeAll dan MakeProgram
(pastikan kabel/konektor terhubung dengan benar).
Perhatikan dan amati nyala LED.

Modifikasi program yang dibuat sesuai dengan ketentuan


pada Tugas II.C.2. Ulangi langkah sebelumnya.

Gambar 3-3 Diagram percobaan 3

3.4

Gambar 4-1 Flowchart Tugas II.A.1

EXTERNAL INTERRUPT
Set alat dan komponen yang diperlukan (sesuai pada
modul). Buka software WinAVR kemudian atur sesuai
dengan ketentuan.

Eksekusi program yang telah dibuat (II.D.1) dengan


menggunakan perintah MakeAll dan MakeProgram
(pastikan kabel/konektor terhubung dengan benar).
Perhatikan dan amati nyala LED.

Modifikasi program yang dibuat sesuai dengan ketentuan


pada Tugas II.D.2. Ulangi langkah sebelumnya.

Gambar 3-4 Diagram percobaan 4

4.

HASIL DAN ANALISIS

Hasil dari beberapa percobaan tersebut disajikan


dalam bentuk tabel/citra gambar seperti berikut.

4.1

Gambar 4-2 Flowchart delay

Berdasarkan realisasi program yang telah


dibuat akan menghasilkan keluaran pada
PORT A yang terhubung pada LED
dengan konfigurasi seperti berikut.

DELAY DENGAN TIMER/COUNTER


A. Tugas II.A.1
Berikut ini merupakan flowchart program
dengan kode program terlampir.
LED

Bit

Gambar 4-3 Konfigurasi LED Tugas II.A.1


Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

Pada kode program tertulis DDRA =0xFF;


yang menunjukkan bahwa PORT A
digunakan sebagai inisialisasi output.
Berdasarkan kode program menunjukkan
bahwa LED akan menyala secara
bergantian antara 4 bit LSB kemudian
berganti dengan 4 bit MSB dengan delay 1
detik.
Delay yang digunakan pada program ini
diatur
oleh
fungsi
void
init_tim(void)
dan
void
Delay(void).
Pada mode operasi CTC, sumber clock
prescaller bernilai 256 dengan pengaturan
menggunakan register TTCR TTCR1A =
0; TCCR1B = 0b00001100; dan fungsi
interrupt disable TIMSK|=(0<<TOIE1);.
Implementasi fungsi delay dilakukan
dengan mengatur register OCR1AH dan
OCR1AL menggunakan nilai yang
diperoleh melalui persamaan berikut.

Gambar 4-4 Flowchart Tugas II.A.2


1 7372800
1 =
=
= 28800

256

Nilai register OCR1A adalah 28800 dalam


desimal atau 7080h dalam heksadesimal
yang dapat dipecah menjadi OCR1AH=
0x70 dan OCR1AL= 0x80 serta delay yang
terjadi adalah 1 detik.
Program ini berada pada loop dengan
durasi 1 detik setiap siklus sesuai perintah
loop_until_bit_is_set(TIFR,OCF1
A); yang akan menunggu nilai TCNT1
match dengan nilai OCR1A. Setelah selesai,
program akan keluar dari void Delay
dan kembali pada program utama. Ketika
terjadi match, flag (OCF1A) akan menjadi
nol dan overflow interrupt menjadi disable
untuk kembali pada program utama.
B. Tugas II.A.2
Berikut ini merupakan flowchart program
dengan kode program terlampir.

Berdasarkan realisasi program yang telah


dibuat akan menghasilkan keluaran pada
PORT A yang terhubung pada LED
dengan konfigurasi seperti berikut.

LED

Bit

Gambar 4-5 Konfigurasi LED Tugas II.A.2

Pada kode program tertulis DDRA =0xFF;


yang menunjukkan bahwa PORT A
digunakan sebagai inisialisasi output.
Berdasarkan kode program menunjukkan
bahwa LED akan menyala secara
bergantian antara 4 bit LSB kemudian
berganti dengan 4 bit MSB dengan delay 6
detik sesuai dengan ketentuan pada modul
dan kelompok praktikan adalah kelompok
9 ( = (95) + 2).
Pada Tugas II.A.2 tetap menggunakan
prinsip program yang sama dengan Tugas
II.A.1 tetapi dengan menggunakan delay
sebesar 6 detik sesuai dengan ketentuan
perhitungan pada modul. Implementasi
fungsi delay dilakukan dengan mengatur
register
OCR1AH
dan
OCR1AL
menggunakan nilai yang diperoleh melalui
persamaan berikut.
1 =


6 7372800
=
= 43200

1024

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

Nilai register OCR1A adalah 43200 dalam


desimal atau A8C0h dalam heksadesimal
yang dapat dipecah menjadi OCR1AH=
0xA8 dan OCR1AL= 0xC0 serta delay yang
terjadi adalah 6 detik. Prescaller yang
digunakan adalah 1024 sehingga nilai
register TCCR1B=0B00001101.
Prescaler merupakan rangkaian pencacah
elektrik yang akan mereduksi frekuensi
sinyal elektrik pada frekuensi tinggi
manjadi frekuensi yang lebih rendah
dengan
pembagian
menggunakan
bilangan integer. Prescaler dapat membuat
timer bekerja pada clock tertentu sesuai
dengan keinginan pengguna.

EXTERNAL CLOCK SEBAGAI


COUNTER

4.2

A. Tugas II.B.1
Berikut ini merupakan flowchart program
dengan kode program terlampir.

State 2
LED
Bit

Gambar 4-7 Konfigurasi LED Tugas I.B.1

Kondisi awal LED tertampil seperti pada


state 1 dan pada saat menerima 2 kali
penekanan tombol (button IS3-PB0) akan
berubah konfigurasi menjadi state 2
dengan delay selama 500 ms kemudian
berpindah kembali pada state 1.
Perintah TCCR0=0b00000110; pada
mode operasi dan sumber clock menunjukkan bahwa external clock source
terletak pada pin T0 dan clock pada fallingedge.
Kemudian
dilakukan
pula
pengaturan overflow interrupt disable
dengan perintah TIMSK=(0<<OCIE0);.
Pada
program
utama,
dilakukan
perbandingan
nilai
TCNT0
yang
sebelumnya bernilai 123 diatur menjadi
nilai awal dengan OCF0. Hal ini
berlangsung ketika register tersebut
memiliki kesamaan nilai dan akan
menunjukkan nilai 1 sehingga program
tidak masuk kedalam kondisi perulangan
while. Ketika TCNT0=OCR0 flag OCF0
bernilai 0 maka program masuk ke dalam
kondisi perulangan while.
B. Tugas II.B.2
Berikut ini merupakan flowchart program
dengan kode program terlampir.

Gambar 4-6 Flowchart Tugas II.B.1

Berdasarkan realisasi program yang telah


dibuat akan menghasilkan keluaran pada
PORT A yang terhubung pada LED
dengan konfigurasi seperti berikut.
State 1
LED
Bit

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

APLIKASI INTERRUPT DENGAN

4.3

TIMER/COUNTER
A. Tugas II.C.1

Berikut ini merupakan flowchart program


dengan kode program terlampir.

Gambar 4-8 Flowchart Tugas II.B.2

Berdasarkan realisasi program yang telah


dibuat akan menghasilkan keluaran pada
PORT A yang terhubung pada LED
dengan konfigurasi seperti berikut.
State 1
LED
Bit

0
Gambar 4-10 Flowchart Tugas II.C.1

State 2

Berdasarkan realisasi program yang telah


dibuat akan menghasilkan keluaran pada
PORT A yang terhubung pada LED
dengan konfigurasi seperti berikut.

LED
Bit

Gambar 4-9 Konfigurasi LED Tugas II.B.2

State 1

Pada tugas ini menggunakan prinsip yang


mirip dengan Tugas II.B.2 dengan
beberapa perubahan seperti jumlah
interupsi penekanan tombol menjadi 7 kali
sesuai dengan ketentuan pada modul yaitu
= (95) + 3 . Ketika program mencapai state 2, LED akan menyala semua
sesuai dengan konfigurasi PORTA=0xFF
dengan lama delay 7 detik. Nilai awal timer
pada program utama diatur menjadi 1 dan
nilai compare diatur menjadi 7.

LED

Bit

State 2
LED
Bit

Gambar 4-11 Konfigurasi LED Tugas II.C.1

Pada kondisi state 1 LED menyala


bergantian dengan delay 100 ms dan akan
menuju pada state 2 ketika mencapai waktu
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

200 ms terakhir dalam rentang waktu 1


detik
serta
LED
menyala
secara
keseluruhan.
Pada tugas ini digunakan interrupt dengan
timer/counter sehingga ketika program
mencapai interrupt kemudian akan
menjalankan ISR dan dilanjukan dengan
program default yang sedang berjalan.
Pada prosedur void init_int (void),
perintah
TIMSK=0b000000;
akan
membuat interrupt menjadi disable.
Kemudian akan digunakan Timer0 yang
ditunjukkan dengan pengaturan TCCR0=
0b00000101;
dan
menggunakan
prescaller 1024. TCNT0 diset 0x00 sehingga
counter diatur menjadi 0. Fungsi sei()
pada prosedur void init_int (void)
digunakan untuk membuat kode assembler
dari fungsi menjadi satu baris saja agar
tidak melakukan overwrite terhadap
pemanggilan fungsi lain.
Program utama menjalankan prosedur
void init_int (void) lalu melakukan
assign PORTA sebagai output dengan
perintah DDRA=0xFF. Kemudian program
diberi delay selama 0.1 detik untuk
memberikan output 0b10101010. Setelah
itu, TIMSK diatur menjadi 0b000100
sehingga interrupt menjadi enable dan
masuk ke dalam ISR yang kemudian akan
kembali pada program utama. Interrupt
terpanggil setiap 1 detik.

Gambar 4-12 Flowchart Tugas II.C.2

Tugas ini merupakan gubahan dari Tugas


II.C.1. Pada kode program dilakukan
perubahan
pada
waktu
terjadinya
interupsi, yaitu menjadi setiap 6 detik
sesuai dengan ketentuan pada modul,
yaitu = (95) + 2.
Berdasarkan realisasi program yang telah
dibuat akan menghasilkan keluaran pada
PORT A yang terhubung pada LED
dengan konfigurasi seperti berikut.

B. Tugas II.C.2
Berikut ini merupakan flowchart program
dengan kode program terlampir.

State 1

LED

Bit

State 2
LED
Bit

Gambar 4-13 Konfigurasi LED Tugas II.C.1

Pada kondisi state 1 LED menyala


bergantian dengan delay 100 ms dan akan
menuju pada state 2 ketika mencapai waktu
200 ms terakhir dalam rentang waktu 6
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

detik
serta
keseluruhan.

LED

menyala

secara

Pada tugas ini digunakan interrupt dengan


timer/counter sehingga ketika program
mencapai interrupt kemudian akan
menjalankan ISR dan dilanjukan dengan
program default yang sedang berjalan.
Pada prosedur void init_int (void),
perintah
TIMSK=0b000000;
akan
membuat interrupt menjadi disable.
Kemudian akan digunakan Timer0 yang
ditunjukkan dengan pengaturan TCCR0
0b00000101;
dan
menggunakan
prescaller 1024. TCNT0 diset 0x00 sehingga
counter diatur menjadi 0. Fungsi sei()
pada prosedur void init_int (void)
digunakan untuk membuat kode assembler
dari fungsi menjadi satu baris saja agar
tidak melakukan overwrite terhadap
pemanggilan fungsi lain. Nilai TCNT
berubah menjadi 0x5740 mengikuti
ketentuan pada modul.
Program utama menjalankan prosedur
void init_int (void) lalu mengassign PORTA sebagai output dengan
perintah DDRA=0xFF. Kemudian program
diberi delay selama 0.1 detik untuk
memberikan output 0b10101010. Setelah
itu, TIMSK diatur menjadi 0b000100
sehingga interrupt menjadi enable dan
masuk ke dalam ISR yang kemudian akan
kembali pada program utama. Interrupt
terpanggil setiap 6 detik.

4.4

Gambar 4-14 Flowchart Tugas II.D.1

EXTERNAL INTERRUPT

A. Tugas II.D.1
Berikut ini merupakan flowchart program
dengan kode program terlampir.

Gambar 4-15 Flowchart ISR

Program utama akan terus berjalan secara


default.
Interrupt
eksternal
akan
menyebabkan fungsi ISR bekerja dan
meninggalkan program utama serta akan
segera menampilkan output LED yang
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

menyala dari LSB hingga MSB secara


berurutan dengan delay 0.25 detik.
Pada
program
utama,
terdapat
pemanggilan prosedur Init_Ext_Int
(void);
yang
berfungsi
sebagai
inisialisasi external interrupt. MCUCR
berfungsi untuk
mengatur
external
interrupt. Apabila terdapat perintah
MCUCR=0x02 maka akan menunjukkan
bahwa pin INT0 pada ATMega8535 adalah
tempat interrupt bekerja ketika input
memberikan sinyal falling edge (terhubung
dengan interrupt input IS2).
MCUCSR
berfungsi
pada
penggunaan
INT2
(asynchronous external interrupt). Apabila
MCUCSR diatur pada nilai 0x00 akan
menunjukkan bahwa MCUCSR tidak
digunakan. GICR merupakan register yang
berfungsi untuk menentukan INT yang
enable dalam melakukan interrupt request.
GIFR berfungsi untuk memberikan external
flag pada INT yang digunakan. GIFR di
atur pada nilai 0x40 karena bit ke-7
digunakan untuk mengaktifkan pin INT1
(terhubung dengan interrupt input IS3).

Bit

Gambar 4-16 Konfigurasi LED Tugas II.D.1

B. Tugas II.D.2
Berikut ini merupakan flowchart program
dengan kode program terlampir.

Program utama akan menjalankan


inisialisasi
prosedur
void
Init_Ext_Int
(void)
kemudian
dilanjutkan dengan melakukan assign
PORTA sebagai output dengan perintah
DDRA=0xFF.
Selanjutnya
dilakukan
kondisi perulangan pada PORTA dengan
nilai 0b10101010 dan 0b01010101
secara bergantian dengan delay 0.5 detik.
Ketika diberikan interrupt eksternal, maka
program akan menjalankan ISR dan
mengeluarkan
perintah
untuk
menghasilkan output seperti pada running
LED dari bit LSB ke bit MSB secara
bergantian dengan delay 0.25 detik..
Berdasarkan realisasi program yang telah
dibuat akan menghasilkan keluaran pada
PORTA yang terhubung pada LED dengan
konfigurasi seperti berikut.
State 1

LED

Bit

Gambar 4-17 Flowchart Tugas II.D.2

State 2
LED
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

LED

Bit

State 2 = INT1 (terhubung dengan IS3)

LED

Bit

Gambar 4-18 Konfigurasi LED Tugas II.D.2

5.

Gambar 4-17 Flowchart ISR

Tugas II.D.2 merupakan gubahan Tugas


II.D.1 dengan melakukan penambahan ISR
untuk INT1 kemudian mengatur MCUCR
menjadi 0b00001010, GICR=0b1100
0000, GIFR=0b11000000. Pada program
utama nilai PORTA diganti menjadi 0xFF
dan 0x00 secara bergantian dengan delay
0.5 detik.
Penggantian nilai MCUCR=0b00001010
digunakan untuk mengatur bit ISC 00, 01,
10, dan 11 agar pin INT1 dan INT2 berada
pada saat respon falling edge. GIFR dan
GICR diatur agar dapat mengaktifkan
interrupt dan flag untuk pin INT1 serta
INT0.
Berikut adalah tampilan LED untuk Tugas
II.D.2. LED akan bergantian konfigurasi
nyalanya selama 0.5 detik
State 1

LED

Bit

State 2 = INT0 (terhubung dengan IS2)

KESIMPULAN

Pengaturan timer/counter dan interrupt


dapat dilakukan dengan cara mengatur
register-register terkait dan sesuai dengan
fungsi yang akan dijalankan.

Register yang membuat timer dapat diatur


adalah register TCCR (Timer/Counter
Control Register).

Timer/Counter dapat memberikan delay


pada program dengan mengubahnya
menjadi timer dengan clock internal.
Prescaler berfungsi untuk memperlambat
timer dengan mengatur nilai pada register
TCCR1B.
Prescaler
diatur
dengan
menggunakan register CS pada TCCR. Ada
3 jenis prescaler yang dapat digunakan,
yaitu Timer 0 ( 8 bit ), Timer 1 (16 bit), dan
timer 2 (8 bit).

Clock External dapat menjadi counter


(perncacah) dengan menggunakan register
pencacah seperti TCNT dan digunakan OCR
sebagai nilai pembandingnya.

Interrupt akan dijalankan secara langsung


ketika interrupt trigger yang berasal dari
luar (external) atau dari dalam (internal)
diberikan
pada
sistem
dengan
memperhatikan
urutan
antreannya/eksekusinya. Ketika flag aktif,
program
secara
langsung
akan
menjalankan ISR (Interrupt Service Routine)
yang akan menangani interrupt yang
terjadi dan mengembalikan nilai logika
interrupt tersebut. ISR harus bekerja
dengan cepat agar tidak menhambat
keberjalanan program utama, atau
program dengan prioritas terendah. Ketika
ISR selesai dijalankan, maka program akan
kembali memasuki program utama dan

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

1
0

melanjutkan instruksi berikutnya yang


sempat tertunda.

DAFTAR PUSTAKA
[1]

PETUNJUK
PRAKTIKUM:
Sistem
Mikroprosesor, Laboratorium Dasar Teknik
Elektro STEI ITB, Bandung, 2016.

[2]

Datasheet ATMega8535

[3]

https://en.wikipedia.org/wiki/Prescaler,
diakses pada 30 Maret 2016 20:00

[4]

https://msdn.microsoft.com/enus/library/ms892408.aspx?f=255&MSPPErr
or=-2147217396, diakses pada 30 Maret 2016
20:27

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

11

LAMPIRAN
A. Kode program Tugas II.A.1
#include <avr/io.h>
void init_tim(void);
void Delay(void);
int main(void)
{
DDRA=0xFF;
PORTA = 0x00;
init_tim();
while (1)
{
PORTA = 0x0F;
Delay();
PORTA = 0xF0;
Delay();
}
return 0;
}
void init_tim(void)
{
//mode operasi CTC, sumber clock prescaller 256
TCCR1A = 0;
TCCR1B = 0b00001100;
//overflow interrupt disable
TIMSK|=(0<<TOIE1);
}
void Delay(void)
{
//overflow interrupt enable
TIMSK|=_BV(TOIE1);//(1<<TOIE1);
//penentuan nilai awal timer
TCNT1H = 0;
TCNT1L = 0;
//penentuan nilai compare untuk delay 1 detik
OCR1AH = 0x70;
OCR1AL = 0x80;
//menunggu hingga compare match, nilai TCNT1 = OCR1A)
loop_until_bit_is_set(TIFR,OCF1A);
//meng-nol-kan flag
TIFR|=_BV(OCF1A);
//overflow interrupt disable
TIMSK|=_BV(TOIE1);
}

B. Kode program Tugas II.A.2


#include <avr/io.h>
void init_tim(void);
void Delay(void);
int main(void)
{
DDRA=0xFF;
PORTA = 0x00;
init_tim();
while (1)
{
PORTA = 0x0F;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

12

Delay();
PORTA = 0xF0;
Delay();
}
return 0;
}
void init_tim(void)
{
//mode operasi CTC, sumber clock prescaller 256
TCCR1A = 0;
TCCR1B = 0b00001101;
//overflow interrupt1 disable
TIMSK|=(0<<TOIE1);
}
void Delay(void)
{
//overflow interrupt enable
TIMSK|=_BV(TOIE1);//(1<<TOIE1);
//penentuan nilai awal timer
TCNT1H = 0;
TCNT1L = 0;
//penentuan nilai compare untuk delay 1 detik
OCR1AH = 0xA8;
OCR1AL = 0xC0;
//menunggu hingga compare match, nilai TCNT1 = OCR1A)
loop_until_bit_is_set(TIFR,OCF1A);
//meng-nol-kan flag
TIFR|=_BV(OCF1A);
//overflow interrupt disable
TIMSK|=_BV(TOIE1);
}

C. Kode program Tugas II.B.1


#include<avr/io.h>
#include<avr/io.h>
#define F_CPU 7372800UL // 8MHz
#include <util/delay.h>
void init_tim(void);
int main(void)
{
init_tim();
DDRA=0xFF;
while (1)
{
//penentuan nilai awal timer
TCNT0 = 123;
//penentuan nilai compare
OCR0 = 124;
//menanti compare match
while(bit_is_clear(TIFR,OCF0))
{
PORTA = 0b10101010;
}
//meng-nol-kan flag
TIFR|=_BV(OCF0);
PORTA = 0b01010101;
_delay_ms(500);
}
return 0;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

13

}
void init_tim(void)
{
//mode operasi dan sumber clock
TCCR0=0b00000110;
//overflow interrupt disable
TIMSK=(0<<OCIE0);
}

D. Kode program Tugas II.B.2


#include <avr/io.h>
#include <avr/io.h>
void init_tim(void);
void init_tim1(void);
void Delay(void);
int main(void){
init_tim();
init_tim1();
DDRA=0xFF;
while (1){
//penentuan nilai awal timer
TCNT0 = 1;
//penentuan nilai compare
OCR0 = 7;
//menanti compare match
while(bit_is_clear(TIFR,OCF0)){
PORTA = 0b10101010;
}
//meng-nol-kan flag
TIFR|=_BV(OCF0);
PORTA = 0xFF;
Delay();
}
return 0;
}
void init_tim(void){
//mode operasi dan sumber clock
TCCR0=0b00000110;
//overflow interrupt disable
TIMSK=(0<<OCIE0);
}
void init_tim1(void){
//mode operasi CTC, sumber clock prescaller 1024
TCCR1A=0;
TCCR1B=0b00001101;
//overflow interrupt disable
TIMSK|=(0<<TOIE1);
}
void Delay(void){
//overflow interrupt enable
TIMSK|=_BV(TOIE1); //(1<<TOIE1);
//penentuan nilai awal timer
TCNT1H=0;
TCNT1L=0;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

14

//penentuan nilai compare untuk delay 7 detik : = 7x8000000/1024


OCR1AH=0x98;
OCR1AL=0x97;
//menunggu hingga compare match, nilai TCNT1=OCR1A
loop_until_bit_is_set(TIFR,OCF1A);
//meng-nol-kan flag
TIFR|=_BV(OCF1A);
//overflow interrupt disable
TIMSK|=_BV(TOIE1);
}

E. Kode program Tugas II.C.1


#include <avr/io.h>
#define F_CPU 7372800UL //8MHz
#include <util/delay.h>
#include <avr/interrupt.h>
void init_int(void);
ISR(TIMER1_OVF_vect)
{
unsigned char i;
PORTA=0xFF;
_delay_ms(200);
TIFR=(1<<TOV1);
TCNT1H=0xE3;
TCNT1L=0xE0;
}
int main(void)
{
init_int();
DDRA=0xFF;
while (1)
{
PORTA = 0b01010101;
_delay_ms(100);
PORTA = 0b10101010;
_delay_ms(100);
TIMSK=0b000100;
}
return 0;
}
void init_int(void)
{
TIMSK=0b000000;
TCCR1B=0b00000101; //prescalar 1024
TCNT1H=0xE3;
TCNT1L=0xE0;
sei();
}

F. Kode program Tugas II.C.2


#include <avr/io.h>
#define F_CPU 7372800UL //8MHz
#include <util/delay.h>
#include <avr/interrupt.h>
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

15

void init_int(void);
ISR(TIMER1_OVF_vect)
{
unsigned char i;
PORTA=0xFF;
_delay_ms(200);
TIFR=(1<<TOV1);
TCNT1H=0x57; //9mod5 +2=6, dengan 8MHz didapat 48E5, dengan 7372800
didapat 5740
TCNT1L=0x40;//9mod5 +2=6, dengan 8MHz didapat 48E5, dengan 7372800
didapat 5740
}
int main(void)
{
init_int();
DDRA=0xFF;
while (1)
{
PORTA = 0b01010101;
_delay_ms(100);
PORTA = 0b10101010;
_delay_ms(100);
TIMSK=0b000100;
}
return 0;
}
void init_int(void)
{
TIMSK=0b000000;
TCCR1B=0b00000101; //prescalar 1024
TCNT1H=0x57; //9mod5 +2=6, dengan 8MHz didapat 48E5, dengan 7372800
didapat 5740
TCNT1L=0x40;//9mod5 +2=6, dengan 8MHz didapat 48E5, dengan 7372800
didapat 5740
sei();
}

G. Kode program Tugas II.D.1


#include <avr/io.h>
#define F_CPU 7372800UL //8MHz
#include <util/delay.h>
#include <avr/interrupt.h>
void Init_Ext_Int(void);
ISR(INT0_vect)
{
unsigned char i=0x01,n;
for(n=0;n<8;++n)
{
PORTA = i;
_delay_ms(250);
i=(i<<1)|(i>>7);
}
}
int main(void)
{
Init_Ext_Int();
sei();
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

16

DDRA=0xFF;
while (1)
{
PORTA = 0b10101010;
_delay_ms(500);
PORTA = 0b01010101;
_delay_ms(500);
}
return 0;
}
void Init_Ext_Int(void)
{
MCUCR=0x02;
MCUCSR=0x00;
GICR=0x40;
GIFR=0x40;
}

H. Kode program Tugas II.D.2


#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>
#include <avr/interrupt.h>
void Init_Ext_Int(void);
ISR(INT0_vect){
PORTA = 0x99;
_delay_ms(500);
PORTA = 0x66;
_delay_ms(500);
}
ISR(INT1_vect){
PORTA = 0x4F;//nim 079
_delay_ms(500);
PORTA = 0x50;//nim 080
_delay_ms(500);
}
int main(void){
Init_Ext_Int();
sei();
DDRA=0xFF;
while (1){
PORTA = 0xFF;
_delay_ms(500);
PORTA = 0x00;
_delay_ms(500);
}
return 0;
}
void Init_Ext_Int(void){
MCUCR=0b00001010;
MCUCSR=0x00;
GICR=0b11000000;
GIFR=0b11000000;
}

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

17

Anda mungkin juga menyukai