2. Unit Praktikum Perhitungan Aritmatika Data yang dipakai dalam mikrokontroler ATmega8535 direpresentasikan dalam sistem bilangan biner, desimal dan bilangan heksadesimal. Data yang terdapat di mikrokontroler dapat diolah dengan berbagai operasi aritmatik (penjumlahan, pengurangan dan perkalian) maupun operasi nalar (AND, OR dan EOR (Ekslusif OR)).
Instruksi Aritmatika •
add → menambahkan isi dua register contoh :
•
; r15 = r15+r14
sub → mengurangi isi dua register contoh :
•
add r15,r14
sub r19,r14
; r19 = r19-r14
mul → mengalikan dua register. Untuk perkalian 8 bit dengan 8 bit akan menghasilkan bilangan 16 bit yang disimpan pada r0 untuk byte rendah dan r1 untuk byte tinggi. Untuk memindahkan bilangan 16 bit antar register dapat digunakan perintah movw (Copy Register Word) contoh :
•
andi r25,0b11110000 ; konstanta biner
or → untuk operasi logika Or dua register contoh :
•
and r23,r27
andi → untuk operasi logika And register dengan konstanta immediate contoh :
•
; r1:r0 = r21*r20
and → untuk operasi logika And dua register contoh :
•
mul r21,r20
or r18,r17
ori → untuk operasi logika Or dengan konstanta immediate
contoh : •
inc r0
dec → menurunkan 1 isi register contoh :
•
dec r1
clr → clear register, isi register menjadi 0 contoh :
•
; konstanta heksadesimal
inc → menaikkan 1 isi register contoh :
•
ori r24,0xfe
clr r16
ser → Set all bits in register, isi register menjadi 1 contoh :
ser r16
Contoh Program : .include"C:\Appnotes\m8535def.inc" .org 0x0000 rjmp main main: ldi r16, out SPL, ldi r16, out SPH,
low(RAMEND) r16 high(RAMEND) r16
ldi ldi
r16,3 r17,9
add
r16,r17
Header ini harus disertakan agar program dapat berjalan
henti: rjmp henti
Dari program diatas diketahui register r16 diisi dengan konstanta 3 dan r17 diisi dengan konstanta 9. Kemudian kedua register ditambahkan dan akan menghasilkan 12 pada r16 atau 0C dalam heksadesimal. Seperti terlihat seperti pada gambar jendela dibawah ini.
Gambar 2.1 Hasil Simulasi Pada Jendela Register Cara Kerja Praktikum 1. Copy program diatas pada AVR studio 4 Anda dengan nama aritmatika1.asm 2. Lakukan pembangunan project dengan memilih Project → Build. Laporan mengenai proses ini akan ditampilkan dalam jendela output bila penulisan Anda benar dan tidak terdapat error, maka project telah berhasil Anda buat 3. Untuk Mendebug program Pilih Debug → Run 4. Lihat hasil pada jendela register capture gambarnya untuk disertakan pada laporan praktikum
Tugas Praktikum 1. Buatlah Program Pengurangan dua register 2. Buatlah Program penambahan dan pengurangan register dengan konstanta, dimana triger mulainya program berasal dari input low pada Port A,0 3. Buatlah Program untuk menaikkan r19 dari 0 sampai 10 dimana saat r19 genap Port A output high, Port B output low saat r19 ganjil Port A output low, Port B output high 4. Buatlah Program Untuk menyelesaikan persamaan matematika berikut r17 = 4 , r18 = 9, r29 = 7, r19 = 3 r24 = r17 + r18 * r19 – r29
Kerjakan tugas seperti pada cara kerja praktikum. Apabila kesulitan dalam melakukan simulasi bacalah kembali pada pengantar tetang AVR Studio 4. Apabila
kesulitan membuat program bacalah lagi bab unit I/O, pada instruction set atau pada datasheet Atmega8535. Selamat Mengerjakan
3. Unit Praktikum Percabangan Untuk melakukan percabangan dengan memperhatikan kondisi tertentu, Anda perlu menggunakan instruksi percabangan bersyarat. Instruksi percabangan bersyarat akan melakukan lompatan menuju suatu rangkaian program (berlabel ) apabila suatu kondisi dipenuhi atau suatu kondisi tidak dipenuhi
Instruksi Percabangan •
sbic (skip if bit in I/O is cleared) → untuk mengecek apakah bit I/O register clear jika ya skip satu perintah dibawahnya. contoh :
•
sbic PortA,3
; skip perintah jika bit ke-3 PortA clear
sbis (skip if bit in I/O is set) → untuk mengecek apakah bit I/O register set jika ya skip satu perintah dibawahnya contoh :
•
sbis PortA,0
; skip perintah jika bit ke-0 PortA
sbrc (skip if bit in register is cleared) → untuk mengecek apakah bit register clear jika ya skip satu perintah dibawahnya
•
sbrs (skip if bit in register is set) → untuk mengecek apakah bit register set jika ya skip satu perintah dibawahnya.
•
cp (compare) → untuk membandingkan dua register
•
mov → meng-copy dua register
•
cpi (compare with immediate) → untuk membandingkan register dengan konstanta immediate.
•
breq (branch if equal) → lompat ke alamat yang ditunjuk apabila dua register atau antara register dengan konstanta yang dibandingkan sama. contoh :
•
cp
r17,r18
breq
sama
; jika r17 = r18 maka lompat ke sama
brne (branch if not equal) → lompat ke alamat yang ditunjuk apabila dua register atau antara register dengan konstanta yang dibandingkan tidak sama.
contoh :
cpi
r20,7
brne
taksama
; jika r20 >< 7 maka lompat ke taksama
•
jmp (jump) → lompat ke alamat yang ditentukan
•
rjmp (relative jump) → lompat ke alamat yang ditentukan
•
call → memanggil subrutin
•
rcall → memanggil subrutin
•
ret → kembali dari subrutin
Contoh program : .include"C:\Appnotes\m8535def.inc" .org 0x0000 rjmp main main: ldi r16, out SPL, ldi r16, out SPH, clr r16
low(RAMEND) r16 high(RAMEND) r16
Header ini harus disertakan agar program dapat berjalan
naik: inc cpi breq rjmp
r16 r16,5 lagi naik
lagi: ldi dec cp brne rjmp
r18,5 r16 r16,r18 lompat lagi
lompat: rcall rcall henti: rjmp
rutin1 rutin2 henti
rutin1: mov ret
r17,r16
rutin2: mov ret
r19,r18
Program diatas untuk membandingkan antara register dengan konstanta immediate. Jika belum sama naikkan isi pada register. Jika sama lompat ke subrutin yang lain. Kemudian juga membandingkan dua register. Dan yang terakhir contoh pemanggilan sebuah subrutin dengan menggunakan rcall dan diakhiri ret untuk kembali dari subrutin. Hasilnya register tampak pada jendela dibawah ini.
Gambar 3.1 Hasil Simulasi Pada Jendela Register Pada program diatas terdapat potongan program berikut ldi r16, low(RAMEND) out SPL, r16
ldi r16, high(RAMEND) out SPH, r16
Potongan program tersebut adalah inisialisasi Stack pointer. Stack pointer merupakan suatu bagian dari AVR yang berguna untuk menyimpan data sementara, variabel lokal, dan alamat kembali dari suatu interupsi ataupun subrutin. Stack pointer diwujudkan sebagai dua buah register yaitu SPH dan SPL. Saat awal maka SPH dan SPL akan bernilai 0, sehingga setiap program harus terdapat inisilisasi ini agar setiap pemanggilan subrutin ataupun interupsi program dapat kembali ke rutin program semula.
Cara Kerja Praktikum 1. Copy program diatas pada AVR studio 4 Anda dengan nama percabangan.asm 2. Lakukan pembangunan project dengan memilih Project → Build. Laporan mengenai proses ini akan ditampilkan dalam jendela output bila penulisan Anda benar dan tidak terdapat error, maka project telah berhasil Anda buat 3. Untuk Mendebug program Pilih Debug → Run 4. Amati jalannya tiap perintah per step menggunakan Step into (F11), lihat perubahan register pada jendela register 5. Lihat hasil pada jendela workspace dan pada bagian jendela register dan capture gambarnya untuk disertakan pada laporan praktikum
Tugas Praktikum 1. Buatlah Program untuk menaikkan isi register dari 0 sampai 7 kemudian turun kembali menjadi 0 kmudian isi register naik kembali, turun.... berulang-ulang 2. Buatlah Program running LED (led menyala bergantian tiap bit) pada port A menggunakan subrutin program no 1. Capture hasil simulasi 3. Buatlah Program running LED pada keempat port (port A, port B, port C, port D) menggunakan subrutin program no 1. Capture hasil simulasi 4. Apakah yang membedakan penggunaan perintah rcall dan call juga perintah rjmp dan jmp (lihat pada instruction set).
Kerjakan tugas seperti pada cara kerja praktikum. Apabila kesulitan dalam melakukan simulasi bacalah kembali pada pengantar tetang AVR Studio 4. Apabila kesulitan membuat program bacalah lagi pada instruction set atau pada datasheet Atmega8535. Selamat Mengerjakan