Anda di halaman 1dari 49

.

.
.
.
.
.
.
.
.
modul petunjuk

Praktikum
Sistem Mikroprosesor


Jurusan Teknik Elektro
Sekolah Tinggi Teknologi Adisutjipto
.
.
.
.
.
.
.
.
.
.



. . . . . . . . . .



Freddy Kurniawan, S.T., M.T.
Sekolah Tinggi Teknologi Adisutjipto






Modul Petunjuk
Praktikum
Sistem Mikroprosesor















Program Studi Teknik Elektro, STTA
Jl. Janti Blok R, Lanud Adisutjipto, Yogyakarta
Telp. (0274) 451 262, 451 263, Faks. (0274) 451 265

.
.
.
.
.
.
.
.
.
.





Daftar Isi

Bab 1. Pengantar Pemrograman Assembler ........................................................... 1-1
1.1 Tujuan Praktikum .............................................................................................. 1-1
1.2 Alat dan Bahan ................................................................................................. 1-1
1.3 Teori Singkat ..................................................................................................... 1-1
1.4 Langkah-langkah Percobaan ............................................................................ 1-2
1.4.1 Membuat Project Baru di AVR Studio 1-2
1.4.2 Membuat Program Baru 1-2
1.4.3 Debugging 1-3
1.4.4 Mengakses Register 1-4
1.5 Data Pengamatan ............................................................................................. 1-6
1.5.1 Debugging 1-6
1.5.2 Mengakses Register 1-6
Bab 2. Menggunakan Mode Pengalamatan .............................................................. 2-1
2.1 Tujuan Praktikum .............................................................................................. 2-1
2.2 Alat dan Bahan ................................................................................................. 2-1
2.3 Teori Singkat ..................................................................................................... 2-1
2.4 Langkah-langkah Percobaan ............................................................................ 2-1
2.4.1 Mengakses Memori data dengan Data Direct Addressing 2-1
2.4.2 Mengakses Memori data dengan Data Indirect Addressing 2-2
2.4.3 Mengakses Memori data dengan Data Indirect with Displacement
Addressing 2-2
2.4.4 Mengakses Memori data dengan Data Indirect Addressing with Pre-
increment/decrement Addressing 2-2
2.5 Data Pengamatan ............................................................................................. 2-4
2.5.1 Mengakses Memori data dengan Data Direct Addressing 2-4
2.5.2 Mengakses Memori data dengan Data Indirect Addressing 2-4
2.5.3 Mengakses Memori data dengan Data Direct Addressing 2-4
2.5.4 Mengakses Memori data dengan Data Indirect with Displacement
Addressing 2-4
Bab 3. Menggunakan Port I/O ..................................................................................... 3-1
3.1 Tujuan Praktikum .............................................................................................. 3-1
3.2 Alat dan Bahan ................................................................................................. 3-1
3.3 Teori Singkat ..................................................................................................... 3-1
3.4 Langkah-langkah Percobaan ............................................................................ 3-2
3.4.1 Menjadikan Pin sebagai Port Keluaran 3-2
3.4.2 Menjadikan Pin sebagai Port Masukan 3-3
3.4.3 Menjadikan Port I/O sebagai Current Source dan Current Sink 3-3
3.4.4 Memberi Data ke Port Masukan 3-3
3.5 Data Pengamatan ............................................................................................. 3-5
3.5.1 Menjadikan Pin sebagai Port Keluaran 3-5
3.5.2 Menjadikan Pin sebagai Port Masukan 3-5
3.5.3 Menjadikan Port I/O sebagai Current Sink dan Current Source 3-5
3.5.4 Memberi Data ke Port Masukan 3-5
Bab 4. Menggunakan Pewaktu/Pencacah ................................................................. 4-1
4.1 Tujuan Praktikum .............................................................................................. 4-1
4.2 Alat dan Bahan ................................................................................................. 4-1
4.3 Teori Singkat ..................................................................................................... 4-1
4.3.1 Pewaktu/Pencacah 0 4-2
4.3.2 Pewaktu 0 sebagai Penunda dengan Metode Luapan (Overflow) 4-3
.
.
.
.
.
.
.
.
.
.





4.3.3 Pewaktu 0 sebagai Penunda dengan Metode Pembandingan (Match
Compare) 4-3
4.4 Langkah-langkah Percobaan ............................................................................ 4-4
4.4.1 Pewaktu 0 sebagai Penunda dengan Metode Luapan (Overflow) 4-4
4.4.2 Pewaktu 0 sebagai Penunda dengan Metode Pembandingan (Match
Compare) 4-5
4.5 Data Pengamatan ............................................................................................. 4-6
4.5.1 Pewaktu 0 sebagai Penunda dengan Metode Luapan (Overflow) 4-6
4.5.2 Pewaktu 0 sebagai Penunda dengan Metode Pembandingan (Match
Compare) 4-6
Bab 5. Menggunakan Interupsi .................................................................................. 5-1
5.1 Tujuan Praktikum .............................................................................................. 5-1
5.2 Alat dan Bahan ................................................................................................. 5-1
5.3 Teori Singkat ..................................................................................................... 5-1
5.3.1 Interupsi dari Pewaktu 0 5-2
5.4 Langkah-langkah Percobaan ............................................................................ 5-2
5.4.1 Interupsi Terpicu Match Compare di Pewaktu 0 5-2
5.5 Data Pengamatan ............................................................................................. 5-4
Bab 6. Pengantar Pemrograman Menggunakan CodeVisionAVR ......................... 6-1
6.1 Tujuan Praktikum .............................................................................................. 6-1
6.2 Alat dan Bahan ................................................................................................. 6-1
6.3 Teori Singkat ..................................................................................................... 6-1
6.4 Langkah-langkah Percobaan ............................................................................ 6-2
6.4.1 Membuat Project Baru di CodeVisionAVR 6-2
6.4.2 Menulis Program Menggunakan Pewaktu Nol 6-2
Bab 7. Komunikasi Serial USART .............................................................................. 7-1
7.1 Tujuan Praktikum .............................................................................................. 7-1
7.2 Alat dan Bahan ................................................................................................. 7-1
7.3 Teori Singkat ..................................................................................................... 7-1
7.4 Langkah-langkah Percobaan ............................................................................ 7-1
7.4.1 Inisiasi Port Serial 7-1
7.4.2 Pengiriman Data ke Komputer 7-2
Bab 8. Pengukuran Tegangan DC dengan ADC Mikrokontroler ............................ 8-1
8.1 Tujuan Praktikum .............................................................................................. 8-1
8.2 Alat dan Bahan ................................................................................................. 8-1
8.3 Teori Singkat ..................................................................................................... 8-1
8.4 Langkah-langkah Percobaan ............................................................................ 8-2
Bab 9. Pengantar Sistem Berbasis Mikroprosesor ................................................. 9-1
9.1 Tujuan Praktikum .............................................................................................. 9-1
9.2 Alat dan Bahan ................................................................................................. 9-1
9.3 Teori Singkat ..................................................................................................... 9-1
9.4 Langkah-langkah Percobaan ............................................................................ 9-1
.
.
.
.
.
.
.
.
.
.


1-1
Bab 1.
P
P
e
e
n
n
g
g
a
a
n
n
t
t
a
a
r
r

P
P
e
e
m
m
r
r
o
o
g
g
r
r
a
a
m
m
a
a
n
n
A
A
s
s
s
s
e
e
m
m
b
b
l
l
e
e
r
r

1.1 Tujuan Praktikum
Memahami cara mengakses register.
1.2 Alat dan Bahan
1 Satu set PC
2 Perangkat lunak AVR Studio 4
1.3 Teori Singkat
Mikrokontroler merupakan miniatur dari sebuah komputer. Keping IC ini biasa
digunakan untuk mengendalikan suatu peralatan. Sebagaimana komputer, keping ini dapat
diprogram. Salah satu bahasa yang digunakan untuk pemrograman adalah bahasa
assembler. Untuk memudahkan pemahaman cara kerja suatu listing program, dapat
digunakan perangkat lunak simulasi AVR Studio 4 dari Atmel yang dapat diunduh secara
gratis di situs Atmel.



Gambar tampilan awal AVR Studio 4
Perangkat lunak AVR Studio 4 dapat digunakan untuk mengedit listing program
dan membantu melihat isi register dan memori data. Dengan program ini dapat pula
disimulasikan jalannya program langkah demi langkah mendekati kondisi yang sebenarnya.

Bab 1
.
.
.
.
.
.
.
.
.
.


1-2
1.4 Langkah-langkah Percobaan
1.4.1 MEMBUAT PROJECT BARU DI AVR STUDIO
Untuk membuat sebuah aplikasi baru, maka kita harus membuat sebuah project
baru di AVR Studio dengan langkah-langkah sebagai berikut.
1. Pilih menu Project New Project Project Type: Atmel AVR Assembler.
2. Isikan nama project di Project Name. Pastikan nama project adalah nama file inisial dan
tentukan pula lokasi foldernya.
3. Lanjutkan ke langkah berikutnya dengan menekan tombol Next.
4. Pilih Debug Platform: AVR Simulator dan Device: ATMega8535. Setelah ditekan Finish,
akan keluar tampilan seperti berikut.

1.4.2 MEMBUAT PROGRAM BARU
1. Tuliskan instruksi compiler direction untuk ATMega8535 sebagai berikut:
.include "m8535def.inc"
2. Tentukan awal program di lokasi 0000h dengan menuliskan:
.org 0x0000
3. Set nilai default untuk stack memori di akhir lokasi SRAM dengan menuliskan:
ldi r16,low(ramend)
out SPL,r16
ldi r16,high(ramend)
out SPH,r16
4. Kompilasi program dengan menu: Build Build atau tekan F7. Dan amati jendela di Tab
Build.
.
.
.
.
.
.
.
.
.
.


1-3

5. Perhatikan memori yang digunakan:
.cseg: code segment (memori program) dimulai dari 000000h hingga 000008h,
berisi 8 bahasa mesin, menggunakan 8 byte (0,1 %) dari total 8129 byte.
.dseg: data segment (memori data atau SRAM) yang diakses adalah alamat
000060h. Memori ini sebagai penunjuk stack memori. Total memori data adalah
512 byte dan belum digunakan.
.eseg: data eeprom sebesar 512 byte belum digunakan.
1.4.3 DEBUGGING
1. Simulasikan program di AVR Studio dengan menggunakan menu Debug Start
Debugging atau Ctrl-Shift-Alt-F5. Amati perubahan tampilan.

2. Pastikan frekuensi clock simulasi sama dengan frekuensi clock yang akan digunakan.
Frekuensi clock dapat diubah pada saat debugging dengan menggunakan menu Debug
AVR Simulation Options Device Selection dan ubah frekuensinya. Gunakan frekuensi
7,372800 MHz dalam simulasi ini!
.
.
.
.
.
.
.
.
.
.


1-4
3. Amati isi memori program dengan menu View Memory atau Alt-4, kemudian pilih
memori program.
4. Perhatikan bahwa setiap instruksi assembler yang diketik di listing akan menjadi satu
word bahasa mesin dengan panjang 16 bit. Catat bahasa mesin dari keempat instruksi
di tabel data pengamatan!
5. Pastikan bahwa penunjuk eksekusi program (panah kuning) berada di baris pertama
instruksi sebagaimana gambar di atas.
6. Amati isi register PC (Program Counter) dan SP (Stack Pointer), juga nilai Cylce Counter
dan Stop Watch.
7. Jalankan program langkah demi langkah dengan menu Debug - Step Over atau tekan
F10, dan catat isi register PC dan SP, dan juga nilai Cylce Counter dan Stop Watch di
tabel data pengamatan.
Pertanyaan:
1. Berapa siklus untuk mengerjakan sebuah instruksi?
2. Berapa lama waktu untuk mengerjakan sebuah instruksi dengan frekuensi clock
7,372800 MHz?
1.4.4 MENGAKSES REGISTER
1. Ketikan listing berikut
ldi r16,0x12
ldi r17,0x34
mov r0,r16
mov r1,r17
2. Kompilasi program.
3. Amati eksekusi program (debugging) dengan menggunakan menu Debug Start
Debugging atau Ctrl-Shift-Alt-F5.
4. Amati isi memori dengan menu View Memory atau Alt-4.

5. Ubah memori yang ditampilkan menjadi register.
6. Jalankan program langkah demi langkah dengan menu Debug - Step Over atau tekan
F10.
7. Tekan F10 beberapa kali hingga penunjuk program ada di baris ldi r16,0x12.
.
.
.
.
.
.
.
.
.
.


1-5

8. Tekan F10. Amati isi memori data dan catat isi lokasi mana yang berubah.
9. Ulangi langkah 8 sampai program selesai dieksekusi.
Pertanyaan & Tugas:
1. Jalankan program langkah demi langkah dan amati peruahan isi lokasi yang berubah
saat mengeksekusi instruksi berikut:
ldi r16,low(ramend)
Mengapa r16 berisi 5F?
2. Jalankan program langkah demi langkah lagi dan amati peruahan isi lokasi yang
berubah saat mengeksekusi instruksi berikut:
ldi r16,high(ramend)
Mengapa r16 berisi 02?
3. Apa arti 025F
heks
bagi mikrokontroler ini?
4. Berapa siklus waktu untuk mengerjakan potongan listing tersebut?
5. Berapa lama waktu untuk mengerjakan potongan listing tersebut dengan frekuensi
clock 7,372800 MHz?
6. Ubahlah clock frekuensi menjadi 12 MHz, berapa lama waktu untuk mengerjakan
potongan listing tersebut?
7. Gantilah r16 dan r17 pada percobaan 1.4.4 dengan r2 dan r3! Amati apa yang terjadi!
Mengapa?

.
.
.
.
.
.
.
.
.
.


1-6
1.5 Data Pengamatan
1.5.1 DEBUGGING
Instruksi Bahasa Mesin
ldi r16,low(ramend)
out SPL,r16
ldi r16,high(ramend)
out SPH,r16

Pengamatan atas register PC dan SP.
Instruksi PC SP Cycle Counter Stop Watch
ldi r16,low(ramend)
out SPL,r16
ldi r16,high(ramend)
out SPH,r16
1.5.2 MENGAKSES REGISTER
Instruksi
Isi register
r0 r1 r16 r17
ldi r16,0x12
ldi r17,0x34
mov r0,r16
mov r1,r17















Kelompok Praktikum:
1. ...................................... NIM .................
2. ...................................... NIM .................
3. ...................................... NIM .................
4. ...................................... NIM .................
Instruktur,
Tgl. ..........
...........................
.
.
.
.
.
.
.
.
.
.


2-1

Bab 2.
M
M
e
e
n
n
g
g
g
g
u
u
n
n
a
a
k
k
a
a
n
n
M
M
o
o
d
d
e
e

P
P
e
e
n
n
g
g
a
a
l
l
a
a
m
m
a
a
t
t
a
a
n
n

2.1 Tujuan Praktikum
Mahasiswa dapat mengakses memori dengan beberapa mode pengalamatan.
2.2 Alat dan Bahan
1. Satu set PC
2. Perangkat lunak AVR Studio 4
2.3 Teori Singkat
Penyalinan data dari register ke memori data dapat dilakukan dengan
menggunakan instruksi sts (store direct to data space). Penyalinan data dari memori data
ke register dapat dilakukan dengan menggunakan instruksi lds (load direct from data
space). Kedua instruksi tersebut menggunakan register sebagai operand untuk membentuk
mode pengalamatan Data Direct.
Penyalinan data dari register ke memori data dan sebaliknya juga dapat
dilaksanakan dengan mode pengalamatan Data Indirect. Pada mode ini dapat digunakan
salah satu dari tiga pasang register sebagai penunjuk lokasi memori data. Di sini dapat
digunakan instruksi st (Store Indirect). Ketiga pasang register tersebut adalah:
1. r26:r27 yang dapat diwakili oleh register x,
2. r28:r29 yang dapat diwakili oleh register y, dan
3. r30:r31 yang dapat diwakili oleh register z.
Kita dapat mengisikan beberapa lokasi memori data dengan suatu konstanta
dengan menggunakan mode pengalamatan Data Indirect with Displacement. Di sini register
indeks y dapat ditambah dengan suatu konstanta untuk menunjuk lokasi memori data lain.
Di sini dapat digunakan instruksi std (Store Indirect with Displacement).
Jika diperlukan, kita juga dapat mengisi beberapa lokasi memori data berurutan
dengan suatu konstanta dengan mode pengalamatan Data Indirect Addressing with Pre-
increment/decrement. Di sini register indeks x, y atau z dapat dinaikkan (di-increment)
atau diturunkan (di-decrement) untuk menunjuk lokasi memori data di atasnya atau di
bawahnya. Di sini dapat digunakan operand x+, x-, y+, dan seterusnya.
2.4 Langkah-langkah Percobaan
2.4.1 MENGAKSES MEMORI DATA DENGAN DATA DIRECT ADDRESSING
Percobaan berikut akan mengisi lokasi memori data 0060h dengan 03h,
kemudian menyalin isi lokasi memori data 0060h ke r17.
1. Tulislah potongan listing berikut di AVR Studio.
ldi r16,0x03 ;load r16 with immadiate
sts 0x60,r16 ;copy from register to memory
lds r17,0x60 ;copy from memory to register
2. Kompilasi program dan jalankan program langkah demi langkah.
Bab 2
.
.
.
.
.
.
.
.
.
.


2-2
3. Catat isi register dan memori data pada tabel di subbab Data Pengamatan setiap
selesai menjalankan instruksi.
Pertanyaan:
1. Dapatkah mengisi lokasi memori data 0060h dengan 03h secara langsung tanpa
menggunakan bantuan r16?
2. Dapatkah suatu lokasi memori data diisi suatu konstanta (immadiate) secara langsung
tanpa menggunakan bantuan register?
2.4.2 MENGAKSES MEMORI DATA DENGAN DATA INDIRECT ADDRESSING
Percobaan berikut akan mengisi lokasi memori data 0060h dengan 04 dengan
bantuan register penunjuk (pointer register) x, kemudian menyalin isi lokasi memori data
0060h ke r17.
1. Tulislah potongan listing berikut di AVR Studio.
ldi r16,0x04
ldi r26,0x60;save target to memory location index register X
st x,r16 ;copy from register to memory
ld r17,x ;copy from memory to register
2. Kompilasi program dan jalankan program langkah demi langkah.
3. Catat isi register dan memori data pada tabel di subbab Data Pengamatan setiap
selesai menjalankan instruksi.
Tugas:
Buatlah listing tersingkat agar memori data di lokasi 0x0060 hingga 0x6F berisi 04h!
2.4.3 MENGAKSES MEMORI DATA DENGAN DATA INDIRECT WITH DISPLACEMENT
ADDRESSING
Percobaan berikut akan mengisi lokasi memori data 0060h, 0062h dan 0064h
dengan 04 dengan bantuan register penunjuk y.
1. Tulislah potongan listing berikut di AVR Studio.
ldi r16,0x04
ldi r28,0x60 ;save target to memory location
;index register Y
st y,r16 ;copy from register to memory:0x60
std y+2,r16 ;copy from register to memory:0x62
std y+4,r16 ;copy from register to memory:0x64
2. Kompilasi program dan jalankan program langkah demi langkah.
3. Catat isi register dan memori data pada tabel di subbab Data Pengamatan setiap
selesai menjalankan instruksi.
Pertanyaan:
Bagaimana caranya agar kita dapat menyalin isi lokasi 0x60, 0x62 dan 0x64 ke register
r17, r18 dan r19 dengan mode pengalamatan Data Indirect with Displacement? Instruksi
apa yang digunakan?
2.4.4 MENGAKSES MEMORI DATA DENGAN DATA INDIRECT ADDRESSING WITH PRE-
INCREMENT/DECREMENT ADDRESSING
Percobaan berikut akan mengisi lokasi memori data 0060h, 0061h dan 0062
dengan 04h dengan bantuan register penunjuk y.
1. Tulislah potongan listing berikut di AVR Studio.
ldi r16,0x04
ldi r28,0x60
st y+,r16 ;copy from register to memory:0x60
st y+,r16 ;copy from register to memory:0x61
.
.
.
.
.
.
.
.
.
.


2-3
st y+,r16 ;copy from register to memory:0x62
2. Kompilasi program dan dan jalankan program langkah demi langkah.
3. Catat isi register dan memori data pada tabel di subbab Data Pengamatan setiap
selesai menjalankan instruksi.
Pertanyaan:
1. Bagaimana caranya agar kita dapat menyalin isi lokasi 0x60, 0x61 dan 0x62 ke register
r17, r18 dan r19 dengan mode pengalamatan Data Indirect Addressing with Pre-
increment/decrement Addressing? Instruksi apa yang digunakan?
2. Bagaimana caranya agar urutan pengisian memori data di percobaan di atas dibalik,
yaitu dimulai dari 0x62, 0x61 dan terakhir 0x60?

.
.
.
.
.
.
.
.
.
.


2-4

2.5 Data Pengamatan
2.5.1 MENGAKSES MEMORI DATA DENGAN DATA DIRECT ADDRESSING
Instruksi
Isi register Isi lokasi
memori data
0x60
r16 r17
ldi r16,0x03
sts 0x60,r16
lds r17,0x60
2.5.2 MENGAKSES MEMORI DATA DENGAN DATA INDIRECT ADDRESSING
Instruksi
Isi register Isi lokasi
memori data
0x60
r16 r17
ldi r16,0x04
ldi r26,0x60
st x,r16
ld r17,x
2.5.3 MENGAKSES MEMORI DATA DENGAN DATA DIRECT ADDRESSING
Instruksi
Isi register Isi lokasi memori data
r16 r28 0x60 0x62 0x64
ldi r16,0x04
ldi r28,0x60
st y,r16
std y+2,r16
std y+4,r16
2.5.4 MENGAKSES MEMORI DATA DENGAN DATA INDIRECT WITH DISPLACEMENT
ADDRESSING
Instruksi
Isi register Isi lokasi memori data
r16 r28 0x60 0x61 0x62
ldi r16,0x04
ldi r28,0x60
st y+,r16
st y+,r16
st y+,r16


Kelompok Praktikum:
1. ...................................... NIM .................
2. ...................................... NIM .................
3. ...................................... NIM .................
4. ...................................... NIM .................
Instruktur,
Tgl. ..........
...........................
.
.
.
.
.
.
.
.
.
.


3-1
Bab 3.
M
M
e
e
n
n
g
g
g
g
u
u
n
n
a
a
k
k
a
a
n
n
P
P
o
o
r
r
t
t
I
I
/
/
O
O

3.1 Tujuan Praktikum
Agar mahasiswa dapat menggunakan port I/O sesuai dengan kebutuhan.
3.2 Alat dan Bahan
1. Satu set PC.
2. Perangkat lunak AVR Studio 4.
3. Satu set pengunduh K-125 dan sistem minimal ATMega8535.
4. Satu buah multimeter.
3.3 Teori Singkat
Mikrokontroler ATMega8535
mempunyai 4 buah port I/O paralel, yaitu
Port A, Port B, Port C dan Port D. Keempat
port tersebut membentuk 32 pin port
dengan nama PA0, PA1, hingga PD7
sebagaimana gambar di samping.
Semua pin dapat difungsikan
sebagai pin port masukan atau keluaran.
Semua pin terhubung dengan data bus
melalui sebuah penyangga yang dibentuk
oleh flip-flop D.
Terdapat beberapa flip-flop D pada
sebuah pin. Setiap flip-flop D membentuk
sebuah register yang dapat ditulis atau
dibaca. Setiap register mempunyai fungsi
khusus untuk keberlangsungan transmisi data dari data bus ke sebuah pin atau sebaliknya.

Bab 3
.
.
.
.
.
.
.
.
.
.


3-2


Daftar fungsi setiap register dapat dilihat pada tabel fungsional di bawah ini.


Dari tabel tersebut, maka sebuah pin port dapat difungsikan sebagai pin masukan
atau pin keluaran dengan beberapa pilihan (option). Register DDR (Data Direction Register)
berfungsi untuk menentukan arah aliran data. Arah data akan keluar jika pin difungsikan
sebagai keluaran, dan arah data akan masuk jika pin difungsikan sebagai masukan.
Register ini dapat dibaca dan ditulis. Register PORT digunakan untuk menentukan data
yang akan dikeluarkan. Register ini juga dapat dibaca dan ditulis. Sedangkan register PIN
akan berisi data yang masuk dari port. Register ini hanya dapat dibaca saja.
3.4 Langkah-langkah Percobaan
3.4.1 MENJADIKAN PIN SEBAGAI PORT KELUARAN
Percobaan berikut akan mengeluarkan logika 0 dan 1 pada PORTC2 dan PORTC3,
kemudian membaca data di PORTC dan menyimpannya di r18.
1. Tulislah potongan listing berikut.
ldi r16,0b00001100 ;set output to pin 2 and 3
ldi r17,0b00000100 ;set '0' to pin 2 and '1' to pin 3
out ddrc,r16
out portc,r17
nop ;no-operation
in r18,pinc ;read port, save to r18
.
.
.
.
.
.
.
.
.
.


3-3
2. Kompilasi program dan buka jendela port dengan menu View Toolbars I/O. Dan
buka PORTC dengan mengklik tanda + di depan icon PORTC.
3. Jalankan program langkah demi langkah.
4. Catat isi register DDRC, PINC dan PORTC pada tabel di subbab Data Pengamatan
setiap selesai menjalankan instruksi.
Pertanyaan:
Apa guna disisipkan instruksi nop? Bagaimana jika instruksi tersebut dihilangkan?
Mengapa?
3.4.2 MENJADIKAN PIN SEBAGAI PORT MASUKAN
Percobaan berikut akan menjadikan PORTC7 ~
PORTC4 sebagai masukan, kemudian membaca data di
PORTC dan menyimpannya di r18.
1. Jalankan kembali program di subbab 3.4.1 langkah
demi langkah.
2. Setelah menjalankan instruksi nop, isikan data 1 ke
PINC bitke-4, 5, 6, 7 dengan mengklik bit-bit tersebut
sebagaimana gambar di samping.
3. Jalankan instruksi in r18,pinc.
4. Catat isi register r18!
Pertanyaan:
Pada sebuah port, dapatkah beberapa pin dijadikan port keluaran sementara itu beberapa
pin dijadikan port masukan? Bagaimana caranya?
3.4.3 MENJADIKAN PORT I/O SEBAGAI CURRENT SOURCE DAN CURRENT SINK
Percobaan berikut akan mengeluarkan logika 0 dan 1
pada PORTC2 dan PORTC3. Kedua pin port tersebut akan
bertindak sebagai current source dan current sink.
1. Unduhlah program di percobaan 3.4.1 ke mikrokontroler
ATMega8535 menggunakan perangkat lunak AVR Prog atau
Avr-Osp II.
2. Hubungkan PORTC2 dan PORTC3 sebagaimana gambar
disamping.
3. Amati nyala kedua LED.
Pertanyaan:
Berapa arus maksinal yang dapat dikeluarkan atau ditarik oleh
sebuah pin?
3.4.4 MEMBERI DATA KE PORT MASUKAN
Percobaan berikut akan menjadikan PORTC7 ~ PORTC4 sebagai masukan dan
PORTC3 dan PORTC2 sebagai keluaran sebagaimana percobaan sebelumnya. Data dari
PORTC akan disimpan di r18 dan dikeluarkan ke PORTD.
1. Tambahkan beberapa instruksi pada percobaan 3.4.1 menjadi sebagai berikut.
ldi r16,0b00001100 ;set output to pin 2 and 3
ldi r17,0b00000100 ;set '0' to pin 2 and '1' to pin 3
out ddrc,r16
out portc,r17
nop ;no-operation
in r18,pinc ;read port, save to r18
330
LED2
PC2
PC3
330
LED1
Vcc
ATMega8535
.
.
.
.
.
.
.
.
.
.


3-4
ldi r16,0b11111111 ;set output to PORTB
out ddrd,r16
out portd,r18
2. Kompilasi program dan amati isi register PORTC.
3. Jalankan program langkah demi langkah.
4. Setelah menjalankan instruksi nop, isikan data 1 ke
PINC bitke-4, 5, 6, 7 dengan mengklik bit-bit tersebut sebagaimana percobaan 3.4.2.
5. Jalankan instruksi in r18,pinc. Isi register r18 mestinya sama dengan pada percobaan
3.4.2.
6. Jalankan program hingga baris terakhir dan catat isi register untuk PORTD.
7. Unduh program ke mikrokontroler.
8. Cek logika keluaran setiap pin di PORTD dengan menggunakan voltmeter (0 jika
tegangan pin = 0 V, dan 1 untuk jika tegangan pin = 5 V). Catat data di PORTD
sebagai data awal.
9. Beri masukan PORTC4 ~ PORTC7 dengan logika 1 dan PORTC0 ~ PORTC1 dengan
logika 0 (hubungkan pin PORTC0 ~ PORTC1 ke Ground).
10. Catat data di PORTD saat ini sebagai data akhir.
11. Ubah-ubahlah data di PORTC4 ~ PORTC7 dan amati data di PORTD!
Pertanyaan:
1. Apakah data di PORTD selalu sama dengan data di PORTC?
2. Gambarkan diagram alir (flowchart) program yang sedang dieksekusi mikrokontroler!
.
.
.
.
.
.
.
.
.
.


3-5
3.5 Data Pengamatan
3.5.1 MENJADIKAN PIN SEBAGAI PORT KELUARAN
Instruksi
Isi register
DDRC PORTC PINC
ldi r16,0b00000011
ldi r17,0b00000001
out ddrc,r16
out portc,r17
nop
in r18,pinc
3.5.2 MENJADIKAN PIN SEBAGAI PORT MASUKAN
Isi r18 = ... .
3.5.3 MENJADIKAN PORT I/O SEBAGAI CURRENT SINK DAN CURRENT SOURCE
LED1 ............................(menyala/padam)

LED2 ............................(menyala/padam)
3.5.4 MEMBERI DATA KE PORT MASUKAN
Hasil Simulasi:
DDRD =
PIND =
PORTD =

Hasil di mikrokontroler:
Data awal PORTD =
Data akhir PORTD =









Kelompok Praktikum:
1. ...................................... NIM .................
2. ...................................... NIM .................
3. ...................................... NIM .................
4. ...................................... NIM .................
Instruktur,
Tgl. ..........
...........................
.
.
.
.
.
.
.
.
.
.


4-1
Bab 4.
M
M
e
e
n
n
g
g
g
g
u
u
n
n
a
a
k
k
a
a
n
n
P
P
e
e
w
w
a
a
k
k
t
t
u
u
/
/
P
P
e
e
n
n
c
c
a
a
c
c
a
a
h
h

4.1 Tujuan Praktikum
Agar mahasiswa dapat menggunakan pewaktu/pencacah (timer/counter) sesuai
dengan kebutuhan.
4.2 Alat dan Bahan
1. Satu set PC.
2. Perangkat lunak AVR Studio 4.
3. Satu set pengunduh K-125 dan sistem minimal ATMega8535.
4. Satu buah osiloskop.
4.3 Teori Singkat
Dapat dipastikan bahwa hampir semua mikroprosesor dan mikrokontroler
mempunyai fasilitas pewaktu/pencacah (timer/counter). Mikrokontroler ATMega8535
mempunyai 3 buah pewaktu/pencacah, yaitu pewaktu/pencacah 0, 1, dan 2. Semua
pewaktu/pencacah tersebut dapat difungsikan sebagai pewaktu (timer) atau pencacah
(coounter).
Perangkat ini dapat difungsikan sebagai pewaktu atau pencacah. Sebagaimana
gambar blok diagram di bawah, pemilihan fungsi perangkat ini ditentutan oleh Clock Select
yang akan menentukan clk
Tn
apakah berasal dari prescaler (clock CPU yang telah
dilewatkan ke prescaler) atau berasal dari Tn (clock dari luar).

Blok diagram pewaktu secara umum
Setiap terjadi isyarat clk
Tn
, maka sebuah nilai TCNTn secara otomatis akan
bertambah satu digit (increment) atau pada beberapa pewaktu dapat berkurang satu digit
(decrement). Pewaktu/pencacah 0 dan 2 merupakan pewaktu/pencacah 8 bit, sehingga
Bab 4
.
.
.
.
.
.
.
.
.
.


4-2
TCNT0 dan TCNT2 merupakan register 8 bit; sedangkan pewaktu/pencacah 1 merupakan
pewaktu/pencacah 16 bit, sehingga TCNT1 merupakan register 16 bit yang terdiri dari dua
register 8 bit TCNT1A dan TCNT1B.
Pada saat di TCNTn terjadi luapan (overflow) yaitu bernilai 0xFFh (pada saat
menghitung naik) atau bernilai nol (pada saat menghitung turun), maka akan diberikan
isyarat ke Control Logic. Perangkat ini akan memberikan aksi tertentu yang dapat
ditentukan oleh register TCCRn, misalnya terjadi isyarat interupsi.
Aksi di Control Logic juga dapat dibangkitkan jika terjadi peristiwa lain. Pada saat
nilai TCNTn bertambah atau berkurang, jika nilai TCNTn sama dengan nilai OCRn, maka
Control Logic juga dapat terpicu untuk melakukan aksi tertentu, misalnya: terjadi interupsi,
mengeset atau mereset OCn, dan mengeset atau mereset TCNTn.
Nilai OCRn dapat diubah-ubah. Dengan mengubah-ubah nilai register tersebut
dapat dibentuk untai pembentuk gelombang (Waveform Generator).
Semua pewaktu dapat berjalan secara mandiri (independent). Secara umum,
jalannya sebuah pewaktu tidak akan mempengaruhi jalannya pewaktu lain. Bahkan
jalannya pewaktu tidak akan mempengaruhi jalannya program utama. Jalannya
pewaktu/pencacah dan efeknya terhadap program utama dapat ditentukan dengan mengisi
beberapa nilai pada register kontrol pewaktu/pencacah. Semua register kontrol
pewaktu/pencacah merupakan register I/O, sehingga akses ke register-register tersebut
menggunakan instruksi in dan out.
4.3.1 PEWAKTU/PENCACAH 0
Pewaktu 0 merupakan pewaktu 8 bit. Jika pewaktu ini diaktifkan, maka nilai
sebuah register bernama TCNT0 akan naik satu digit setiap adanya clock pewaktu. Clock
pewaktu dapat ditentukan sebelum pewaktu dijalankan. Register TCNT0 mempunyai nilai
awal 0 dan isinya dapat dibaca atau ditulisi (read/write, R/W). Perhatikan gambar berikut.

Jalannya pewaktu/pencacah 0 dapat dikendalikan dengan mengeset nilai register
TCCR0 (Timer/Counter Control Register 0) dan TIMSK (Timer/Counter Interrupt Mask).
Deskripsi setiap bit pada register TCCR0 dapat dilihat pada gambar berikut.

Keterangan:
Bit 7 FOC0 : Force Output Compare
Bit 6, 3 WGM01:0: Waveform Generation Mode
Bit 5:4 COM01:0 : Compare Match Output Mode
Bit 2:0 CS02:0 : Clock Select
Bit-bit CS0 dapat menentukan frekuensi clock pewaktu berdasar tabel berikut.
.
.
.
.
.
.
.
.
.
.


4-3

Hasil pencacahan yang dilakukan oleh pewaktu 0 dapat dilihat pada register bit 1
dan bit 0 register TIFR (Timer/Counter Interrupt Flag). Lihat gambar berikut.

Keterangan:
Bit 1 OCF0: Output Compare Flag 0
Bit 0 TOV0: Timer/Counter0 Overflow Flag
4.3.2 PEWAKTU 0 SEBAGAI PENUNDA DENGAN METODE LUAPAN (OVERFLOW)
Pewaktu sering difungsikan sebagai penunda eksekusi suatu baris program.
Algoritma penundaan paling sederhana untuk keperluan ini sebagai berikut:
1. Set nilai awal pewaktu 0 (TCNT0) ke 00h.
2. Set nilai register kontrol pewaktu 0 (TCCR0) sebagai berikut:
a. Matikan bit FOC0.
b. Set bit WGM0 ke mode normal: 00.
c. Set COM0 ke operasi port normal: 00.
d. Isi bit-bit CS0, maka pewaktu akan aktif.
3. Tunggu hingga bit TOV0 pada TIFR diset. Pada saat TCNT0 berubah dari 0xFF ke 0x00,
maka secara otomatis bit TOV0 akan diset.
Jika pewaktu ini akan digunakan kembali, matikan bit TOV0 dengan memberikan
logika 1.
4.3.3 PEWAKTU 0 SEBAGAI PENUNDA DENGAN METODE PEMBANDINGAN (MATCH
COMPARE)
Pewaktu lebih sering difungsikan dengan mode match compare. Algoritma
penundaan paling sederhana untuk keperluan ini sebagai berikut:
1. Set nilai awal pewaktu 0 (TCNT0) ke 00h.
2. Set nilai pembanding ke OCR0.
3. Set nilai register kontrol pewaktu 0 (TCCR0) sebagai berikut:
a. Matikan bit FOC0.
b. Set bit WGM0 ke mode CTC (Clear Timer on Compare Match): 10.
c. Set COM0 ke operasi port normal: 00.
d. Isi bit-bit CS0, maka pewaktu akan aktif.
4. Tunggu hingga bit OCF0 pada TIFR diset. Pada saat TCNT0 = OCR0, maka secara
otomatis bit OCF0 akan diset. Jika pewaktu ini akan digunakan kembali, matikan bit
OCF0 dengan memberikan logika 1.
.
.
.
.
.
.
.
.
.
.


4-4
4.4 Langkah-langkah Percobaan
4.4.1 PEWAKTU 0 SEBAGAI PENUNDA DENGAN METODE LUAPAN (OVERFLOW)
Pada percobaan ini, pewaktu 0 akan difungsikan sebagai penunda berubahnya
logika keluaran di port C pin 2 dan 3.
1. Tulislah potongan listing berikut.
.include "m8535def.inc"
.def tmp=r16
.org 0x0000
rjmp main
Timer:
ldi tmp,0b00000000
out tcnt0,tmp
ldi tmp,0b00000000
out timsk,tmp
ldi tmp,0b00000001
out tccr0,tmp
ret
Main:
ldi tmp,low(ramend)
out SPL,tmp
ldi tmp,high(ramend)
out SPH,tmp
ldi r16,0b00001100 ;set output to pin 2 and 3
ldi r17,0b00000100 ;set '0' to pin 2, '1' to pin 3
out ddrc,r16
out portc,r17
rcall Timer
Loop:
in tmp,tifr
sbrs tmp,0
rjmp loop
ori tmp,0b00000001
out tifr,tmp
in tmp,PORTC
ldi r17,0b00001100
eor tmp,r17
out portc,tmp
rjmp loop
2. Kompilasi program.
3. Jalankan program langkah demi langkah.
4. Pada saat akan menjalankan instruksi rcall Timer, masuklah ke rutin Timer
mengggunakan menu Debug Step Into atau F11.
5. Pada saat akan menjalankan ret, lihatlah isi seting pada TIMER_COUNTER_0 di jendela
I/O View. Pastikan pewaktu dijalankan dengan clock pewaktu = clock CPU (No
Prescalling).
6. Pastikan juga isi register OCR0, TCCR0, TCNT0
dan TIFR seperti yang tertampil di gambar
tersebut.
7. Buka jendela port PORTC dan catat data di
PORTC sebagai data awal PORTC.
8. Catat nilai register TCNT0, siklus prosesor
(Cycle Counter), dan waktu yang telah
digunakan prosesor (Stop Watch).
9. Jalankan program dengan Step Over (F10)
hingga nilai TCNT0 naik satu.
10. Ulangi langkah 7 dan 8 hingga semua baris
.
.
.
.
.
.
.
.
.
.


4-5
pada tabel di Data pengamatan terisi semua.
11. Jalankan program hingga instruksi out portc,tmp dengan mengeklik baris sesudah
instruksi tersebut dan perintah Debug Run to Cursor (Ctrl-F10).
12. Perhatikan isi PORTC! Catat nilai siklus dan waktu terjadinya perubahan pada PORTC
(lihat Cycle Counter dan Stop Watch).
13. Ulangi langkah 11 dan 12 hingga baris di data tabel kebenaran terisi semua.
14. Unduhlah program tersebut ke mikrokontroler!
15. Gambarkan grafik gelombang keluaran di port C pin 2 dan 3 dengan osiloskop.
Pertanyaan:
1. Hitunglah selang waktu berubahnya logika port C pin 2 dan 3 pada simulasi
menggunakan AVR Studio dan kenyataan setelah program diunduh ke mikrokontroler!
2. Berapa periode gelombang kotak yang terjadi?
3. Gambarkan diagram alir (flowchart) program yang sedang dieksekusi mikrokontroler!
4.4.2 PEWAKTU 0 SEBAGAI PENUNDA DENGAN METODE PEMBANDINGAN (MATCH
COMPARE)
Pada percobaan ini, pewaktu 0 akan difungsikan sebagai penunda berubahnya
logika keluaran di port C pin 2 dan 3.
1. Gantilah subrutin Timer pada percobaan 4.4.1 dengan berikut.
Timer:
ldi tmp,0b00000000
out tcnt0,tmp
ldi tmp,0b00000000
out timsk,tmp
ldi tmp,0b00100000
out ocr0,tmp ;count 216 cycles
ldi tmp,0b00001001
out tccr0,tmp
ret
2. Kompilasi program.
3. Jalankan program langkah demi langkah.
4. Setelah menjalankan rcall Timer (kursor di baris berikutnya), catat isi register OCR0.
5. Buka jendela port PORTC dan catat data di PORTC sebagai data awal PORTC.
6. Jalankan program dengan Step Over (F10) hingga nilai TCNT0 mendekati OCR0.
7. Pada saat nilai TCNT0 = OCR0, perhatikan isi register TIFR.
8. Tekan F10 dan catat isi register TIFR dan TCNT0.
9. Jalankan program hingga instruksi out portc,tmp dengan mengeklik baris sesudah
instruksi tersebut dan memberikan perintah Debug Run to Cursor (Ctrl-F10).
10. Perhatikan isi PORTC! Catat nilai siklus dan waktu terjadi perubahan pada PORTC (lihat
Cycle Counter dan Stop Watch).
11. Ulangi langkah 10 dan 11 hingga baris di data tabel kebenaran terisi semua.
12. Unduhlah program tersebut ke mikrokontroler!
13. Gambarkan grafik gelombang keluaran di port C pin 2 dan 3 dengan osiloskop.
Pertanyaan & Tugas:
1. Hitunglah selang waktu berubahnya logika port C pin 2 dan 3 pada simulasi
menggunakan AVR Studio dan kenyataan setelah program diunduh ke mikrokontroler!!
2. Berapa periode gelombang kotak yang terjadi?
3. Gambarkan diagram alir (flowchart) program yang sedang dieksekusi mikrokontroler!
4. Buatlah periode gelombang kotak yang terjadi menjadi 2 kalinya!
.
.
.
.
.
.
.
.
.
.


4-6
4.5 Data Pengamatan
4.5.1 PEWAKTU 0 SEBAGAI PENUNDA DENGAN METODE LUAPAN (OVERFLOW)
Data awal di PORTC =
Nilai TCNT0 Siklus Prosesor
Waktu yang telah
digunakan (s)
0x00
0x
0x
0x
0x

Waktu pada saat berubahnya isi PORTC:
Nilai Siklus Waktu (s)





Gambar di osiloskop:



4.5.2 PEWAKTU 0 SEBAGAI PENUNDA DENGAN METODE PEMBANDINGAN (MATCH
COMPARE)
Data OCR0 =
Data awal di PORTC =
Waktu pada saat berubahnya isi PORTC:

Isi PORTC Nilai Siklus Waktu (s)





Gambar di osiloskop:

Kelompok Praktikum:
1. ...................................... NIM .................
2. ...................................... NIM .................
3. ...................................... NIM .................
4. ...................................... NIM .................
Instruktur,
Tgl. ..........
...........................
.
.
.
.
.
.
.
.
.
.


5-1
Bab 5.
M
M
e
e
n
n
g
g
g
g
u
u
n
n
a
a
k
k
a
a
n
n
I
I
n
n
t
t
e
e
r
r
u
u
p
p
s
s
i
i

5.1 Tujuan Praktikum
Agar mahasiswa dapat menggunakan fasilitas interupsi dengan benar.
5.2 Alat dan Bahan
1. Satu set PC.
2. Perangkat lunak AVR Studio 4.
3. Satu set pengunduh K-125 dan sistem minimal ATMega8535.
4. Satu buah osiloskop.
5.3 Teori Singkat
Interupsi merupakan suatu fasilitas yang dapat memaksa prosesor untuk
mengerjakan suatu rutin. Terdapat beberapa kejadian yang menyebabkan prosesor
mandapat isyarat interupsi. Misalnya penekanan tombol reset. Penekanan tombol ini akan
menyebabkan prosesor terkena interupsi yang bersumber dari RESET. Sebagaimana terlihat
pada tabel di bawah, interupsi RESET mempunyai alamat program (program address)
0x000, sehingga pada saat prosesor terkena interupsi ini, maka akan langsung
mengeksekusi instruksi di memori program beralamat 0x000. Seluruh interupsi yang ada
diberi identitas dengan nomor vektor sesuai tabel berikut ini.

Bab 5
.
.
.
.
.
.
.
.
.
.


5-2
5.3.1 INTERUPSI DARI PEWAKTU 0
Pewaktu 0 dapat memberikan isyarat interupsi. Sesuai dengan tabel di atas,
pewaktu 0 dapat memberikan interupsi TIMER0 OVF dan TIMER0 COMP. Interupsi pertama
akan terpicu jika terjadi luapan (overflow); sedang interupsi kedua akan terpicu jika terjadi
match compare pada pewaktu 0. Rutin layanan interupsi (Interrupt Service Routine, ISR)
TIMER0 OVR diletakkan di lokasi memori program 0x009; sedangkan ISR TIMER COMP di
lokasi memori program 0x013.
Pengaktifan interupsi dari pewaktu/pencacah 0 menggunakan seting bit 1 dan bit
0 pada register TIMSK sebagaimana gambar berikut.

Keterangan:
Bit 1 OCIE0: Timer/Counter0 Output Compare Match Interrupt Enable
Bit 0 TOIE0: Timer/Counter0 Overflow Interrupt Enable
5.4 Langkah-langkah Percobaan
5.4.1 INTERUPSI TERPICU MATCH COMPARE DI PEWAKTU 0
Pada percobaan ini, terjadinya match compare di pewaktu 0 akan memicu
terjadinya interupsi TIMER0 COMP. ISR TIMER0 COMP berfungsi sebagai pengubah logika
keluaran di port C pin 2 dan 3. Waktu tunda berubahnya kedua pin tersebut mestinya sama
dengan waktu tunda pada percobaan 4.4.2.
1. Tulislah potongan listing berikut.
.include "m8535def.inc"
.def tmp=r16

.org 0x000
rjmp main
.org 0x013
rjmp ISR
Timer:
ldi tmp,0b00000000
out tcnt0,tmp
ldi tmp,0b00000010
out timsk,tmp
ldi tmp,0b00100000
out ocr0,tmp ;count 216 cycles
ldi tmp,0b00001001
out tccr0,tmp
sei
ret

Main:
ldi tmp,low(ramend)
out SPL,r16
ldi tmp,high(ramend)
out SPH,r16

ldi tmp,0b00001100 ;set output to pin 2 and 3
out ddrc,tmp
ldi tmp,0b00000100 ;set '0' to pin 2, '1' to pin 3
out portc,tmp
rcall Timer
Loop:
rjmp Loop
.
.
.
.
.
.
.
.
.
.


5-3
ISR:
in tmp,portc
ldi r17,0b00001100
eor tmp,r17
out portc,tmp
reti
2. Kompilasi program.
3. Jalankan program langkah demi langkah.
4. Setelah menjalankan rcall Timer (kursor di baris berikutnya), catat isi register OCR0.
5. Buka jendela port PORTC dan catat data di PORTC sebagai data awal PORTC.
6. Jalankan program dengan Step Over (F10) hingga nilai TCNT0 mendekati OCR0.
7. Pada saat nilai TCNT0 = OCR0, perhatikan isi register TIFR.
8. Tekan F10 dan catat isi register TIFR dan TCNT0.
9. Jalankan program hingga instruksi out portc,tmp dengan mengeklik baris sesudah
instruksi tersebut dan memberikan perintah Debug Run to Cursor (Ctrl-F10).
10. Perhatikan isi PORTC! Catat nilai siklus dan waktu terjadi perubahan pada PORTC (lihat
Cycle Counter dan Stop Watch).
11. Ulangi langkah 10 dan 11 hingga baris di data tabel kebenaran terisi semua.
12. Unduhlah program tersebut ke mikrokontroler!
13. Gambarkan grafik gelombang keluaran di port C pin 2 dan 3 dengan osiloskop.
Pertanyaan:
1. Hitunglah selang waktu berubahnya logika port C pin 2 dan 3!
2. Berapa periode gelombang kotak yang terjadi?
3. Gambarkan diagram alir (flowchart) program yang sedang dieksekusi mikrokontroler!

.
.
.
.
.
.
.
.
.
.


5-4
5.5 Data Pengamatan
Data OCR0 =
Data awal di PORTC =
Pada saat nilai TCNT0 = OCR0, isi register TIFR =

Waktu pada saat berubahnya isi PORTC:

Isi PORTC Nilai Siklus Waktu (s)





Gambar di osiloskop:












Kelompok Praktikum:
1. ...................................... NIM .................
2. ...................................... NIM .................
3. ...................................... NIM .................
4. ...................................... NIM .................
Instruktur,
Tgl. ..........
...........................
.
.
.
.
.
.
.
.
.
.


6-1
Bab 6.
P
P
e
e
n
n
g
g
a
a
n
n
t
t
a
a
r
r
P
P
e
e
m
m
r
r
o
o
g
g
r
r
a
a
m
m
a
a
n
n

M
M
e
e
n
n
g
g
g
g
u
u
n
n
a
a
k
k
a
a
n
n
C
C
o
o
d
d
e
e
V
V
i
i
s
s
i
i
o
o
n
n
A
A
V
V
R
R

6.1 Tujuan Praktikum
Memahami cara mengakses register.
6.2 Alat dan Bahan
1. Satu set PC
2. Perangkat lunak CodeVisionAVR
6.3 Teori Singkat
Untuk membentuk aplikasi yang lebih kompleks, bahasa pemrograman tingkat
rendah kadang sudah tidak memadai. Maka dapat digunakan bahasa tingkat menengah.
Salah satu bahasa tingkat menengah yang sering digunakan adalah bahasa C. Dan salah
satu kompilernya adalah CodeVisionAVR. Perangkat lunak ini dapat digunakan untuk
menulis dan mengedit listing program. Namun program ini tidak dapat mensimulasikan
jalannya program.



Gambar 6.1 Tampilan awal CodeVision 2.05.0
Sebagaimana bahasa pemrograman C, pada sebuah program kita dapat
menggunakan beberapa variabel yang kita definisikan sendiri dengan ukuran bit yang
sesuai. Namun dalam praktek direkomendasikan untuk menggunakan ukuran sekecil
mungkin agar lisgting program dapat dieksekusi lebih cepat.

Bab 6
.
.
.
.
.
.
.
.
.
.


6-2


Tipe Ukuran (Bit) Kisaran
bit 1 0 , 1
bool, _Bool 8 0 , 1
char 8 -128 ~ 127
unsigned char 8 0 ~ 255
signed char 8 -128 ~ 127
int 16 -32768 ~ 32767
short int 16 -32768 ~ 32767
unsigned int 16 0 ~ 65535
signed int 16 -32768 ~ 32767
long int 32 -2147483648 ~ 2147483647
unsigned long int 32 0 ~ 4294967295
signed long int 32 -2147483648 ~ 2147483647
float 32 1.175e-38 ~ 3.402e38
double 32 1.175e-38 ~ 3.402e38

6.4 Langkah-langkah Percobaan
6.4.1 MEMBUAT PROJECT BARU DI CODEVISIONAVR
Untuk membuat sebuah aplikasi baru secara mudah, kita dapat menggunakan Wizard
dengan langkah-langkah sebagai berikut.
1. Dari tampilan utama jendela CodeVision pilih menu Tools CodeWizardAVR dan pilih
chip mikrokontroler yang akan digunakan yaitu Atmega dan tekan OK. Dalam praktek
kita gunakan mikrokontroler ATmega8535 menggunakan clock 7,372800 MHz sehingga
pada pilihan Chip pilihlah ATmega8535 dan Clock 7,372800 MHz.
2. Untuk melihat listing yang akan dihasilkan wizard, pilih menu Program Preview.
3. Klik Program Generate, Save, and Exit.
4. Pada jendela editor akan muncul listing awal yang diberikan CodeVision.
5. Secara default, program sudah berisi inisiasi seluruh port, pewaktu, interupsi dan
beberapa perangkat pendukung lain.
6.4.2 MENULIS PROGRAM MENGGUNAKAN PEWAKTU NOL
Pada percobaan ini, pewaktu 0 akan difungsikan sebagai penunda berubahnya
logika keluaran di port C.
1. Buka kembali menu Tools CodewWizardAVR, pilih chip ATmega8535 dan clock
7,372800 MHz.
2. Pilih Timers Timer0.
3. Pilih Clock Sources: System Clock, Clock Value: 7200 kHz, Mode: CTC top=OCR0,
Output: Disconnected.
4. Isikan nilai Compare 47 (berarti 47
heks
)
5. Aktifkan Compare Match Interrupt dengan memberi tanda pada ceck box di
depannya.
6. Klik Program Generate, Save, and Exit.
7. Jadikan PORTC sebagai port keluaran dengan mengganti isi DDRC menjadi 0xff
sebagaimana listing di halaman berikutnya.
.
.
.
.
.
.
.
.
.
.


6-3
8. Tuliskan PORTC=~PINC; pada fungsi interrupt [TIM0_COMP] void timer0_comp_isr(void)
seperti listing di bawah.
9. Kompilasi program menggunakan menu Project Build All. Unduh file hex ke
mikrokontroler.
10. Lihat grafik gelombang yang terjadi di PORTC menggunakan osiloskop.
Pertanyaan:
1. Hitunglah selang waktu berubahnya logika port C!
2. Berapa periode gelombang kotak yang terjadi?
3. Buatlah diagram alir program!

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 05/04/2012
Author :
Company :
Comments:


Chip type : ATmega8535L
Program type : Application
AVR Core Clock frequency: 7,372800 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/

#include <mega8535.h>

// Timer 0 output compare interrupt service routine
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
// Place your code here
PORTC=~PINC;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
.
.
.
.
.
.
.
.
.
.


6-4
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0xff;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7,200 kHz
// Mode: CTC top=OCR0
// OC0 output: Disconnected
TCCR0=0x0D;
TCNT0=0x00;
OCR0=0x47;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;

// USART initialization
// USART disabled
.
.
.
.
.
.
.
.
.
.


6-5
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
{
// Place your code here

}
}
.
.
.
.
.
.
.
.
.
.


7-1
Bab 7.
K
K
o
o
m
m
u
u
n
n
i
i
k
k
a
a
s
s
i
i
S
S
e
e
r
r
i
i
a
a
l
l
U
U
S
S
A
A
R
R
T
T

7.1 Tujuan Praktikum
Agar mahasiswa dapat menggunakan fasilitas komunikasi serial USART.
7.2 Alat dan Bahan
1. Satu set PC.
2. Perangkat lunak CodeVisionAVR.
3. Satu set pengunduh K-125 dan sistem minimal ATMega8535.
7.3 Teori Singkat
UART (Universal Asyncrhronous Receiver/Transmitter) merupakan salah satu
metode untuk komunikasi serial pada sebuah komputer. Komunikasi biasanya
terselenggara menggunakan port serial. Port ini dapat dihubungkan ke port USB melalui
sebuah konverter. Salah satu perangkat lunak bawaan Windows yang dapat
menyelenggarakan komunikasi serial dengan port USB adalah Hyperterminal.
Saat ini banyak mikrokontroler yang menambahkan fasilitas ini untuk melakukan
komunikasi serial ke komputer. Mikrokontroler ATmega8535 selain dapat melakukan
komunikasi tak-sinkron, dapat pula melakukan komunikasi sinkron. Mikrokontroler ini dapat
melakukan komunikasi dengan metode USART (Universal Synchronous/Asyncrhronous
Receiver/Transmitter). Format data yang digunakan seperti gambar di bawah ini.

Dalam kondisi tidak ada transmisi data (idle), logika di jalur transmisi dapat 0
atau 1. Pengiriman data didahului oleh Start-bit, baru kemudian data dikirim. Data dapat
menggunakan format 5 hingga 9 bit. Pengiriman data diakhiri dengan Stop-bit yang dapat
mempunyai panjang 1 hingga 2 bit.
Data dari mikrokontroler dapat dikirim ke komputer menggunakan port serial.
Salah satu perangkat lunak di komputer yang dapat digunakan untuk berkomunikasi
dengan metode USART adalah hyperterminal. Perangkat lunak ini ada di sistem operasi
Windows XP dan generasi sebelumnya. Bagi pengguna Windows Vista dan 7 dapat
mengunduh di internet.
Pengiriman dan penerimaan data melalui port serial dapat dilakukan dengan
mengisi dan mengambil data di register UDR.
UDR=data; //mengirim data ke port serial
data=UDR; //data yang diterima dimasukkan ke variabel data
7.4 Langkah-langkah Percobaan
7.4.1 INISIASI PORT SERIAL
Pada percobaan ini akan diinisiasi port serial yang digunakan untuk
berkomunikasi antara komputer dengan mikrokontroler. Sebelumnya, installah driver untuk
kit K-125 dengan sebagai berikut.
Bab 7
.
.
.
.
.
.
.
.
.
.


7-2
1. Tancapkan koneksi kabel USB kit K-125 ke port USB.
2. Ubah saklar pada K-125 ke Komunikasi Serial.

3. Ikuti petunjuk di Windows dan arahkan untuk menginstal driver K-125 (untuk
pengguna Windows 7, pakailah driver untuk Windows 7.
4. Lihatlah di Device Manager nomor Port COM yang digunakan. Catat nomor Port COM
yang digunakan.

7.4.2 PENGIRIMAN DATA KE KOMPUTER
Percobaan ini akan menjadikan mikrokontroler mengirim data berupa karakter
ASCII A. Ikuti langkah-langkah pembuatan program menggunakan CodeVisionAVR berikut.
1. Buka Tools CodeWizardAVR, pilih chip ATmega8535 dan clock 7,372800 MHz
2. Pilih USART, enable-kan Transmitter, baud rate = 9600 dengan parameter komunikasi
8 data 1 stop no parity, mode asynchronous.
3. Pilih: Program Generate, Save, and Exit.
4. Ketikan listing berikut di bawah komentar // Place your code here sebagaimana listing
di halaman berikutnya.
delay_ms(100);
UDR='A';
5. Tambahkan pengarah prosesor #include <delay.h> di bawah pengarah
#include <stdio.h> seperti pada contoh listing.
6. Unduh program (jangan lupa ubah saklar di K-125 ke Unduh Program).
7. Ubah saklar di K-125 ke Komunikasi Serial.
8. Jalankan perangkat lunak Hyperterminal.
9. Beri nama koneksi pada form Connections Description (nama bebas).
10. Pilih port koneksi yang akan digunakan pada form Connect to.
11. Tentukan properti koneksi dengan mengeset pesat data = 9600 bps, format data = 8
bit, bit paritas = tidak ada (none), bit stop = 1, dan flow control = none.
Komunikasi Serial Unduh Program
.
.
.
.
.
.
.
.
.
.


7-3

12. Pilih menu Call dan lihat tampilan layar Hyperterminal.

Pertanyaan/Tugas
1. Apa yang terjadi jika setting pesat data di Hyperterminal diubah menjadi 19200 bps
atau yang lain? Mengapa demikian?
2. Jelaskan maksud dua baris yang diketik dalam langkah nomor 4 tadi!
3. Buatlah diagram alir program yang telah dibuat!
4. Bukalah file text delay.h! Apa fungsi pemanggilan file tersebut melalui perintah
#include <delay.h>?

.
.
.
.
.
.
.
.
.
.


7-4
Listing progam untuk pengiriman data ke port serial melalui kabel USB.

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 07/04/2012
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:


Chip type : ATmega8535
Program type : Application
AVR Core Clock frequency: 7,372800 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/

#include <mega8535.h>

// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
.
.
.
.
.
.
.
.
.
.


7-5
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x2F;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
.
.
.
.
.
.
.
.
.
.


7-6
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

while (1)
{
// Place your code here
UDR='A';
delay_ms(100);
}
}
.
.
.
.
.
.
.
.
.
.


8-1
Bab 8.
P
P
e
e
n
n
g
g
u
u
k
k
u
u
r
r
a
a
n
n
T
T
e
e
g
g
a
a
n
n
g
g
a
a
n
n
D
D
C
C
d
d
e
e
n
n
g
g
a
a
n
n

A
A
D
D
C
C
M
M
i
i
k
k
r
r
o
o
k
k
o
o
n
n
t
t
r
r
o
o
l
l
e
e
r
r

8.1 Tujuan Praktikum
Agar mahasiswa dapat menggunakan ADC mikrokontroler untuk pengukuran
tegangan DC.
8.2 Alat dan Bahan
1. Satu set power supply dengan tegangan keluaran variasi.
2. Satu set PC.
3. Perangkat lunak CodeVisionAVR.
4. Satu set pengunduh K-125 dan sistem minimal ATMega8535.
8.3 Teori Singkat
ADC mikrokontroler ATmega8535 mempunyai resolusi 10 bit dengan 8 saluran
masukan mandiri atau 7 saluran diferensial. Pemilihan saluran dan mode yang digunakan
menggunakan program. ADC yang menggunakan metode successive aproximation ini
mempunyai tegangan catu daya yang dimasukkan ke pin AVCC. Tegangan di pin ini tidak
boleh berbeda lebih dari 0,3 V dari tegangan Vcc. Biasanya tegangan dari Vcc dilewatkan
sebuah tapis lulus rendah sebelum dimasukkan ke AVCC.

Bab 8
.
.
.
.
.
.
.
.
.
.


8-2
Terdapat tiga pilihan tegangan referensi ADC (V
REF
): AVCC, referensi internal 2,56
V atau pin ekternal AREF. Pemilihan saluran masukan dan tegangan referensi ini dapat
dilakukan dengan mengubah isi register ADMUX.
ADC pada mikrokontroler ini menggunakan clock dari clock CPU. Frekuensi clock
CPU dapat diturunkan melalui sebuah prescaler. Waktu konversi ADC dapat bervariasi dari
65 hingga 260 mikrodetik, tergantung clock yang diberikan. Satu kali konversi normal, ADC
ini membutuhkan waktu sekitar 14 periode clock. Jika dikehendaki hasil pengonversian
berupa data 10 bit, maka clock ADC tidak boleh melebihi 200 kHz. Sehingga ADC ini
mampu mengonversi hingga 15 ribu kali per detik (15 kSPS) pada resolusi penuh.
Dengan delapan saluran masukan, ADC ini mempunyai fasilitas untuk
mengonversi isyarat secara diferensial. Dan jika isyarat masukan terlalu kecil, telah
disediakan op-amp dengan nilai penguatan 10 kali dan 200 kali.
8.4 Langkah-langkah Percobaan
Pada percobaan ini akan diukur tegangan di saluran 0 menggunakan ADC
mikrokontroler. Data keluaran ADC yang berupa bilangan biner tak bertanda menggunakan
panjang 8 bit, dikonversi ke format desimal dan dijadikan karakter ASCII. Data selanjutnya
dikirim ke komputer melalui USB untuk ditampilkan oleh hyperterminal.
1. Buka Tools CodeWizardAVR, pilih chip ATmega8535 dan clock 7,372800 MHz
2. Pilih ADC dan enable-kan ADC
3. Gunakan format 8 bit dengan meng-enable pilihan Use 8 bit
4. Pilih tegangan referensi AVCC
5. Pilih clock 921,600 kHz
6. Pilih USART, enable-kan Transmitter, baud rate = 9600 dengan parameter komunikasi
8 data 1 stop no parity, mode asynchronous.
7. Pilih: Program Generate, Save, and Exit.
8. Buat deklarasi untuk tipe variabel berikut di bawah komentar // Declare your global
variables here sesuai listing program pada halaman berikutnya.
unsigned char adc0,digit,tmp;
9. Ketikan listing berikut untuk mengonversi data heksadesimal dari ADC ke BCD,
mengubahnya menjadi ASCII, dan mengirim ke port serial di bawah komentar // Place
your code here.

adc0=read_adc(0);
tmp=adc0/5;

digit=tmp/10;
digit=digit+'0';
delay_ms(50);
UDR=digit;

delay_ms(50);
UDR='.';

digit=tmp%10;
digit=digit+'0';
delay_ms(50);
UDR=digit;
delay_ms(500);
UDR=13;

10. Tambahkan pengarah prosesor untuk header berikut di bawah pengarah
#include <mega8535.h> seperti pada contoh listing.
.
.
.
.
.
.
.
.
.
.


8-3
#include <delay.h>
#include <stdio.h>
#include <math.h>
11. Unduh program (jangan lupa ubah saklar di K-125 ke Unduh Program).
12. Ubah saklar di K-125 ke Komunikasi Serial.
13. Jalankan perangkat lunak Hyperterminal.
14. Berikan tegangan variasi 0 ~ 5 V di pin ADC0 dan amati tampilan di jendela
Hyperterminal.

Pertanyaan/Tugas
1. Jelaskan proses konversi dari masukan analog ke data digital hingga tampil ke layar
Hyperterminal.
2. Jelaskan dengan singkat proses pengubahan data heksadesimal dari ADC ke BCD, dan
mengubahnya menjadi format ASCII!
3. Buatlah diagram alir program yang telah dibuat!
4. Apa fungsi header delay.h, stdio.h, dan math.h?

.
.
.
.
.
.
.
.
.
.


8-4
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 07/04/2012
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:

Chip type : ATmega8535
Program type : Application
AVR Core Clock frequency: 7,372800 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/

#include <mega8535.h>

// Standard Input/Output functions
#include <delay.h>
#include <stdio.h>
#include <math.h>

#define ADC_VREF_TYPE 0x60

// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

// Declare your global variables here
unsigned char adc0,digit,tmp;

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
.
.
.
.
.
.
.
.
.
.


8-5

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

.
.
.
.
.
.
.
.
.
.


8-6
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x2F;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 921,600 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: ADC Stopped
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
SFIOR&=0xEF;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

while (1)
{
// Place your code here
adc0=read_adc(0);
tmp=adc0/5;

digit=tmp/10;
digit=digit+'0';
delay_ms(50);
UDR=digit;

delay_ms(50);
UDR='.';

digit=tmp%10;
digit=digit+'0';
delay_ms(50);
UDR=digit;

delay_ms(500);
UDR=13;
}
}
.
.
.
.
.
.
.
.
.
.


9-1
Bab 9.
P
P
e
e
n
n
g
g
a
a
n
n
t
t
a
a
r
r
S
S
i
i
s
s
t
t
e
e
m
m
B
B
e
e
r
r
b
b
a
a
s
s
i
i
s
s

M
M
i
i
k
k
r
r
o
o
p
p
r
r
o
o
s
s
e
e
s
s
o
o
r
r

9.1 Tujuan Praktikum
Agar mahasiswa dapat merancang sistem berbasis mikroprosesor sederhana.
9.2 Alat dan Bahan
1. Satu set PC.
2. Perangkat lunak CodeVisionAVR.
3. Perangkat lunak Proteus.
9.3 Teori Singkat
Perkembangan teknologi elektro cenderung akan menggeser aplikasi berbasis
perangkat keras ke aplikasi berbasis perangkat lunak. Aplikasi ini ditandai dengan adanya
program yang akan mengendalikan seluruh kerja suatu sistem. Dengan penggantian
beberapa fungsi suatu blok dengan suatu algoritma program, maka penggunaan perangkat
keras akan semakin berkurang sehingga secara keseluruhan sistem akan dapat dibuat
semakin kecil, ringkas dan semakin hemat sumber daya.
Mikrokontroler keluarga AVR merupakan salah satu jenis mikrokontroler yang
banyak digunakan di Indonesia baik di kalangan pendidikan maupun untuk keperluan
proyek komersial. Dukungan pemrograman dalam bahasa tingkat menengah dan simulasi
elektronis telah menjadikan sistem berbasis mikrokontroler jenis keluaraga ini menjadi
semakin banyak digunakan untuk berbagai keperluan.
CodeVisionAVR 2.05.0 Evaluation merupakan salah satu perangkat lunak yang
dapat digunakan untuk pembuatan program. Sedangkan untuk simulasi dapat digunakan
perangkat lunak Proteus 4.21. Kedua perangkat lunak tersebut bersifat bebas (freeware)
dan dapat diunduhn secara gratis. Dengan kedua perangkat lunak tersebut, sudah dapat
dibuat sistem berbasis mikroprosesor yang cukup kompleks.
9.4 Langkah-langkah Percobaan
Pada percobaan ini, akan dibuat simulasi sistem yang akan menampilkan karakter
di layar LCD.
1. Dengan CodeVisionAVR, bukalah file project di
C:\cvavreval\examples\LCDDEMO\LCDDEMO.PRJ
2. Ubahlah prosesor dan clock dengan cara membuka menu Project Configure. Klik C
Compiler, ubah Chip menjadi ATmega8535 dan Clock menjadi 7,372800 MHz dan tekan
OK.
3. Kompilasi program dengan Build All.
4. Dengan Proteus buatlah untai berbasis mikroprosesor dengan sebuah LCD seperti
gambar berikut.
Bab 9
.
.
.
.
.
.
.
.
.
.


9-2


5. Atur agar mikrokontroler menggunakan file .hex hasil kompilasi tadi dengan cara meng-
klik ganda gambar IC mikrokontroler. Pada jendela Edit Component, isilah Program File
dengan C:\cvavreval\examples\LCDDEMO\exe\LCDDEMO.hex atau arahkan dengan
tombol di sebelah kanannya. Pada bagian Advanced Properties, pilihlah agar Clock
Frequency menjadi 7.372800MHz.
6. Jalankan program simulasi dan amati tampilan di layar LCD.

Pertanyaan/Tugas
1. Buatlah program yang menampilkan namamu di baris pertama dan NIM di baris kedua
LCD!
2. Dengan memodifikasi program pada bab 8, rancang dan buatlah program pembangkit
clock untuk frekukensi 1 kHz dan 100 kHz! Simulasikan dengan Proteus apakah
program sudah berjalan dengan benar!

.
.
.
.
.
.
.
.
.
.


9-3
/*
LCD Demo

CodeVisionAVR C Compiler
(C) 2000-2010 HP InfoTech S.R.L.
www.hpinfotech.ro

Chip: ATmega8515
Memory Model: SMALL
Data Stack Size: 128 bytes

Use an 2x16 alphanumeric LCD connected
to the STK500 PORTC header as follows:

[LCD] [STK500 PORTC HEADER]
1 GND- 9 GND
2 +5V- 10 VCC
3 VLC- LCD contrast control voltage 0..1V
4 RS - 1 PC0
5 RD - 2 PC1
6 EN - 3 PC2
11 D4 - 5 PC4
12 D5 - 6 PC5
13 D6 - 7 PC6
14 D7 - 8 PC7
*/

// Alphanumeric LCD Module functions
// The LCD connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric menu
#include <alcd.h>

void main(void)
{
// initialize the LCD for
// 2 lines & 16 columns
lcd_init(16);

// go on the second LCD line
lcd_gotoxy(0,1);

// display the message
lcd_putsf("Hello world");

// stop here
while (1);
}

Anda mungkin juga menyukai