Anda di halaman 1dari 14

KASPER

Lab. Keamanan Siber dan Pervasif

Modul 2
Pemrograman Bahasa Assembly AVR dengan AVR Studio
Mata Kuliah Organisasi dan Arsitektur Komputer
Program Studi Teknik Informatika
Institut Teknologi Sumatera

Author : I Wayan Wiprayoga Wisesa dan Arkham Zahri Rakhman

Revisi : 26 November 2019 (rev. 1)

4 Desember 2019 (rev. 2)

8 November 2020 (rev. 3)


KASPER
Lab. Keamanan Siber dan Pervasif

A. Pengenalan AVR

AVR merupakan sebuah micro-controller seperti halnya Arduino. AVR dikembangkan oleh perusahaan
Atmel yang saat ini telah diakuisisi oleh Microchip Technology pada tahun 2016. Arsitektur AVR
merupakan 8-bit RISC (Reduced Instruction Set Computer), dimana AVR merupakan micro-controller
pertama yang menggunakan flash memory on-chip untuk menyimpan instruksi program.

Gambar 1 Berbagai macam mikrokontroller AVR buatan Atmel (sumber: wikimedia commons)

Berikut ini adalah fakta menarik seputar AVR.

AVR : Alf and Vegard RISC atau

AVR : Advanced Virtual RISC

RISC: Reduced Instruction Set Computer

Arsitektur mikrokontroler jenis AVR pertama kali dikembangkan pada tahun 1996 oleh dua orang
mahasiswa Norwegian Institute of Technology yaitu Alf-Egil Bogen dan Vegard Wollan. Mikrokontroler
AVR kemudian dikembangkan lebih lanjut oleh Atmel. Seri pertama AVR yang dikeluarkan adalah
mikrokontroler 8 bit AT90S8515, dengan konfigurasi pin yang sama dengan mikrokontroler 8051,
termasuk address dan data bus yang termultipleksi.

Mikrokontroler AVR menggunakan teknologi RISC dimana set instruksinya dikurangi dari segi
ukurannya dan kompleksitas mode pengalamatannya. Pada awal era industri komputer, bahasa
pemrograman masih menggunakan kode mesin dan bahasa assembly. Untuk mempermudah dalam
pemrograman para desainer komputer kemudian mengembangkan bahasa pemrograman tingkat
tinggi yang mudah dipahami manusia. Namun akibatnya, instruksi yang ada menjadi semakin
kompleks dan membutuhkan lebih banyak memori. Dan tentu saja siklus eksekusi instruksinya
menjadi semakin lama. Dalam AVR dengan arsitektur RISC 8 bit, semua instruksi berukuran 16 bit dan
sebagian besar dieksekusi dalam 1 siklus clock. Berbeda dengan mikrokontroler MCS-51 yang
instruksinya bervariasi antara 8 bit sampai 32 bit dan dieksekusi selama 1 sampai 4 siklus mesin,
dimana 1 siklus mesin membutuhkan 12 periode clock. Dalam perkembangannya, AVR dibagi menjadi
KASPER
Lab. Keamanan Siber dan Pervasif

beberapa varian yaitu AT90Sxx, ATMega, AT86RFxx dan ATTiny. Pada dasarnya yang membedakan
masing-masing varian adalah kapasitas memori dan beberapa fitur tambahan saja.

Dalam kegiatan praktikum yang akan dilakukan, kita tidak akan melakukan pemrograman langsung ke
micro-controller. Kita akan menggunakan sebuah simulator micro-controller AVR yang dapat
menyimulasikan perangkat yang sebenarnya yaitu AVR Studio. Dalam praktikum ini, kita akan
melakukan pemrograman AVR menggunakan bahasa assembly pada micro-controller AVR ATMega
8515. Selain menggunakan AVR Studio, kita juga akan melakukan simulasi mekanisme I/O
menggunakan bantuan HAPSIM (kompatibel dengan AVR Studio 4.10) yang merupakan simulator LCD
HD44780U.

B. Instalasi AVR Studio

AVR Studio yang digunakan adalah AVR Studio versi 4.10. Versi termutakhir AVR Studio saat modul
ini dibuat adalah versi 7. Namun, kita tidak menggunakan versi termutakhir dengan pertimbangan
tidak adanya dukungan simulator untuk perangkat ATMega 8515. Untuk mengunduh AVR Studio
versi 4.10 (dan juga HAPSIM) dapat mengikuti tautan berikut ini:

https://drive.google.com/drive/u/2/folders/1oyS6a9Uxv17lHkhASLQVOQwtoYhfjwc_

PERHATIAN: Aplikasi AVR Studio dan HAPSIM yang disediakan hanya dapat dijalankan pada sistem
operasi Windows!

Jalankan file instalasi AVR Studio yang bernama aStudio4b10.exe. Ikuti dialog petunjuk instalasi
yang ada. Jika muncul dialog instalasi driver tambahan, lewati saja. Setelah berhasil instalasi, jika
Anda menggunakan Windows versi terbaru, jangan lupa ubah kompatibilitas aplikasi menjadi
Windows XP Service Pack 3.

C. Antarmuka AVR Studio

Jalankan program AVR Studio yang sudah terpasang pada sistem. Halaman pertama yang muncul
adalah halaman seperti berikut ini (pada halaman selanjutnya):
KASPER
Lab. Keamanan Siber dan Pervasif

Gambar 2 Halaman awal AVR Studio

Untuk membuat proyek baru, klik tombol CREATE NEW PROJECT. Ikuti dialog yang diberikan dengan
cara menekan tombol NEXT dan beri nama proyek sesuai dengan yang diinginkan. Tandai juga dengan
ceklis kotak input Create Folder supaya proyek yang kita buat ada di folder khusus dengan nama
proyek kita. Jangan lupa simpan dalam drive selain drive-C untuk menghindari permasalahan
kompilasi. Contohnya adalah sebagai berikut:

Gambar 3 Halaman membuat proyek

Jika Anda klik tombol NEXT setelah memberikan nama proyek, maka akan muncul halaman berikut
(pada halaman selanjutnya):
KASPER
Lab. Keamanan Siber dan Pervasif

Gambar 4 Halaman pilih simulator

Pada halaman ini, di jendela sebelah kiri, pilih AVR Simulator dan kemudian pada jendela sebelah
kanan pilih ATmega8515. Halaman ini merupakan halaman untuk memilih jenis perangkat yang akan
Anda gunakan untuk simulasi. Setelah Anda memilih tombol FINISH, maka akan muncul jendela editor
program yang kira-kira tampilannya seperti yang ditunjukkan pada gambar 5 berikut ini.

Gambar 5 Jendela Editor program

Anda dapat membuat program pada jendela Editor di sebelah kanan tengah. Untuk melakukan
kompilasi program, pilih menu Project kemudian pilih Build (jalan pintas tekan tombol F7). Kemudian
KASPER
Lab. Keamanan Siber dan Pervasif

untuk menjalankan simulasi program (setelah kompilasi) pilih menu Debug lalu Start Debugging atau
Anda dapat menekan tombol seperti PLAY pada toolbar. Anda dapat menjalankan eksekusi setiap
instruksi baris demi baris dengan menekan tombol F11. Selain itu, Anda juga dapat mengamati kondisi
register, program counter, stack, dan komponen lain pada perangkat mikrokontroller pada Tab
jendela I/O yang berada pada sisi kiri tengah jendela Workspace AVR Studio seperti yang ditunjukkan
pada gambar berikut ini:

Gambar 6 Tab jendela I/O untuk mengamati kondisi komponen pada perangkat mikrokontroller

D. Bahasa Assembly AVR

Bahasa yang dapat dipakai untuk memprogram mikrokontroler AVR adalah bahasa assembly AVR
atau bahasa C. Dalam modul ini semua program ditulis dalam bahasa assembly AVR. Berikut adalah
contoh sebuah program aplikasi untuk mikrokontroler AVR (pada halaman selanjutnya):
KASPER
Lab. Keamanan Siber dan Pervasif

.include “m8515def.inc”
.org 0x0000

Inisialisasi Program
rjmp main

main: ldi r16,low(RAMEND)


out SPL,r16

ldi r16,high(RAMEND)

out SPH,r16

ldi r16,0xff

Program Utama
out ddra,r16
out PortA,r16
cbi PortA,0
cbi PortA,1

stop: rjmp stop

Program 1 Contoh program assembly AVR

Sebuah program AVR minimal terdiri dari dua bagian, yaitu inisialisasi program dan program utama.
Inisialisasi program harus disertakan agar program utama dapat berjalan dengan baik. Berikut adalah
urutan langkah inisialisasi program :

1) Menentukan jenis mikrokontroler yang digunakan dengan cara memasukkan file definisi
perangkat (m8535def.inc) ke dalam program utama. Dalam modul ini, kita menggunakan
perangkat ATMega 8535

.include “m8535def.inc”

2) Menuliskan original address program atau alamat awal instruksi program. Sebagai contoh
instruksi selanjutnya dimulai pada alamat memori 0x0000. Kemudian dilanjutkan dengan
instruksi rjmp / relative jump ke label main. Hal ini dimaksudkan agar program memori tidak
tumpang tindih dengan data memori.

.org 0x0000
rjmp main

Efek yang didapat adalah, mulai dari instruksi rjmp main hingga seterusnya akan disimpan
mulai dari alamat memori 0x0000 dan seterusnya.
KASPER
Lab. Keamanan Siber dan Pervasif

3) Inisialisasi Stack Pointer (langkah ini opsional) dengan alamat terakhir pada RAM (RAMEND),
untuk ATMega8515 yaitu 0x025F. Inisialisasi Stack memungkinkan programmer untuk
menyimpan data sementara, variabel lokal, alamat kembali setelah adanya interrupt, dan
alamat kembali setelah pemanggilan subrutin.

main: ldi r16,low(RAMEND) ; low byte address RAM = 5F


out SPL,r16
ldi r16,high(RAMEND) ; high byte address RAM = 02

out SPH,r16

Contoh Instruksi I/O

Lebih lengkap dapat dilihat pada dokumen berikut:


http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf

in : membaca data I/O port ke dalam register

contoh : in r16,PinA

out : menulis data register ke I/O port

contoh : out PortA,r16

ldi : load immediate : menulis konstanta ke register sebelum konstanta itu dikeluarkan ke I/O
port

contoh : ldi r16,0xff

sbi : set bit in I/O : membuat nilai logika high (1) pada sebuah bit I/O port

contoh : sbi PortB,7

cbi : clear bit in I/O : membuat nilai logika low (0) pada sebuah bit I/O port

contoh : cbi PortB,5

sbic : skip if bit in I/O is clear : lompati satu instruksi jika bit I/O port dalam kondisi clear/low

contoh : sbic PortA,3

sbis : (skip if bit in I/O is set) : lompati satu instruksi jika bit I/O port dalam kondisi set/high

contoh : sbis PortB,3

Contoh Operasi Aritmetika

Lebih lengkap dapat dilihat pada dokumen berikut:


http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf
KASPER
Lab. Keamanan Siber dan Pervasif

add : Menambahkan isi dua register.

contoh : add r15,r14 ; r15=r15+r14

adc : Menambahkan isi dua register dan isi carry flag

contoh : adc r15,r14 ; r15=r15+r14+C

sub : Mengurangi isi dua register.

contoh : sub r19,r14 ; r19=r19-r14

mul : Mengalikan dua register. Perkalian 8 bit dengan 8 bit menghasilkan bilangan 16 bit yang
disimpan di r0 untuk byte rendah dan di r1 untuk byte tinggi. Untuk memindahkan bilangan
16 bit antar register digunakan instruksi movw (copy register word)

contoh : mul r21,r20 ; r1:r0=r21*r20

E. Pemrograman AVR dengan AVR Studio

Contoh program penjumlahan dan pengurangan

.include “m8515def.inc” .include “m8515def.inc”


.org 0x00 .org 0x00
MAIN: MAIN:
ldi r16,0x05 ldi r16,0x03

ldi r17,0x03 ldi r17,0x03


add r16,r17 sub r16,r17

selesai : rjmp selesai selesai : rjmp selesai

Berikut ini contoh kode yang dapat Anda pelajari terkait dengan I/O dan menampilkan teks ke layar
LCD. Untuk latihan silakan tulis program berikut pada Editor AVR Studio. Source code tanpa nomor
baris dapat Anda unduh pada tautan berikut: https://drive.google.com/open?id=1RfE-
dcH5dumPN6J5NKUaXNogp2uAvvuJ

Sebagai latihan silakan tulis program berikut pada Editor AVR Studio.
;====================================================================
; Processor : ATmega8515
; Compiler : AVRASM
;====================================================================
KASPER
Lab. Keamanan Siber dan Pervasif

;====================================================================
; DEFINITIONS
;====================================================================

.include “m8515def.inc”
.def temp = r16 ; temporary register
.def EW = r23 ; for PORTA
.def PB = r24 ; for PORTB
.def A = r25

;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================

.org $00

;====================================================================
; CODE SEGMENT
;====================================================================

MAIN:

INIT_STACK:
ldi temp, low(RAMEND)
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp

INIT_LCD_MAIN:
rcall INIT_LCD

ser temp
out DDRA,temp ; Set port A as output
out DDRB,temp ; Set port B as output

;input text
rjmp INPUT_TEXT

INIT_LCD:
cbi PORTA,1 ; CLR RS
ldi PB,0x38 ; MOV DATA,0x38 --> 8bit, 2line, 5x7
out PORTB,PB
sbi PORTA,0 ; SETB EN
cbi PORTA,0 ; CLR EN

cbi PORTA,1 ; CLR RS


ldi PB,$0E ; MOV DATA,0x0E --> disp ON, cursor ON, blink OFF
out PORTB,PB
sbi PORTA,0 ; SETB EN
cbi PORTA,0 ; CLR EN

rcall CLEAR_LCD ; CLEAR LCD


cbi PORTA,1 ; CLR RS
ldi PB,$06 ; MOV DATA,0x06 --> increase cursor, display sroll OFF

out PORTB,PB
sbi PORTA,0 ; SETB EN
cbi PORTA,0 ; CLR EN
KASPER
Lab. Keamanan Siber dan Pervasif

ret

CLEAR_LCD:
cbi PORTA,1 ; CLR RS
ldi PB,$01 ; MOV DATA,0x01
out PORTB,PB
sbi PORTA,0 ; SETB EN
cbi PORTA,0 ; CLR EN
ret

INPUT_TEXT:
ldi A, 0x48; SET character to write
sbi PORTA,1 ; SETB RS
out PORTB, A
sbi PORTA,0 ; SETB EN
cbi PORTA,0 ; CLR EN

ldi A, 0x65; SET character to write


sbi PORTA,1 ; SETB RS
out PORTB, A
sbi PORTA,0 ; SETB EN
cbi PORTA,0 ; CLR EN

EXIT:
rjmp EXIT

Jalankan program tersebut dengan menghubungkan program pada AVR Studio dan HAPSIM. Amati
apa yang terjadi pada program dan buat laporannya.

Cara menghubungkan program yang berjalan pada simulator AVR Studio dengan HAPSIM adalah
sebagai berikut:

1) Pada AVR Studio, simpan file program dengan cara menekan kombinasi tombol CTRL+S.
2) Kompilasi program pada AVR Studio dengan menekan tombol F7 atau klik menu Project lalu
Build.
3) Program seharusnya berhasil dikompilasi. Pada jendela Output yang berada pada bagian
bawah AVR Studio akan muncul pesan seperti berikut:

Gambar 7 Pesan pada jendela output ketika program berhasil dikompilasi


KASPER
Lab. Keamanan Siber dan Pervasif

4) Jalankan proses simulator AVR dengan cara klik tombol yang tampilannya mirip seperti tombol
PLAY (start debugging) pada toolbar. Tunggu sampai proses selesai dan pada jendela editor
kode muncul tanda panah berwarna kuning seperti berikut ini (pada halaman selanjutnya):

Gambar 8 Tampilan saat proses debug program dimulai

5) Jalankan program HAPSIM. Sehingga muncul jendela sebagai berikut:

Gambar 9 Tampilan HAPSIM yang merupakan simulator LCD (kompatibel dengan AVR Simulator)

6) Untuk memastikan HAPSIM terhubung dengan simulator AVR Studio (program sedang berada
dalam fase debugging), pada aplikasi HAPSIM, pilih menu Options lalu pastikan menu AVR
Studio Hook telah ditandai dengan tanda ceklis. Jika belum ditandai, klik menu tersebut untuk
menghubungkan simulator AVR Studio dengan HAPSIM.
7) Lakukan konfigurasi LCD pada HAPSIM dengan memilih menu Options lalu LCD settings
dengan mengikuti konfigurasi seperti yang ditunjukkan pada Gambar 10 di bawah ini.
PERHATIAN: Setiap program AVR dapat berbeda konfigurasinya. Konfigurasi yang Anda
lakukan ini menyesuaikan dengan kode program yang telah dibuat sebelumnya.
KASPER
Lab. Keamanan Siber dan Pervasif

Gambar 10 Konfigurasi LCD pada HAPSIM sesuai dengan program latihan yang telah dibuat

8) Konfigurasi ini harus Anda simpan supaya Anda dapat menjalankan simulator dengan cara
memilih menu File lalu save. Untuk selanjutnya, Anda dapat memuat kembali konfigurasi LCD
yang telah Anda simpan dengan cara memilih menu File lalu open configuration.
9) Saat ini anda dapat menjalankan simulator dengan cara klik tombol Run atau F5 untuk
menjalankan program secara instan atau menekan tombol Step Into atau F11 untuk
menjalankan program langkah demi langkah untuk dapat melihat kondisi register, port I/O,
Stack, dan komponen lainnya.

Jangan lupa: Catat hasil pengamatan dan kesulitan yang Anda hadapi dalam laporan.

F. Tugas Praktikum

Buatlah laporan untuk menjawab instruksi berikut ini berdasarkan program tes LCD pada sub-bab
sebelumnya:

1) Lakukan eksplorasi dengan cara mengikuti urutan eksekusi instruksi (step-by-step). Jelaskan
apa yang terjadi ketika baris ke 28 sampai 31 dihilangkan?

2) Kembalikan kode seperti semula. Kemudian, jelaskan apa yang terjadi jika kode pada baris 48
dan/atau 49, kemudian baris 54 dan/atau 55, kemudian baris 61 dan/atau 62 dihilangkan.
Apakah yang dapat Anda simpulkan?
KASPER
Lab. Keamanan Siber dan Pervasif

3) Kembalikan kode seperti semula. Apa yang terjadi jika baris 37 dan/atau 38 dihilangkan?
Apakah yang dapat Anda simpulkan?

4) Dari program yang telah Anda buat sebelumnya, Anda diminta untuk mengubah tampilan LCD
menjadi NIM Anda! Apa saja yang harus Anda tambahkan dari kode program?

Anda mungkin juga menyukai