Bermain-main dengan mikrokontroler AVR(2)

Setelah pada waktu yang lalu kita mencoba untuk mempersiapkan materi (hardware maupun software) untuk belajar mikrokontroler AVR, sekarang kita mencoba belajar AVR dengan menggunakan bahasa assembly. Pada dasarnya, sistem digital hanya mengerti satu jenis bahasa, yaitu bahasa mesin, yang berupa bilangan biner ( 0 dan 1). Karena bentuknya yang sederhana, bahasa mesin sulit untuk dimengerti oleh manusia. Oleh karena itu dibuatlah suatu jenis bahasa yang cukup mendekati bahasa mesin, namun bisa dimengerti oleh manusia, yaitu bahasa assembly. Dengan memuat singkatan (kebanyakan menggunakan bahasa Inggris dan dalam bentuk terstruktur), bisa dimungkinkan untuk mempelajari instruksi yang diperlukan untuk menyalakan sebuah LED misalnya.

Bahasa assembly yang telah disusun akan dikonversi kedalam bahasa mesin yang berupa hexadesimal melalui sebuah perangkat lunak yang disebut dengan kompiler. Perancang tidak perlu repot dalam proses konversi ini, karena dengan beberapa klik saja konversi dalam beberapa detik akan selesai. Salah satu perangkat lunak yang digunakan untuk membuat program, kompiler, dan simulasi untuk mikrokontroler AVR adalah AVR studio. Berikut gambar tampilan dari AVR Studio

Struktur dasar bahasa assembly adalah:

mnemonic operand

Mnemonic merupakan singkatan instruksi, sedangkan operand merupakan data yang diperlukan untuk instruksi yang bersangkutan. Operand dapat berupa dua register, satu register, label, konstanta, atau bahkan tidak diperlukan operand, tergantung jenis instruksinya. Sebagai contoh

Idi r16, $F0

Instruksi diatas menyatakan untuk melalukan pemuatan data langsung (ldi= load immediate) pada register r16 dengan konstanta F0 (hexadesimal, hexadesimal ditandai dengan dollar $) atau 240 (desimal), instruksi ini secara singkat bisa diartikan mengisi r16 dengan kostanta (angka) bernilai F0.

Jika diperhatikan lebar semua register adalah 8 bit, artinya register hanya dapat diisi dengan data maksimum 255 desimal. Instruksi seperti ldi r16, 300 dapat menyebabkan kesalahan tak terduga, meskipun sintaks yang dipakai benar. Selain dengan menggunakan perintah diatas (hexadesimal), penulisan bilangan juga dapat menggunakan sistem bilangan desimal dan biner

Idi r16, 240 ;sistem angka desimal

Idi r16, 0b11110000 ;sistem angka biner

Tabel lengkap seluruh instruksi mikrokontroler AVR dapat dilihah di Atmel. Tetapi tidak semua mikrokontroler AVR memiliki instruksi yang sama. Setiap mikrokontroler memiliki datasheet yang didalamnya terdapat Instruction Set Summary. Sebagai contoh mikrokontroler ATTiny 2313 tidak memiliki instruksi perkalian mul.

  • Fitur Dasar Mikrokontroler

Prinip dasar dalam menggunakan fitur2 yang terdapat dalam mikrokontroler dilakukan dengan cara

  1. menentukan mode pada register kendali
  2. memasukkan data pada register data
  3. mengaktifkan fitur

Register kendali pada setiap fitur bisa berjumlah lebih dari satu register, misalnya register untuk pengaturan Timer/Counter 1, yang memiliki 9 register kendali, akan tetapi tidak semuanya dipakai, hanya dalam hal2 tertentu register2 tersebut dipakai..Beberapa fitur juga tidak mensyaratkan adanya data, karena mikrokontroler tersebut justru menerima data dari luar (misal register UDR pada komunikasi UART). Setiap mikrokontroler memiliki register kendali dan data yang berbeda, sesuai dengan fitur yang diberikan oleh vendor, namun ada mikrokontroler yang memiliki register data dan kendali sampai dengan 63 register. Register2 ini memiliki alamat masing2, namun dalam perancangan program kita bisa mengakses register ini dengan memanggil nama dari register tersebut. Register2 tersebut dinamakan register masukan/keluaran (register I/O). Untuk lebih jelas mengenai register masing2 mikrokontroler dapat dilihat pada datasheet masing2 mikrokontroler.

Dalam mikrokontroler juga terdapat register lain yang menandakan status dari fitur yang bersangkutan, yang sering disebut dengan register flag. Register ini digunakan untuk mengetahui status dari fitur yang sedang dijalankan, misalnya untuk memantau apakah terjadi interupsi. Hal ini sangat bermanfaat dalam instruksi2 percabangan. Yang termasuk dalam register ini antara lain:

  1. SREG (Status Register)
  2. GIFR (General Interrupt Flag Register)
  3. TIFR (Timer Interrupt Flog Register)
  4. MCUCSR (MCU Control and Status Register) – empat bit pertama
Beberapa fitur memerlukan aktivasi pada bit2 tertentu dari register tersebut, seperti misalnya untuk mengeset apakah suatu port I/O akan digunakan sebagai output atau sebagai input. Pada mikrokontroler AVR suatu port harus diset terlebih dahulu sebelum digunakan (tidak seperti pada MCS 51 yang bisa difungsikan sebagai input atau output, tanpa harus mensetting register). Untuk mengeset apakah suatu port mau digunakan sebagai output atau input dapat dilihat pada gambar dibawah:
Dari gambar bisa kita lihat, ketika suatu port I/O ingin digunakan sebagai output, maka kita harus mengeset register DDRx (x=port yang ingin dipakai, bisa A, B, C, D, E). Bila ingin port I/O ingin digunakan sebagai output maka DDRx harus diisi dengan 1, sedangkan bila ingin digunakan sebagai input, maka DDRx diisi dengan 0. Ketika port dipakai sebagai input, maka register yang dibaca adalah register PINx, sedangkan ketika port dipakai sebagai output, maka register yang ditulis adalah PORTx. Beikut contoh program mengeset port sebagai input dan output.
.include “m8535def . inc”

.org 0

rjmp mulai

mulai:

Idi r16, low(RAMEND)

out SPL, r16

ser r16 ; r16 = $FF

out DDRC, r16 ; PORTC sebagai keluaran

Idi r16, 0bl0101010 ; data PORTC = 0b10101010 (nyalakan LED)

out PORTC, r16

clr r17

out DDRD, r17,

out PORTD, r16 ; PORTD sebagai masukan

cek:

in r16, PIND

cpi r16, 0b11111110 ; saklar pada D.0 (aktif low) sudah ditekan?

Breq keypress

Rjmp cek

Keypress:

Out PORTC, r17 ; padamkan LED

Rjmp cek

2.

3.

4.

2 Balasan ke Bermain-main dengan mikrokontroler AVR(2)

  1. Bri mengatakan:

    bisa ga bw bikin musik 8bit?

    Pada varian tertentu bisa membuat musik 8 bit (seperti ATmega128), namun akan menghabiskan banyak memori, baik memori yang akan digunakan untuk menyimpan data (musik), maupun memori program yang digunakan untuk mengolah dan memanipulasi musik tersebut, telebih, untuk memanipulasi musik, diperlukan bahasa pemrograman tingkat tinggi (C, Basic), yang notabene rakus memori.

  2. garasin mengatakan:

    tolong dong contoh/ jenis register yang dapat dilihat oleh pemakai dan register kendali…
    terima kasih

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: