Anda di halaman 1dari 18

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 1

MODUL 03 KOMUNIKASI USART DAN EVALUASI MODUL 1 MODUL 3


Aji Suryo Wibowo (13211059)
Asisten: Victor Pramusanto/13210100
Tanggal Percobaan: 25 Maret 2014
EL3214 Praktikum Sistem Mikroprosesor
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak

Pada modul ini, dilakukan percobaan untuk menggunakan
fitur dari mikroprosesor ATMega8535, yaitu timer, counter,
dan interrupt. Percobaan pertama adalah membuat delay
dengan memanfaatkan fitur timer/counter pada
ATMega8535. Percobaan selanjutnya adalah mengeset clock
dengan menggunakan sumber clock eksternal. Kemudian,
percobaan dilanjutkan dengan membuat aplikasi yang
memanfaatkan fitur interrupt dengan timer/counter.
Percobaan terakhir adalah menggunakan external interrupt.
Kata kunci: Timer/Counter, Clock, Interrupt.
1. PENDAHULUAN
ATMega merupakan sistem minimum yang sering
digunakan sebagai prosesor sebuah sistem
sederhana. Dalam hal ini, sistem minimum
ATMega, khususnya ATMega 8535 digunakan
sebagai kit praktikum, sehingga diharapkan
setelah melakukan percobaan, mahasiswa dapat:
a. memahami datasheet ATMega 8535
b. membuat aplikasi timer/counter dan
interrupt pada AVR dengan menggunakan
bahasa pemrograman C pada WinAVR
c. membuat aplikasi external interrupt pada
AVR dengan menggunakan bahasa
pemrograman C pada WinAVR
2. STUDI PUSTAKA
2.1 ATMEGA8535, [3]

Gambar 3.1 ATMega 8535, [4]
ATMega8535 merupakan salah satu mikro
kontroler 8 bit buatan Atmel untuk keluarga AVR
yang diproduksi secara massal pada tahun 2006.
Karena merupakan keluarga AVR, maka
ATMega8535 juga menggunakan arsitektur RISC.
Secara singkat, ATMega8535 memiliki beberapa
kemampuan:
a. Sistem mikrokontroler 8 bit berbasis RISC
dengan kecepatan maksimal 16 MHz.
b. Memiliki memori flash 8 KB, SRAM sebesar
512 byte dan EEPROM (Electrically Erasable
Programmable Read Only Memory) sebesar
512 byte.
c. Memiliki ADC (pengubah analog-ke-digital)
internal dengan ketelitian 10 bit sebanyak 8
saluran.
d. Memiliki PWM (Pulse Width Modulation)
internal sebanyak 4 saluran.
e. Portal komunikasi serial (USART) dengan
kecepatan maksimal 2.5 Mbps.
f. Enam pilihan mode sleep, untuk menghemat
penggunaan daya listrik.
Mikrokontroler ATMega8535 memiliki 40 pin
untuk model PDIP, dan 44 pin untuk model TQFP
dan PLCC. Nama-nama pin pada mikrokontroler
ini adalah:
a. VCC untuk tegangan pencatu daya positif.
b. GND untuk tegangan pencatu daya negatif.
c. PortA (PA0 PA7) sebagai port
Input/Output dan memiliki kemampuan lain
yaitu sebagai input untuk ADC.
d. PortB (PB0 PB7) sebagai port Input/Output
dan juga memiliki kemampuan yang lain.
e. PortC (PC0 PC7) sebagai port Input/Output
untuk ATMega8535.
f. PortD (PD0 PD7) sebagai port
Input/Output dan juga memiliki
kemampuan yang lain.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 2


g. RESET untuk melakukan reset program
dalam mikro kontroler.
h. XTAL1 dan XTAL2 untuk input pembangkit
sinyal clock.
i. AVCC untuk pin masukan tegangan pencatu
daya untuk ADC.
j. AREF untuk pin tegangan referensi ADC.
Untuk melakukan pemrograman dalam mikro
kontroler AVR, Atmel telah menyediakan
software khusus yang dapat diunduh dari website
resmi Atmel. Software tersebut adalah AVRStudio.
Software ini menggunakan bahasa assembly
sebagai bahasa perantaranya. Selain AVRStudio,
ada beberapa software pihak ketiga yang dapat
digunakan untuk membuat program pada AVR.
Software dari pihak ketiga ini menggunakan
bahasa pemrograman tingkat tinggi seperti bahasa
C, Java, atau Basic. Untuk melakukan pemindahan
dari komputer ke dalam chip, dapat digunakan
beberapa cara seperti menggunakan kabel JTAG
atau menggunakan STNK buatan Atmel.
2.2 OPERASI SINKRON DAN ASINKRON
Pada sistem komunikasi serial asinkron, dframing
bits digunakan pada awal dan akhir dari data byte
yang dikirim. Framing bits ini akan
memberitahukan kepada receiver bahwa data
yang akan diterima telah datang, serta
memberitahukan juga bahwa data tersebut telah
selesai diterima. Sistem komunikasi serial
asinkron memiliki kecepatan data atau data rate
lebih pelan daripada sistem komunikasi serial
sinkron dikarenakan sistem komunikasi asinkron
tidak membutuhkan clock dan mengirim data bit
demi bit. Hal ini juga menyebabkan sistem
komunikasi asinkron hanya membutuhkan single
wire dan common ground antara transmitter dan
receiver.
Pada sistem komunikasi serial sinkron, sistem
mempertahankan kesinkronan antara transmitter
dengan receiver dengan menggunakan common
clock. Bit data dikirim dan diterima pada clock
edge dan data dikirim dalam blok data demi blok
data. Hal ini menyebabkan sistem komunikasi
serial sinkron memiliki data rate yang lebih cepat
dibandingkan dengan sistem komunikasi serial
asinkron meskipun membutuhkan double wire
(data dan clock) serta sebuah common ground
untuk menghubungkan receiver dan transmitter.
2.3 PARITY BIT, FRAMING ERROR, DAN DATA
OVERRUN
Parity bit adalah bit yang ditambahkan pada data
untuk melakukan error checking. Bit yang
ditambahkan adalah bit 1 yang mana akan
melakukan pengecekan jumlah bit 1 pada data
dan parity bit. Terdapat dua jenis parity, odd
parity dan even parity. Odd parity merupakan
parity di mana jumlah total bit 1 dalam data bit
dan parity bit yang ditambahkan bernilai ganjil,
jika bernilai genap, maka terjadi parity error.
Sementara itu, even parity merupakan parity di
mana jumlah total bit 1 dalam data bit dan parity
bit yang ditambahkan bernilai genap, jika bernilai
ganjil, maka terjadi parity error.
Framing error adalah error yang disebabkan oleh
tidak ditemukannya start dan stop bits pada data.
Data overrun adalah keadaan di mana receiver
tidak dapat memproses data yang datang sebelum
data berikutnya datang. Pada beberapa device,
terdapat buffer untuk menahan data yang datang.
Jika buffer tersebut penuh dan prosesor tidak
secara cepat memproses atau memindahkan data
dari buffer untuk diproses maka terjadi Overrun
Error dan data yang terdapat pada buffer hilang
diganti oleh data baru.
3. METODOLOGI
3.1 ALAT DAN KOMPONEN YANG DIGUNAKAN
a. Sistem Minimum ATMega 8535 (1 buah)
b. DT-51 Trainer Board (1 buah)
c. Power Supply (1 buah)
d. Komputer Terinstal WinAVR (1 buah)
3.2 LANGKAH-LANGKAH PERCOBAAN
a. Diagram 3.1 Penerimaan Data dari PC

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 3




b. Diagram 3.2 Pengiriman Data ke PC


c. Diagram 3.3 Penerimaan dan
Pengiriman Data dari dan ke PC
1
Power supply diset
pada 9 V kemudian
dihubungkan pada kit
praktikum.
Kabel downloader
dihubungkan dari PC
ke sismin ATMega.
2
Dari PORTA pada
sismin, dihubungkan
kabel output ke port
output pada DT-51.
Kodingan ditulis,
kemudian didownload
ke dalam sismin.
Clock yang digunakan
adalah kristal 8 MHz.
1
Power supply diset
pada 9 V kemudian
dihubungkan pada kit
praktikum.
Kabel downloader
dihubungkan dari PC
ke sismin ATMega.
2
Dari PORTA pada
sismin, dihubungkan
kabel output ke port
output pada DT-51.
Kodingan ditulis,
kemudian didownload
ke dalam sismin.
Clock yang digunakan
adalah kristal 8 MHz.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 4




d. Diagram 3.4 Evaluasi Modul 1 Modul 3


4. HASIL DAN ANALISIS
4.1 Penerimaan Data dari PC
Tabel 3.1 Hasil Percobaan 3.A
Karakter yang
diketik
LED
a

1

;

q

c


1
Power supply diset
pada 9 V kemudian
dihubungkan pada kit
praktikum.
Kabel downloader
dihubungkan dari PC
ke sismin ATMega.
2
Dari PORTA pada
sismin, dihubungkan
kabel output ke port
output pada DT-51.
Kodingan ditulis,
kemudian didownload
ke dalam sismin.
Clock yang digunakan
adalah kristal 8 MHz.
1
Power supply diset
pada 9 V kemudian
dihubungkan pada kit
praktikum.
Kabel downloader
dihubungkan dari PC
ke sismin ATMega.
2
Dari PORTA pada
sismin, dihubungkan
kabel output ke port
output pada DT-51.
Kodingan ditulis,
kemudian didownload
ke dalam sismin.
Clock yang digunakan
adalah kristal 8 MHz.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 5


START
UCSRA = 0x00
UCSRB = 0x10
UCSRC = 0x86
UBRRL = 0d51
wait until 7
th
bit of
UCSRA (RXC bit) = 1
PORTA = UDR

Gambar 3.2 Flowchart Percobaan 3.A.1

START
UCSRA = 0x02
UCSRB = 0x10
UCSRC = 0x86
UBRRL = 0xA0
UBRRH = 0x01
wait until 7
th
bit of
UCSRA (RXC bit) = 1
PORTA = UDR

Gambar 3.3 Flowchart Percobaan 3.A.2

Untuk Percobaan 3.A.2, hasilnya sama, hanya
responnya saja yang sedikit berbeda, namun tetap
tidak terasa.
Analisis:
Pada Percobaan 3.A.1 dan 3.A.2 terdapat
perbedaan dalam baud rate yang digunakan,
meskipun perbedaannya cukup besar (dari yang
sebelumnya 9600 ke 2400 baud rate) namun
respon yang diperoleh tidak terlalu terasa
dikarenakan oleh pemrosesan karakter keyboard
yang besarnya 8 bit dilakukan hanya dalam waktu
(secara kasar)

detik untuk
baud rate 9600 dan

detik
untuk baud rate 2400. Kecepatan transmisi USART
yang digunakan (yang direpresentasikan pada bit
U2X) hanya mempengaruhi nilai UBRR yang
harus diset pada register UBRRH dan UBRRL. Jika
U2X bernilai 1 yang artinya double USART
transmission speed aktif, maka nilai UBRR yang
harus diassign menjadi lebih besar dibandingkan
dengan saat nilai U2X bernilai 0 (normal USART
transmission speed).
Pada program untuk percobaan 3, terlihat peng-
assign-an beberapa register,

Gambar 3.4 Register UCSRA

Gambar 3.5 Register UCSRB

Gambar 3.6 Register UCSRC

Gambar 3.7 Register UBRR
Terlihat peng-assign-an nilai,
Tabel 3.2 Peng-assign-an Register Percobaan 3.A.1
Register Nilai
UCSRA 0x00
UCSRB 0x10
UCSRC 0x86
UBRR
UBRRH -
UBRRL 0d51

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 6


Terlihat bahwa nilai register UCSRA diisi dengan
nilai 0x00 yang artinya, bit UDRE diset dengan
nilai 0 atau direset yang otomatis akan menge-set
lagi ke nilai 1 (nilai default) setelah direset. Jika bit
UDRE diset dengan nilai 1 maka register UDR
(transmit buffer) siap menerima data baru.
Kemudian, pada bit U2X diset denga nilai 0, yang
artinya jika program menggunakan mode
asinkron maka digunakan mode normal USART
transmission speed, sementara jika program
menggunakan mode sinkron, nilai bit ini harus
diset pada nilai 0.
Pada register UCSRB diset dengan nilai 0x10, yang
artinya nilai bit RXEN diset 1 sehingga USART
Receiver diaktifkan. Selain itu, nilai bit UCSZ2
diset dengan nilai 0 yang artinya ukuran data
karakter yang digunakan berkisar antara 5 sampai
8 bit.
Pada register UCSRC diset dengan nilai 0x86,
yang artinya nilai bit URSEL diset dengan nilai 1
atau dengan kata lain register UCSRC digunakan
sebagai register UCSRC (bukan UBRRH, karena
regsiter UCSRC dan UBRRH menggunakan satu
I/O yang sama) sehingga terlihat bahwa program
tidak melakukan peng-assign-an nilai pada
register UBRRH. Kemudian, nilai bit UMSEL diset
pada nilai 0 yang artinya program menggunakan
mode asinkron. Pengesetan nilai 0 pada bit
UMSEL dan nilai 0 pada bit U2X mengindikasikan
bahwa program menggunakan normal USART
transmission speed asynchronous mode. Terlihat
pula bahwa bit UPM1:0 keduanya diset dengan
nilai 0 yang artinya mode Parity dinonaktifkan.
Setelah itu, pada bit UCSZ1:0, keduanya diset
dengan nilai 1 yang jika dikombinasikan dengan
nilai bit UCSZ2 berarti bahwa data yang akan
diterima berukuran 8 bit. Bit USBS diset dengan
nilai 0 berarti bahwa stop bit yang digunakan
adalah 1 bit, sementara bit UCPOL diset dengan
nilai 0 dikarenakan program menggunakan mode
asinkron.
Baudrate yang digunakan direpresentasikan oleh
nilai yang diassign pada register UBRRH dan
UBRRL. Register UBRRH dinonaktifkan karena
register tersebut oleh program digunakan sebagai
register UCSRC (dengan melakukan peng-assign-
an nilai bit URSEL dengan nilai 1) sehingga baud
rate program ditentukan hanya oleh register
UBRRL. Terlihat bahwa nilai register UBRRL diset
dengan nilai 51, yang artinya baud rate yang
digunakan,


( )

Pada body main, terlihat bahwa digunakan
infinite loop (while(1)) yang artinya program
selalu siap menerima input untuk kemudian
diproses sehingga keluar output. Terlihat dalam
body while(1) terdapat perintah
loop_until_bit_is_set (UCSRA, 7) yang
artinya program akan menunggu sampai bit RXC
pada UCSRA bernilai 1 atau dengan kata lain
program akan memberitahukan bahwa register
UDR berisi data yang siap untuk dibaca.
Kemudian setelah itu, nilai PORTA akan di-assign
dengan nilai register UDR sehingga nyala LED
akan merepresentasikan isi dari regsiter UDR
pada saat itu. Karena input berupa ketikan pada
keyboard, maka data yang ditampilkan
merupakan representasi nilai ASCII dari karakter
pada keyboard.
Untuk Percobaan 3.A.2, dikarenakan hanya nilai
baud rate dan mode asinkron yang digunakan
adalah 2400 dan double USART transmission
speed asynchronous mode maka dilakukan
pengesetan register,
Tabel 3.3 Peng-assign-an Register Percobaan 3.A.2
Register Nilai
UCSRA 0x02
UCSRB 0x10
UCSRC 0x86
UBRR
UBRRH 0x01
UBRRL 0xA0
Terlihat bahwa register UCSRA diset dengan nilai
0x02 yang artinya bit U2X diset pada nilai 1
(double USART transmission speed enabled).
Kemudian, nilai UBRR diset,


()

Dikarenakan register UBRRL hanya dapat
menampung 8 LSB dari UBRR, maka digunakan
register UBRRH dengan terlebih dahulu mengeset
nilai bit URSEL dengan nilai 0, kemudian
mengeset nilai bit 0 pada register UBRRH dengan
nilai 1, sehingga keseluruhan nilai register UBRR
adalah 0x1A0.
4.2 Pengiriman Data dari PC
Tabel 3.4 Hasil Percobaan 3.B
Percobaan 3.B.1
Setiap tombol reset ditekan, muncul tulisan pada
layar Hyperterminal,


Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 7


Praktikum Sistem Mikroprosesor
Percobaan 3.B.2
Setiap 6 detik, pada layar Hyperterminal muncul
nama,
M. Rifqi S.
Aji Suryo W.

M. Rifqi S.
Aji Suryo W.
M. Rifqi S.
Aji Suryo W.
6

s
6

s
6

s
.

.

.


START
UCSRA = 0x00
UCSRB = 0x08
UCSRC = 0x86
UBRRL = 0d51
kal[] = Praktikum Sistem Mikroprosesor
i = 0
is i EOL? END
wait until 5
th
bit of
UCSRA (UDRE bit) = 1
UDR = kal[i]
NO
YES

Gambar 3.8 Flowchart Percobaan 3.B.1

START
UCSRA = 0x00
UCSRB = 0x08
UCSRC = 0x86
UBRRL = 0d51
kal1[] = M. Rifqi S.
kal2[] = Aji Suryo W.
i = 0
is i EOL?
wait until 5
th
bit of
UCSRA (UDRE bit) = 1
UDR = kal1[i]
NO
Delay()
i = 0
YES
is i EOL?
wait until 5
th
bit of
UCSRA (UDRE bit) = 1
NO
UDR = kal2[i]
Delay()
i = 0
YES

Gambar 3.9 Flowchart Percobaan 3.B.2

Analisis:
Tabel 3.5 Peng-assign-an Register Percobaan 3.B.1 dan 3.B.2
Register Nilai
UCSRA 0x00
UCSRB 0x08
UCSRC 0x86
UBRR
UBRRH -
UBRRL 0d51
Terlihat bahwa register UCSRA di-assign dengan
nilai 0x00, penjelasan untuk hal tersebut sudah
ada pada analisis Percobaan 3.A.
Pada register UCSRB, di-assign dengan nilai 0x08.
Hal ini berarti bit TXEN diset dengan nilai 1, yang
berarti program mengaktifkan USART
Transmitter.
Pada register UCSRC diset nilai 0x86. Penjelasan
untuk nilai ini terdapat pada analisis Percobaan
3.A.
Karena pada percobaan ini nilai UBRR diset
dengan 0d51, maka baud rate yang digunakan
adalah,


( )


Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 8


Kemudian, terlihat bahwa pada body main, tidak
terdapat infinite loop (while(1)) sehingga
program berjalan hanya satu kali untuk setiap run.
Oleh karena itu, diperlukan penekanan tombol
reset pada sismin agar program bisa berjalan
berulang kali. Terlihat pula bahwa terdapat peng-
assign-an sebuah string Praktikum
Mikroprosesor dalam suatu array of char
bernama kal. Selain itu, loop yang digunakan
pada program ini hanya satu yang cara kerjanya
adalah menuliskan char yang berada dalam array
of char kal ke Hyperterminal sampai kal berisi
end of line. Hal ini terlihat dari isi loop yaitu
ketika bit ke-5 dari UCSRA yaitu bit UDRE
bernilai 1 (register UDR siap untuk menerima data
baru), maka register UDR akan diisi nilai
representasi ASCII dari karakter yang terdapat
dalam array of char dari kal. Kemudian nilai
UDR tersebut akan dikirim ke Hyperterminal
untuk ditampilkan.
Untuk Percobaan 3.B.2, peng-assign-an nilai
register yang digunakan sama, hanya saja untuk
string yang digunakan ditambah satu sehingga
terdapat dua string yang akan ditampilkan pada
Hyperterminal, masing-masing adalah kal1 yaitu
M. Rifqi S. dan kal2 yaitu Aji Suryo W..
Pada percobaan ini, digunakan prosedur Delay()
seperti pada Percobaan 2. Selain itu, program
pada percobaan ini, digunakan infinite loop
while(1) sehingga program akan terus menerus
menuliskan array of char dari kal1 dan kal2
berselang-seling tiap 6 detik (waktu Delay())
sampai tak hingga kali.
4.3 Penerimaan dan Pengiriman Data dari dan ke
PC
Tabel 3.6 Hasil Percobaan 3.C.1
Karakter
yang
diketik
LED
Layar
Hyperterminal
a

a
q

q
c

c

Tabel 3.7 Hasil Percobaan 3.C.2
Karakter yang
diketik
LED
Layar
Hyperterminal
Normal Error Normal Error
a

a q
q

- q -

START
wait until 5
th
bit of
UCSRA (UDRE bit) =
1
UCSRA = 0x00
UCSRB = 0x98
UCSRC = 0x86
UBRRL = 0d51
is 3
rd
bit of UCSRA
(DOR bit) = 1?
YES
ISR
kar = UDR
PORTA = kar
wait until 5
th
bit of
UCSRA (UDRE bit) =
1
UDR = kar
RETI
NO


Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 9


Gambar 3.10 Flowchart Percobaan 3.C.1
START
wait until 5
th
bit of
UCSRA (UDRE bit) =
1
UCSRA = 0x00
UCSRB = 0x98
UCSRC = 0x86
UBRRL = 0d06
is 3
rd
bit of UCSRA
(DOR bit) = 1?
YES
ISR
kar = UDR
PORTA = kar
wait until 5
th
bit of
UCSRA (UDRE bit) =
1
UDR = kar
RETI
NO

Gambar 3.11 Flowchart Percobaan 3.C.2

Analisis:
Tabel 3.8 Peng-assign-an Register Percobaan 3.C.1
Register Nilai
UCSRA 0x00
UCSRB 0x98
UCSRC 0x86
UBRR
UBRRH -
UBRRL 0d51
Terlihat untuk register UCSRA, UCSRC, dan
UBBRL nilaiyang di-assign sama dengan
Percobaan 3.A.1 sehingga penjelasannya sama.
Untuk register UCSRB di-assign dengan nilai 0x98,
artinya bit RXCIE diset dengan nilai 1. Pengesetan
bit ini dengan nilai 1 mengakibatkan
diaktifkannya RX Complete Interrupt, atau
interupsi yang disebabkan oleh adanya nilai yang
belum dibaca pada UDR sehingga Interrupt
Service Routine akan dijalankan. Kemudian dari
nilai yang diset pada register UCSRB ini, dapat
diketahui bahwa bit RXEN dan TXEN diset
dengan nilai 1, yang artinya USART Receiver dan
USART Transmitter diaktifkan.
Pada program, terlihat bahwa selain terdapat
main, terdapat juga ISR. Pada main, digunakan
infinite loop (while(1)) yang artinya program
akan terus menerus berjalan. Terlihat pula bahwa
pada body while(1) terdapat perintah
if_bit_is_set (UCSRA, 3) dan pada body
perintah tersebut, terdapat perintah
loop_until_bit_is_set (UCSRA, 5).
Perintah-perintah tersebut akan membuat tingkah
laku program seperti ini,

Pada prosedur ISR, terlihat bahwa program
menggunakan storage variable kar yang bertipe
unsigned char. Variabel ini akan menampung nilai
register UDR pada saat itu yang kemudian akan
di-assign-kan pada register PORTA sehingga LED
akan menyala sesuai dengan isi register UDR
(representasi ASCII dari input keyboard yang
ditekan). Setelah itu, program akan menunggu
hingga UDR kosong (siap menerima data baru)
yang kemudian diisi dengan nilai kar untuk
ditampilkan pada Hyperterminal.
Untuk Percobaan 3.C.2, terdapat error pada layar
Hyperterminal jika karakter tertentu ditekan pada
keyboard. Setelah diselidiki, ditemukan kaitan
antara keyboard yang ditekan dengan error yang
dikeluarkan. Hubungan error tersebut adalah
pada bit ke-4 dari representasi ASCII keyboard
yang ditekan (nyala LED bit ke-4). Jika bit ke-4
pada representasi ASCII dari keyboard yang
ditekan bernilai 0, maka error yang terjadi adalah
representasi karakter dari ASCII yang sebelumnya
dengan nilai bit ke-4-nya bernilai 1. Namun, jika
bit ke-4 dari representasi ASCII keyboard yang
ditekan sudah bernilai 1, maka tidak ada error
Ketika bit ke-3 UCSRA atau bit DOR bernilai 1,
maka Data Overrun terjadi. Data Overrun adalah
keadaan di mana register UDR penuh (berisi 2
data/karakter). Saat program mendeteksi
adanya DOR tersebut, maka program akan
menunggu hingga bit ke-5 UCSRA atau bit UDRE
bernilai 1. Saat bit UDRE bernilai 1 register UDR
akan dikosongkan sehingga siap untuk
menerima data baru.
Selama proses tersebut berjalan, jika user
mengirimkan input dari keyboard, maka bit RXC
akan mengeset dirinya dengan nilai 1 sehingga
interupsi terjadi. Kemudian, dikarenakan terjadi
interupsi, maka prosedur ISR dijalankan.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 1
0


yang muncul pada layar Hyperterminal. Sebagai
contoh, jika karakter a ditekan pada keyboard,
maka pada layar Hyperterminal dapat muncul
karakter q selain karakter a. Hal ini disebabkan
representasi ASCII karakter a adalah 0b01100001
sementara representasi ASCII dari karakter q
adalah 0b01110001. Sementara itu, jika karakter q
(0b01110001) ditekan pada keyboard, maka layar
Hyperterminal hanya akan menampilkan karakter
q. Error ini dikarenakan oleh nilai baud rate dan
frekuensi osilasi yang digunakan, yang dapat
dilihat dari,


( )

Dapat dilihat bahwa nilai baud rate yang
digunakan dengan baud rate yang sesungguhnya
memiliki error 7%,
(

)
Error ini merupakan nilai yang cukup besar jika
dilihat dari tabel berikut yang mana menyatakan
bahwa untuk data 8 bit (dengan parity bit menjadi
9 bit), maka toleransi error maksimal adalah
5%.
Tabel 3.9 Toleransi Error untuk Sistem Asinkron Mode Normal

4.3 Evaluasi Modul 1 Modul 3
Program yang dibuat baru bisa mencapai mode
Counter.
START
KEY1 and
KEY2 is set
IDLE
is Interrupted?
KEY1
YES
is KEY1 correct?
COUNTER
YES
is COUNTER = 5?
KEY2
YES
is KEY2 correct?
LED ON (1 s) then
OFF (1 s), twice
YES
NO
NO
LED ON (500 ms)
then OFF
LED[COUNTER] ON NO
NO

Gambar 3.12 Flowchart Percobaan 3.D
Analisis:
Terlihat bahwa terdapat dua buah keyword, yaitu
KEYWORD1 yang bernilai 0b00000011 dan

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 11


KEYWORD2 yang berupa karakter a. Kemudian
terlihat bahwa terdapat 4 mode yang masing-
masing diwakili oleh prosedur tertentu: Idle, Key1,
Counter, dan Key2. Program yang dibuat baru
mencapai mode Counter yang mana mode ini pun
belum sepenuhnya benar. Saat program mulai
memasuki infinite loop, maka mode Idle yang
aktif. Ketika program diberi Interrupt, maka ISR
dijalankan. Pada ISR dilakukan pengecekan, jika
mode berada dalam keadaan Idle, maka mode
akan memasuki mode Key1 yang mana akan
memberikan waktu 5 detik yang
direpresentasikan oleh nyala LED untuk
memasukkan keyword pertama. Sementara, jika
mode berada dalam kondisi selain Idle, maka ISR
tidak akan melakukan apa-apa (program akan
keluar dari ISR). Kemudian, jika input switch
benar untuk merepresentasikan keyword pertama,
maka program akan memasuki mode Counter.
Sementara jika keyword pertama yang
dimasukkan salah, maka program akan memasuki
mode Idle kembali.
5. KESIMPULAN
Dari percobaan dapat disimpulkan bahwa:
a. Untuk mengetahui apa saja yang terdapat
dan disediakan oleh ATMega 8535,
digunakan datasheet dari ATMega 8535,
termasuk di dalamnya tentang PORT, PIN,
clock, interrupt, timer/counter, komunikasi
serial USART, dan register-register yang
digunakan untuk mengeset hal-hal tersebut.
b. Untuk membuat aplikasi komunikasi USART,
digunakan register: UDR; UCSRA; UCSRB;
UCSRC; UBRRH; UBRRL.
6. DAFTAR PUSTAKA
[1] Hutabarat, Mervin T., Waskita Adijarto, dan
Harry Septanto, Praktikum Sistem Mikroprosesor,
Sekolah Teknik Elektro dan Informatika
Institut Teknologi Bandung, Bandung, 2013
[2] ATMega8535 Datasheet from www.atmel.com
[3] http://id.wikipedia.org/wiki/ATMega8535
[4] www.duniaelektronika.net


Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 12


7. LAMPIRAN


//=========================================================================================================
//Tugas 3A1
//=========================================================================================================

#include <avr/io.h>

int main (void)
{
// tentukan nilai baudrate yang sesuai dengan inisialisasi ini
UCSRA = 0x00;
UCSRB = 0x10; // RXEN set.
UCSRC = 0x86; // uCSRC = 0b 1000 0110, URSEL, UCSZ1, UCSZ0 set.
UBRRL = 51; // f = 8MHz, baud=9600bps, U2X=0
while (1)
{
loop_until_bit_is_set(UCSRA, 7);
PORTA = UDR;
UCSRA |= _BV(7);
}
return 0;
}

//=========================================================================================================


//=========================================================================================================
//Tugas 3A2
//=========================================================================================================

#include <avr/io.h>

int main (void)
{
// tentukan nilai baudrate yang sesuai dengan inisialisasi ini
UCSRA = 0x02;
UCSRB = 0x10; // RXEN set.
UCSRC = 0x86; // UCSRC = 0b 1000 0110, URSEL, UCSZ1, UCSZ0 set.
UBRRL = 0xA0;
UBRRH = 0x01; // f = 8MHz, baud=2400bps, U2X=1
while (1)
{
loop_until_bit_is_set(UCSRA, 7);
PORTA = UDR;
UCSRA |= _BV(7);
}
return 0;
}

//=========================================================================================================


//=========================================================================================================
//Tugas 3B1
//=========================================================================================================

#include<avr/io.h>
int main (void)
{
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRL=51;

char kal[]=" Praktikum Sistem Mikroprosesor ";
unsigned char i=0;

for (i=0;kal[i]!='\0';++i)
{
loop_until_bit_is_set(UCSRA,5);
UDR=kal[i];
}
return 0;
}

//=========================================================================================================

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 13




//=========================================================================================================
//Tugas 3B2
//=========================================================================================================

#include<avr/io.h>

void init_tim(void);
void Delay(void);

int main (void)
{
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRL=51;
init_tim();

char kal1[]=" M. Rifqi S. ";
char kal2[]=" Aji Suryo W. ";

unsigned char i=0;
while(1)
{
for (i=0;kal1[i]!='\0';++i)
{
loop_until_bit_is_set(UCSRA,5);
UDR=kal1[i];
}
Delay();
for (i=0;kal2[i]!='\0';++i)
{
loop_until_bit_is_set(UCSRA,5);
UDR=kal2[i];
}
Delay();
}
return 0;
}

void init_tim(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;

//penentuan nilai compare untuk delay 6 = 23 mod 9 + 1 detik
OCR1AH=0xB7; //0xB71B = 6 * 8 000 000 / 1024 in HEX
OCR1AL=0x1B;

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

//=========================================================================================================

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 14




//=========================================================================================================
//Tugas 3C1
//=========================================================================================================

#include<avr/io.h>
#include<avr/interrupt.h>
#define F_CPU 8000000UL
#include <util/delay.h>

ISR(USART_RX_vect)
{
unsigned char kar;
kar = UDR;
PORTA = kar;
loop_until_bit_is_set(UCSRA,5);
UDR = kar;
}

int main (void)
{
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0;
UBRRL=51;
sei();
while(1)
{
if bit_is_set(UCSRA,3)
{
loop_until_bit_is_set(UCSRA,5);
}
}
return 0;
}

//=========================================================================================================


//=========================================================================================================
//Tugas 3C2
//=========================================================================================================

#include<avr/io.h>
#include<avr/interrupt.h>
#define F_CPU 1000000UL
#include <util/delay.h>

ISR(USART_RX_vect)
{
unsigned char kar;
kar = UDR;
PORTA = kar;
loop_until_bit_is_set(UCSRA,5);
UDR = kar;
}

int main (void)
{
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0;
UBRRL=6;
sei();
while(1)
{
if bit_is_set(UCSRA,3)
{
loop_until_bit_is_set(UCSRA,5);
}
}
return 0;
}

//=========================================================================================================

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 15




//=========================================================================================================
//Tugas 3D
//=========================================================================================================

#include<avr/io.h>
#define F_CPU 8000000UL // 8MHz
#include <util/delay.h>
#include <avr/interrupt.h>

#define KEYWORD1 0b00000011
#define KEYWORD2 'a'

void init_tim(void);
void init_ext_int(void);
void Idle(void);
void Key1(void);
void Counter(void);
void Key2(void);


int Mode;

ISR(INT0_vect)
{
if (Mode == 1)
{
Mode = 2;
}
}

int main (void)
{
init_tim();
init_ext_int();
sei();
DDRA=0xFF;

Mode = 1; // 1 Idle, 2 Key1, 3 Counter, 4 Key2

while(1)
{
if (Mode == 1)
{
Idle();
}

else if (Mode == 2)
{
Key1();
}
else if (Mode == 3)
{
Counter();
}
//else if (Mode == 4)
//{
// Key2();
//}
}
return 0;
}

void init_ext_int(void)
{
MCUCR=0x02;
MCUCSR=0x00;
GICR=0x40;
GIFR=0x40;
}

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

//Continue below

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 16




// Mode Idle, led berjalan kiri-kanan
void Idle(void)
{
int n;
int x;
int i;
i = 0xFE;
for(n=0;n<7;n++)
{
PORTA=i;
_delay_ms(120);
i = (i<<1) | (i>>7);
}
for(n=0;n<7;n++)
{
PORTA=i;
_delay_ms(120);
i = (i>>1) | (i<<7);
}
}

// Mode Key1, 5 detik dan mengecek switch
void Key1(void)
{
int n;
int x;
int i;
_delay_ms(1000);
i = 0x01;
for(n=0;n<5;n++)
{
PORTA=i;
_delay_ms(1000);
i = (i<<1);
}
if (PINB == KEYWORD1)
{
PORTA=0xFF;
_delay_ms(500);
PORTA=0x00;
Mode = 3;
}
else
Mode = 1;
}

// Mode Counter, Counter dengan input external
void Counter(void)
{
int n;
int x;
int i;
TCNT0=123; //penentuan nilai awal timer
OCR0=127; //penentuan nilai compare

while (bit_is_clear(TIFR,OCF0));

//menanti compare match
{
x=TCNT0;
PORTA=(1 << x);
}

TIFR|=_BV(OCF0); //mengnolkan flag
Mode = 4;
PORTA=0x00;
_delay_ms(2000);
}

// Continue below

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 17




// Mode Key2, 5 detik dan mengecek hyperterminal
void Key2(void)
{
int n;
int x;
int i;
_delay_ms(1000);
i = 0x01;
for(n=0;n<5;n++)
{
PORTA=i;
_delay_ms(1000);
i = (i<<1)
}
if (UDR) // cek hyperterminal
{
for(n=0;n<2;n++)
{
PORTA=0xFF;
_delay_ms(1000);
PORTA=0x00;
_delay_ms(1000);
Mode = 1;
}
}
else
Mode = 1;
}

//=========================================================================================================

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 18




//=========================================================================================================
//Tugas 2D1
//=========================================================================================================
#include <avr/io.h>
#define F_CPU 8000000UL
#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();
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;
}
//=========================================================================================================