mikrokontrolleravr-121108060828-phpapp01

48
1 e-book Handout Workshop Pemrograman AVR (AT90S2313/AT90S8515) oleh Agfianto Eko Putra [email protected] Dapatkan ebook ini gratis di http://agfi.staff.ugm.ac.id FREE EBOOK!! Jika Anda merasa ebook ini bermanfaat silahkan mendistribusikan ulang ebook ini dengan gratis di website Anda selama tidak merubah isi yang ada di e-book ini. Terima kasih…

Upload: ahmad-lutfi-rizqy-ramadan

Post on 26-Jan-2016

7 views

Category:

Documents


0 download

DESCRIPTION

Aplikasi Mikrokontroller AVR

TRANSCRIPT

Page 1: mikrokontrolleravr-121108060828-phpapp01

1

e-book Handout Workshop Pemrograman AVR

(AT90S2313/AT90S8515)

oleh Agfianto Eko Putra

[email protected]

Dapatkan ebook ini gratis di http://agfi.staff.ugm.ac.id

FREE EBOOK!! Jika Anda merasa ebook ini bermanfaat silahkan mendistribusikan ulang ebook ini dengan gratis di website Anda selama tidak merubah isi yang ada di e-book ini.

Terima kasih…

Page 2: mikrokontrolleravr-121108060828-phpapp01

2

Handout Workshop Pemrograman AVR (AT90S2313/AT90S8515)

Disusun oleh: Agfianto Eko Putra – [email protected]

(tersedia CDROM pendukung, lihat pada bagian informasi di akhir ebook ini) Mikrokontroler Atmel’s AVR® merupakan jenis mikrokontroler RISC yang menjalankan instruksi siklus tunggal dan memiliki struktur I/O yang bisa mengurangi kebutuhan komponen-komponen eksternal.

DAFTAR ISI

I. PENDAHULUAN MIKROKONTROLER AVR (AT90S2313) ................................... 3 I.a. Arsitektur Mikrokontroler Atmel’s AVR ........................................................... 3 I.b. Tentang Register-register AVR .......................................................................... 5 I.c. Mode Pengalamatan AVR dan Set Instruksi .................................................. 8 I.d. Port-port I/O ........................................................................................................... 12 I.e. Interupsi ................................................................................................................... 14 I.f. Pencacah/Pewaktu 0 dan 1 ................................................................................ 15 I.g. Pewaktu Watchdog ............................................................................................... 18 I.h. Komparator Analog ............................................................................................... 20 I.i. Komunikasi Serial ................................................................................................... 21

II. PEMROGRAMAN MIKROKONTROLER AVR (AT90S2313) .............................. 23 II.a. Eksperimen-1: Proses aritmetika sederhana ............................................ 23

Membuat proyek baru dengan VMLAB 3.10 .................................................... 23 Menuliskan program Assembly AVR ................................................................... 25 Melakukan simulasi dengan VMLAB 3.10 ......................................................... 26

II.b. Eksperimen-2: Proses aritmetika kompleks .............................................. 28 II.c. Eksperimen-3: Penggunaan I/O untuk LED .............................................. 30

Menyiapkan berkas project untuk rangkaian eksternal ............................. 30 II.d. Eksperimen-4: LED berjalan ............................................................................ 33 II.e. Eksperimen-5: Penggunaan Interupsi Eksternal INT0 dan INT1 ...... 34

Dasar-Dasar Interupsi ............................................................................................. 34 Struktur Program Terkendali-Interupsi Pada AVR ....................................... 34 Mengatur Lokasi Lompatan Vektor Interupsi dengan .org ........................ 34 Pengarah .org .............................................................................................................. 35 Mengatur register GIMSK ....................................................................................... 36 Mengatur register MCUCR ...................................................................................... 36 Mengaktifkan interupsi global dalam SREG .................................................... 37 Penjelasan program interupsi eksternal INT0 dan INT1............................ 37

II.f. Eksperimen-6: Penggunaan Interupsi Pewaktu/Pencacah ................. 42 Interupsi Limpahan Pewaktu ................................................................................ 42 OVF0addr ...................................................................................................................... 42 TIMSK, TCCR0 dan TCNT0 ...................................................................................... 42 Penjelasan program interupsi pewaktu/pencacah 0 ................................... 43

Page 3: mikrokontrolleravr-121108060828-phpapp01

I. PENDAHULUAN MIKROKONTROLER AVR (AT90S2313)

I.a. Arsitektur Mikrokontroler Atmel’s AVR

Mikrokontroler Atmel’s AVR secara umum memiliki beberapa bagian penting,sebagaimana arsitektur dasarnya ditunjukkan pada Gambar 1. Sedangkan inti CPU(CPU core) dan periferalnya ditunjukkan pada Gambar 2 dan 3.

Gambar 1. Arsitektur dasar Mikrokontroler Atmel’s AVR

Jika diperhatikan pada arsitektur tersebut terdapat 3 macam register:1. Register serbaguna atau2. Register status atau SREG3. Register periferal atau

Yang masing-masing memilki fungsi atau kegunaan tertentu yang akan kita lihatpada pasal Tentang Register Mikrokontroler Atmel’s AVR.

Demikian juga dengan bagian periferal AVR, sebagaimana ditunjukkan pada Gambar3, terdapat berbagai macammembahas periferal.

OKONTROLER AVR (AT90S2313)

troler Atmel’s AVR

VR secara umum memiliki beberapa bagian penting,sarnya ditunjukkan pada Gambar 1. Sedangkan inti CPUa ditunjukkan pada Gambar 2 dan 3.

Arsitektur dasar Mikrokontroler Atmel’s AVR

tektur tersebut terdapat 3 macam register:na atau General Purpose Register;tau SREG – Status Register, dan atau Periphery Registers

milki fungsi atau kegunaan tertentu yang akan kita lihater Mikrokontroler Atmel’s AVR.

ian periferal AVR, sebagaimana ditunjukkan pada Gambarm periferal yang juga akan kita lihat pada pasal

3

bagian penting,dangkan inti CPU

VR

er:

ng akan kita lihat

kan pada Gambara pasal-pasal yang

Page 4: mikrokontrolleravr-121108060828-phpapp01

Gambar 2. CPU Core

Gambar 3. Periferal Mikrokontroler Atmel’s AVR

2. CPU Core Mikrokontroler Atmel’s AVR

3. Periferal Mikrokontroler Atmel’s AVR

4

Page 5: mikrokontrolleravr-121108060828-phpapp01

I.b. Tentang Register-register AVR

CPU mengandung 32x8 bit registersebagaimana ditunjukkan pada Gambar 4tunggal. Ke-32 register GPR ini langsung terhubung dengan ALU, membolehkan duaregister bebas (independen) dapat diakses dalam sebuah indikerjakan dalam satu siklus detak tunggal.

Khusus register R26 s/d R31 memiliki fungsi tambahan selain sebagai GPR,sebagaimana ditunjukkan pada Gambar 4 dan 5, registersebagai penunjuk alamat untuk pengalamatan takmode pengalamatan lainnyfungsi sebagai fixed displacement

egister AVR

t register serbaguna (GPR – General Purpose Register)pada Gambar 4, dengan waktu akses R ini langsung terhubung dengan ALU, membolehkan dua

en) dapat diakses dalam sebuah instruksi tunggal yangs detak tunggal.

Gambar 4. Register Serbaguna

R31 memiliki fungsi tambahan selain sebagai GPR,pada Gambar 4 dan 5, register-register ini juga berfungsiuntuk pengalamatan tak-langsung pada Ruang Data. Padaya, register alamat tak-langsung X, Y dan Z ini memilikicement, automatic increment dan decrement

Gambar 5. Register X, Y dan Z

5

Purpose Register),satu siklus detak

membolehkan duaksi tunggal yang

in sebagai GPR,ini juga berfungsiRuang Data. Padadan Z ini memilikiment.

Page 6: mikrokontrolleravr-121108060828-phpapp01

Gambar 6. Ringkasan Register

Register Status pada AVR (SREG)tersimpan pada ruang lokasi I/O $3F atau $5F. Menyimpan 8 macam status:

• I – Global Interrupt Enable• T – Bit Copy Storage• H – Half Carry Flag

ngkasan Register-register Periferal dan Status

Gambar 7. Register Status

R (SREG), sebagaimana ditunjukkan pada gambar 7,si I/O $3F atau $5F. Menyimpan 8 macam status:Enable

e

6

tatus

pada gambar 7,m status:

Page 7: mikrokontrolleravr-121108060828-phpapp01

• S – Sign Bit, S = N (+) V• V – Two’s Complement Overflow Flag• N – Negative Flag • Z – Zero Flag • C – Carry Flag

Catatan penting: Register statusmengembalikan lagi isi-isinya selama proses pemanggilan interupsi, hal ini harusdilakukan melalui program atau perangkat lunak secara manual.

Gambar 8. Register

+) Vent Overflow Flag

status – SREG, tidak secara otomatis menyimpan dannya selama proses pemanggilan interupsi, hal ini harusatau perangkat lunak secara manual.

mbar 8. Register-register Periferal

7

menyimpan danpsi, hal ini harus

Page 8: mikrokontrolleravr-121108060828-phpapp01

I.c. Mode Pengalamatan AVR

Pada Gambar 9 ditunjukkan ringkasan mode pengalamatan yang dikenal padaMikrokontroler Atmel’s AVR. Mode pengalamatan inidan tujuan dari suatu instruksi, apakah melalui register, memori, data langsung atauI/O. Sedangkan set instruksi ditunjukkan pada Gambar 18, 19, 20 dan 21.

Gambar 9. Ringkasan Mode Pengalamatan Atmel’s AVR

Gambar 10.

Gambar 11. Pengalamatan Dua Register Langsung

Gambar 12. Pengalamatan

n AVR dan Set Instruksi

kan ringkasan mode pengalamatan yang dikenal padaR. Mode pengalamatan ini didasarkan pada jenis sumberuksi, apakah melalui register, memori, data langsung atausi ditunjukkan pada Gambar 18, 19, 20 dan 21.

Ringkasan Mode Pengalamatan Atmel’s AVR

0. Pengalamat Register Tunggal Langsung

1. Pengalamatan Dua Register Langsung

bar 12. Pengalamatan I/O Langsung

8

ang dikenal padaada jenis sumberata langsung atauan 21.

VR

g

g

Page 9: mikrokontrolleravr-121108060828-phpapp01

Gambar 13. Pengalamatan Data Langsung

Gambar 14. Pengalamatan Tak

Gambar 15. Pengalamatan Tak

Gambar 16. Pengalamatan Tak

Gambar 17. Pengalamatan Tak

Gambar 18. Ringkasan Instruksi Aritmetika dan Logika

bar 13. Pengalamatan Data Langsung

bar 14. Pengalamatan Tak-langsung

galamatan Tak-langsung dengan post-increment

galamatan Tak-langsung dengan pre-decrement

ngalamatan Tak-langsung dengan displacement

Ringkasan Instruksi Aritmetika dan Logika

9

crement

rement

cement

ka

Page 10: mikrokontrolleravr-121108060828-phpapp01

Gambar 19. Ringkasan Instruksi Bit dan Test

Gambar 20. Ringkasan Instruksi Pencabangan

ar 19. Ringkasan Instruksi Bit dan Test

r 20. Ringkasan Instruksi Pencabangan

10

Page 11: mikrokontrolleravr-121108060828-phpapp01

Gambar 21. Ringkasan Instruksi Transfer Data

Gambar 22. Ringkasan Operator Ekspresi

r 21. Ringkasan Instruksi Transfer Data

perator Ekspresi (kiri) dan Pengarah (Directive

11

ective – Kanan)

Page 12: mikrokontrolleravr-121108060828-phpapp01

I.d. Port-port I/O Semua port AVR memiliki fungsionalitas Readdigunakan sebagai port-port I/O digital. Artinya, arah sebuah pin pada port dapatdiubah tanpa harus merubah arah pindan CBI (lihat kembali Gambar 19). Hal ini juga berlaku untuk mengubah nilaipenggerak (jika dikonfigurasi sebagai keluaran) atau mengaktifkan/mematikanresistor pull-up (jika dikonfigurasi sebagai masukan). Ringkasan dan gambarskematik untuk port B dan D pada AVR AT924.

Gambar 23. R

Efek DDBn pada pin-pin port B:

fungsionalitas Read-Modify-Write yang sesungguhnya saatort I/O digital. Artinya, arah sebuah pin pada port dapatah arah pin-pin port yang lain menggunakan instruksi

Gambar 19). Hal ini juga berlaku untuk mengubah nilaiurasi sebagai keluaran) atau mengaktifkan/mematikanonfigurasi sebagai masukan). Ringkasan dan gambarD pada AVR AT90S2313 ditunjukkan pada Gambar 23

Ringkasan port B dan D pada AVR AT90S2313

rt B:

12

esungguhnya saatpada port dapat

akan instruksi SBI k mengubah nilaiktifkan/mematikansan dan gambarda Gambar 23 dan

2313

Page 13: mikrokontrolleravr-121108060828-phpapp01

Efek DDDn pada pin-pin port D:

Gambar 24. Rangkaian pin pada port

Fungsi alternatif port B: • PINB7 – SCK, pin m• PINB6 – MISO, pin data keluaran untuk up/downloading memori,• PINB5 – MOSI, pin data masukan untuk up/downloading memori,• PINB3 – OC1, keluaran cocok perbandingan (• PINB1 – AIN1, masukan negatif komp• PINB0 – AIN2, masukan positif komparator analog.

Fungsi alternatif port D: • PIND6 – ICP, pin capture• PIND5 – T1, pin masukan sumber detak untuk Timer 1,• PIND4 – T0, pin masukan sumber detak untuk Timer/Counter 0,• PIND3 – INT1, sumber interupsi eksternal 1,• PIND2 – INT0, sumber interupsi eksternal 0,• PIND1 – TxD, mengirimkan data serial, sebagai pin keluaran data untuk

UART, • PIND0 – RxD, menerima data serial, sebagai pin masukan data untuk UART,

rt D:

mbar 24. Rangkaian pin pada port

asukan detak untuk up/downloading memori,data keluaran untuk up/downloading memori,data masukan untuk up/downloading memori,ran cocok perbandingan (compare matchukan negatif komparator analog, ukan positif komparator analog.

apture masukan untuk Timer 1, sukan sumber detak untuk Timer 1,sukan sumber detak untuk Timer/Counter 0,ber interupsi eksternal 1,ber interupsi eksternal 0,ngirimkan data serial, sebagai pin keluaran data untuk

erima data serial, sebagai pin masukan data untuk UART,

13

mori,mori,

emori,h),

r 0,

uaran data untuk

ata untuk UART,

Page 14: mikrokontrolleravr-121108060828-phpapp01

I.e. Interupsi Mikrokontroler AVR menyediakan 10 sumber interupsiinterupsi ini dan vektor RESETdi dalam ruang memori program. Semua interupsi berhubungan dengan bitaktivasi individual yang harus dimengaktifkan interupsi yang bersangkutan.RESET ditunjukkan pada Gambar 25.ditunjukkan pada Gambar 26.

Gambar 25.

Catatan: Bit-I akan di-nol-ksuatu interupsi dan akan diyang muncul berikutnya (jika ada).

Gambar 26. Setup program yang sering untuk alamat vektor reset dan interupsi

ediakan 10 sumber interupsi selain RESETSET masing-masing memiliki vektor program yang terpisahprogram. Semua interupsi berhubungan dengan bitarus di-set bersamaan dengan bit-I dalam SREG untukng bersangkutan. Ringkasan vektor-vektor interupsi danGambar 25. Setup program untuk inisialisasi interupsi

26.

Ringkasan vektor-vektor interupsi dan reset

kan secara perangkat keras (hardware) sdi-set oleh instruksi RETI untuk mengaktifkan interupsi

ka ada).

am yang sering untuk alamat vektor reset dan interupsi

14

RESET. Interupsi-ram yang terpisahan dengan bit-bit alam SREG untukktor interupsi danisialisasi interupsi

eset

setelah munculnyagaktifkan interupsi

et dan interupsi

Page 15: mikrokontrolleravr-121108060828-phpapp01

Gambar 27. Tiga sumber RESET pada AT90S2313

I.f. Pencacah/Pewaktu 0 dan 1

Gambar 28. Bagan P

Pewaktu/Pencacah0 8-bit dapat menggunakan sumber detak dari CK, CK praskalamaupun pin eksternal. Pengaturan interupsi untuk Timer/Counter0 melaluiatau Timer/Counter Interrupt Mask Register. Flag limpahan ada di dalam

27. Tiga sumber RESET pada AT90S2313

0 dan 1

gan Pewaktu/Pencacah0 8-bit (Timer/Counter0)

dapat menggunakan sumber detak dari CK, CK praskalangaturan interupsi untuk Timer/Counter0 melaluiupt Mask Register. Flag limpahan ada di dalam

15

unter0)

CK, CK praskala0 melalui TIMSK dalam TIFR atau

Page 16: mikrokontrolleravr-121108060828-phpapp01

Timer/Counter Flag Register, sedangkan sinyal kontrol ditemukan padaTimer/Counter0 Control Register.

Gambar 29. Bagan Pewaktu/Pencacah1 16

Timer/Counter1 16-bit mendapatkan sumber detak dari tiga macam, yaitu CK, CKpraskala atau pin eksternal.TIMSK atau Timer/Counter Interrupt Mask Register. Flag limpahan ada di dalamTIFR atau Timer/Counter Flag Register, sedangkan sinyal kontrol ditemukan padaTCCR1 atau Timer/Counter1 Control Register.

er, sedangkan sinyal kontrol ditemukan padagister.

an Pewaktu/Pencacah1 16-bit (Timer/Counter1)

ndapatkan sumber detak dari tiga macam, yaitu CK, CKnal. Pengaturan interupsi untuk Timer/Counter0 melaluier Interrupt Mask Register. Flag limpahan ada di dalamFlag Register, sedangkan sinyal kontrol ditemukan padar1 Control Register.

16

pada TCCR0 atau

unter1)

am, yaitu CK, CK/Counter0 melaluihan ada di dalaml ditemukan pada

Page 17: mikrokontrolleravr-121108060828-phpapp01

Gambar 30. Penggunaan Timer/Counter1

Gambar 31. Ilustrasi sumber detak

bar 30. Penggunaan Timer/Counter1

ambar 31. Ilustrasi sumber detak

17

Page 18: mikrokontrolleravr-121108060828-phpapp01

Gambar 32. Bagan

I.g. Pewaktu Watchdog

Pewaktu Watchdog mendapatkan detak secara terpisahInstruksi WDR digunakanselama periode waktu tertentu sebagaimana diberikan oleh praskalar WD

Gambar 33. Bagan pewaktu watchdog

gan Sumber Detak untuk Timer/Counter0 dan 1

patkan detak secara terpisah dari osilator onn untuk mereset pewaktu Watchdog (entu sebagaimana diberikan oleh praskalar WD

mbar 33. Bagan pewaktu watchdog

18

dan 1

or on-chip 1 MHz. (harus dijalankan ar WD).

Page 19: mikrokontrolleravr-121108060828-phpapp01

Gambar 34. Penggunaan pewaktu watchdog

G

ar 34. Penggunaan pewaktu watchdog

Gambar 35. Praskalar Watchdog

19

Page 20: mikrokontrolleravr-121108060828-phpapp01

I.h. Komparator Analog

Komparator analog membandingkan nilai pada masukan positif PB0 atau AIN0dengan masukan negatif PB1 atau AIN1. Jika masukan AIN0 > AIN1 maka nilaikeluarannya adalah ACOditunjukkan pada Gambar 3

Gambar

Gambar

bandingkan nilai pada masukan positif PB0 atau AIN0PB1 atau AIN1. Jika masukan AIN0 > AIN1 maka nilai� ‘1’. Bagan dan penggunaan ko

36 dan 37.

mbar 36. Bagan Komparator Analog

r 37. Penggunakan Komparator analog

20

f PB0 atau AIN0AIN1 maka nilai

omparator analog

Page 21: mikrokontrolleravr-121108060828-phpapp01

I.i. Komunikasi Serial Komunikasi serial dilakukan oleh unit UARTTransmitter yang memiliki beberapa fitur:

• Generator baudrate;• Baudrate yang tinggi;• Data 8 atau 9 bit; • Penapis derau; • Deteksi Overrun; • Deteksi Framing Error;• Deteksi False Start Bit;• Tiga macam interupsi terpisah: Rx selesai, Tx selesai dan Register data Tx

kosong.

Gambar 38. Bagan Komunikasi serial UART pada Mikrokontroler AVR

Generator baudrate, sebagaimana ditunjukkan pada Gambar 39,pembagi frekuensi yang menghasilkan baudrate berdasarkan persamaan sebagaiberikut:

n oleh unit UART – Universal Asynchronous Receiver andbeberapa fitur:

i;

or;Bit;psi terpisah: Rx selesai, Tx selesai dan Register data Tx

Komunikasi serial UART pada Mikrokontroler AVR

agaimana ditunjukkan pada Gambar 39,menghasilkan baudrate berdasarkan persamaan sebagai

21

ous Receiver and

Register data Tx

roler AVR

39, merupakan ersamaan sebagai

Page 22: mikrokontrolleravr-121108060828-phpapp01

• BAUD = baudrate; • fck = frekuensi detak kristal;• UBBR = isi dari Register UART Baud Rate;

Untuk frekuensi kristal standard, baudrate yang biasa digunakan dihasilkanmenggunakan pengaturan pada UBRR.lebih dari 1% sama sekali tidak disarankan.terhadap derau. Perhatikan tabel pada Gambar 39 untuk penentuan baudrate.

Gambar 39. Isi UBBR berkaitan dengan nilai baudrate

NB: Keterangan lengkap pada bagian ini

k kristal;ster UART Baud Rate;

standard, baudrate yang biasa digunakan dihasilkanpada UBRR. Menggunakan baudrate yang memiliki error

tidak disarankan. Semakin besar error-nya semakin rentantabel pada Gambar 39 untuk penentuan baudrate.

. Isi UBBR berkaitan dengan nilai baudrate

bagian ini silahkan merujuk pada datasheet AT90S2313.

22

nakan dihasilkanang memiliki errorya semakin rentann baudrate.

te

et AT90S2313.

Page 23: mikrokontrolleravr-121108060828-phpapp01

II. PEMROGRAMAN MIKROKONTROLER AVR (AT90S2313)

II.a. Eksperimen-1: Proses aritmetika sederhana

Membuat proyek baru dengan VMLAB 3.10

Untuk memahami pemrograman mikrokontroler AVR (khususnya AT90S2313)gunakan metode Learning by Doingditampilkan jendela utama sebagaimana ditunjukkan pada Gambar 40.

Gambar 40. Jendela utama VMLAB 3.0

VMLAB menggunakan sistem proyek, dengan demikian langkah awal atau langkahpertama adalah membuat proyek baru dengan cara memilih menuProject sehingga ditampilkan jendela dialog sebagaimana ditunjukkan pada Gambar41. Step 1: Beri nama proyek-nStep 2: Pilih mikrokontroler yang akan digunakan, VMLAB mendukung hampir

seluruh keluarga besar mikrokontrolerAT90S2313;

Step 3: Pilih perangkat lunak kompilasi, sementara biarkan saja dulu seperti itukarena akan digunakan pemrograman Bahasa Assembly AVR;

Step 4: Tambahkan file-file yang digunakan, gunakan tombolmenambahkan file-

KROKONTROLER AVR (AT90S2313)

ses aritmetika sederhana

ngan VMLAB 3.10

ograman mikrokontroler AVR (khususnya AT90S2313)ng by Doing. Aktifkan VMLAB verssebagaimana ditunjukkan pada Gambar 40.

mbar 40. Jendela utama VMLAB 3.0

em proyek, dengan demikian langkah awal atau langkahproyek baru dengan cara memilih menukan jendela dialog sebagaimana ditunjukkan pada Gambar

nya, misalnya coba01;er yang akan digunakan, VMLAB mendukung hampirbesar mikrokontroler Atmel’s AVR, dalam hal ini pilih

nak kompilasi, sementara biarkan saja dulu seperti ituakan pemrograman Bahasa Assembly AVR;e yang digunakan, gunakan tombol �file sumber;

23

nya AT90S2313)rsi 3.0 sehingga 40.

wal atau langkahProject � New

kan pada Gambar

endukung hampirlam hal ini pilih

dulu seperti ituR;

Add this untuk

Page 24: mikrokontrolleravr-121108060828-phpapp01

Step 5: Jangan lupa klik Oassembler-nya, sebagaimana ditunjukkan pada Gambar 42.

Gambar 41. Jendela Dialog

Gambar 42. Hasil dari

k sehingga akan dihasilkan dua berkas, yaitu project danbagaimana ditunjukkan pada Gambar 42.

41. Jendela Dialog Create New Project

ar 42. Hasil dari Create new project

24

yaitu project dan

Page 25: mikrokontrolleravr-121108060828-phpapp01

25

Menuliskan program Assembly AVR Selanjutnya tuliskan program assembler berikut ini, keterangan lengkap ada di dalam acara workshop: ; ****************************************************** ; BASIC .ASM template file for AVR ; ******************************************************

.include "C:\VMLAB\include\2313def.inc"

; Definisikan variabel disini... ;.def a = r16 .def b = r17 .def x = r18 .def y = r19 .def z = r20

reset: rjmp utama ; lompat ke program utama reti ; posisi vektor interupsi $0001 reti ; posisi vektor interupsi $0002 reti ; posisi vektor interupsi $0003 reti ; posisi vektor interupsi $0004 reti ; posisi vektor interupsi $0005 reti ; posisi vektor interupsi $0006 reti ; posisi vektor interupsi $0007 reti ; posisi vektor interupsi $0008 reti ; posisi vektor interupsi $0009 reti ; posisi vektor interupsi $000A

utama: ldi a, 10 ; int a = 10, ldi b, 4 ; b = 4, x, y, z; mov x, a ; x = a + b; add x, b ; mov y, a ; y = a - b; sub y, b ; lsl x ; untuk melakukan operasi x * 2; asr y ; untuk melakukan operasi y * 2; mov z, x ; z = x*2 + y/2; add z, y ;

ulang: inc r20 ; hanya sekedar menaikkan nilai r20 rjmp ulang ; ulangi lagi…

Lakukan kompilasi dengan menekan tombol F9. Jika tidak ada kesalahan, maka pada jendela Message akan ditampilkan:

Page 26: mikrokontrolleravr-121108060828-phpapp01

Melakukan simulasi dengan VMLAB 3.10

Selanjutkan dilakukan simulasi untuk melihat perubahanjendela register, sebagaimana ditunjukkan pada Gambar 43, dengan menekanatau menggunakan menu View

G

Lakukan simulasi langkah-demiregister yang terkait sebagaimana contohnya ditunjukkan pada Gambar 4

an VMLAB 3.10

asi untuk melihat perubahan-perubahan isi register, aktifkana ditunjukkan pada Gambar 43, dengan menekanew � Registers/Flags.

Gambar 44. Jendela Registers/Flags

emi-langkah dengan menekan F6, perhatikan perubahan isimana contohnya ditunjukkan pada Gambar 44

26

i register, aktifkanekan Alt+Shift+R

kan perubahan isi4 dan 45.

Page 27: mikrokontrolleravr-121108060828-phpapp01

Gambar 44. Hasil simulasi…

Gambar 45. Hasil simulasi…

27

Page 28: mikrokontrolleravr-121108060828-phpapp01

28

II.b. Eksperimen-2: Proses aritmetika kompleks Kali ini dibuat program aritmetiks yang agak lebih kompleks dari sebelumnya, tuliskan dan lakukan simulasi untuk program berikut serta jangan lupa untuk melihat perubahan-perubahan yang terjadi pada register yang terkait. ; ****************************************************** ; BASIC .ASM template file for AVR ; ******************************************************

.include "C:\VMLAB\include\2313def.inc"

; Define here the variables ;.def a = r16 .def b = r17

; Define here Reset and interrupt vectors, if any ;reset:

rjmp start reti ; Addr $01 reti ; Addr $02 reti ; Addr $03 reti ; Addr $04 reti ; Addr $05 reti ; Addr $06 Use 'rjmp myVector' reti ; Addr $07 to define a interrupt vector reti ; Addr $08 reti ; Addr $09 reti ; Addr $0A reti ; Addr $0B This is just an example reti ; Addr $0C Not all MCUs have the same reti ; Addr $0D number of interrupt vectors reti ; Addr $0E reti ; Addr $0F reti ; Addr $10

; Program starts here after Reset ; Untuk implementasi-------------------------- ; while (a != b) ; if (a>b) ; a = a - b; else ; b = b - a; ;--------------------------------------------- start:

cp a,b brmi a_lbhkecil_b sub a,b rjmp cek

a_lbhkecil_b: sub b,a

cek: cp a,b brne start

ulang:

Page 29: mikrokontrolleravr-121108060828-phpapp01

29

rjmp ulang

Gambar 46. Perhatikan juga perubahan pada SREG

Gambar 47. Perhatikan juga perubahan pada SREG

Page 30: mikrokontrolleravr-121108060828-phpapp01

30

II.c. Eksperimen-3: Penggunaan I/O untuk LED Sekarang simulasi menggunakan LED pada Control Panel VMLAB (Gambar 48). Ketik program assembler berikut, lakukan simulasi dan amati hasilnya. ; ****************************************************** ; BASIC .ASM template file for AVR ; ******************************************************

.include "C:\VMLAB\include\2313def.inc"

; Define here the variables ;.def temp =r16

; Define here Reset and interrupt vectors, if any ;reset:

rjmp start reti ; Addr $01 reti ; Addr $02 reti ; Addr $03 reti ; Addr $04 reti ; Addr $05 reti ; Addr $06 Use 'rjmp myVector' reti ; Addr $07 to define a interrupt vector reti ; Addr $08 reti ; Addr $09 reti ; Addr $0A reti ; Addr $0B This is just an example reti ; Addr $0C Not all MCUs have the same reti ; Addr $0D number of interrupt vectors reti ; Addr $0E reti ; Addr $0F reti ; Addr $10

; Program starts here after Reset ;start:

ldi temp, 0xFF ; simpan 255 kedalam r16 sebagai var temp out DDRB, temp ; kirimkan nilai ini ke register arah

; port B (sebagai keluaran) ulang:

out PORTB, temp ; tampilkan isi temp melalui PORTB dec temp ; kurang nilai temp (=r16) rjmp ulang

Menyiapkan berkas project untuk rangkaian eksternal Kemudian buat rangkaian di sekitar mikrokontroler menggunakan berkas dengan format SPICE sebagai berikut… ; ************************************************************ ; PROJECT: ; AUTHOR: ; ************************************************************

; Micro + software running ; ------------------------------------------------------------ .MICRO "AT90S2313" .PROGRAM "coba03.asm"

Page 31: mikrokontrolleravr-121108060828-phpapp01

.TARGET "coba03.hex"

.TRACE ; Activate micro trace

; Following lines are optional; if not included; exactly these values are taken by default; ------------------------------------------------------------.POWER VDD=5 VSS=0 ; Power nodes.CLOCK 1meg ; Micro clock.STORE 250m ; Trace (micro+signals) storage time

; Micro nodes: RESET, PB0; Define here the hardware around the micro; ------------------------------------------------------------

D1 VDD n0 ; Like in real life, with a resistor.D2 VDD n1 D3 VDD n2 D4 VDD n3 D5 VDD n4 D6 VDD n5 D7 VDD n6 D8 VDD n7

R0 n0 PB0 1K ; Voltage drop seen at PB0R1 n1 PB1 1K R2 n2 PB2 1K R3 n3 PB3 1K R4 n4 PB4 1K R5 n5 PB5 1K R6 n6 PB6 1K R7 n7 PB7 1K

Nb: jika Anda belum memahami SPICESPICE, dapatkan ebooknya dan softwaren

http://agfi.staff.ugm.ac.id/index.php?page=simul

Perhatikan, susunan LED adalah common anoda, sehingga untuk menghidupkan digunakanlogika ‘0’ bukan logika ‘1’.

Gambar 48. Tampilan Control Panel (

tivate micro trace

tional; if not includedre taken by default--------------------------------------wer nodescro clockace (micro+signals) storage time

0-PB7, PD0-PD5, ACO, TIM1OVF re around the micro--------------------------------------

in real life, with a resistor.

ge drop seen at PB0

ami SPICE dan ingin belajar simulasi elektronika menggunakanbooknya dan softwarenya (versi student) gratisgfi.staff.ugm.ac.id/index.php?page=simul.

ah common anoda, sehingga untuk menghidupkan digunakan

48. Tampilan Control Panel (Alt+Shift+C)

31

--

--

nika menggunakanatis di…

dupkan digunakan

Page 32: mikrokontrolleravr-121108060828-phpapp01

Gambar 49. Tampilan port I/O (ar 49. Tampilan port I/O (Alt+Shift+I)

Gambar 50. Hasil simulasi…

32

Page 33: mikrokontrolleravr-121108060828-phpapp01

33

II.d. Eksperimen-4: LED berjalan Apa yang dilakukan oleh program ini?? ; ****************************************************** ; BASIC .ASM template file for AVR ; ******************************************************

.include "C:\VMLAB\include\2313def.inc"

; Define here the variables ;.def temp =r16

; Define here Reset and interrupt vectors, if any ;reset:

rjmp start reti ; Addr $01 reti ; Addr $02 reti ; Addr $03 reti ; Addr $04 reti ; Addr $05 reti ; Addr $06 Use 'rjmp myVector' reti ; Addr $07 to define a interrupt vector reti ; Addr $08 reti ; Addr $09 reti ; Addr $0A reti ; Addr $0B This is just an example reti ; Addr $0C Not all MCUs have the same reti ; Addr $0D number of interrupt vectors reti ; Addr $0E reti ; Addr $0F reti ; Addr $10

; Program starts here after Reset ;start:

ldi temp, 0xFF ; jadikan semua PORTB menjadi keluaran out DDRB, temp ldi temp, 0x01 ; isikan data 0000 0001

ulang: out PORTB, temp cpi temp, 0x80 ; cek apakah sudah data 1000 0000? brne lanjut ; Tidak, lompat ke lanjut ldi temp, 0x01 ; Ya isi lagi dengan data awal 0000 0001 rjmp ulang ; ulangi lagi

lanjut: lsl temp ; lakukan geser ke kiri rjmp ulang ; ulangi lagi

Bagaimana jika sekarang arah gerakan diubah? Bagaimana pula untuk animasi ping-pong? Atau animasi gerakan pingpong dua arah? Lakukan percobaan/modifikasi pada program…

Page 34: mikrokontrolleravr-121108060828-phpapp01

II.e. Eksperimen-5: Penggu

Dasar-Dasar Interupsi Interupsi merupakan sebuah mekaniskme kontrol aliran yang diimplementasikan padahampir semua kontroler, termasuk Atmel’s AVR. Pada aplikasi mikrokontroler yangmelibatkan interaksi denganbersamaan, artinya, tidak pada kondisi tersinkronisasi, inilah yang harus ditangani olehmikrokontroler. Misalnya: sebuah tombol yang ditekan oleh pengguna, dataserial atau UART, cuplikan-cuplikan yang diambil dari ADC atau bahkan sebuah pewaktuyang seakan-akan meneriakkan “euy… waktunya habis!!”. Semua kejadian ini perlu ditanganioleh mikrokontroler. Selain menggunakan teknik polling, dimana mikrokontroler selalu bertanyapakah perlu dilayani atau tidak, kita bisa membuat agar periferal yang bersangkutanyang akan memanggil mikrokontroler jika sudah tiba saatnya membutuhkan layanan. Hal inidinamakan sebagai “interupsi”, prosesor atau mikrokontrolutama yang sedang dijalankan untuk memeriksa interupsi yang terjadi dan melakukan aksiaksi yang terkait, setelah itu, program utama dijalankan kembali.

Struktur Program Terkendali

Kita sekarang akan menuliskan sebuah program yang terkendaliutama tidak melakukan apapun kecuali menunggu terjadinya interupsi. Untuk AT90S8515akan digunakan dua interupsi eksternal yang diperoleh dari pin PD2 dan PD3, sebagaimanaditunjukkan pada Gambar 51.

Gambar 51. Interupsi eksternal

Hal-hal penting yang perlu dituliskan dalam program:1. Mengatur lokasi lompatan vektor interupsi2. Mengatur set interupsi yang benar untuk mengaktifkan interupsi yang diinginkan

melalui GIMSK;3. Lakukan pengaturan seperlunya pada register kontrol4. Aktifkan interupsi secara global melalui

Mengatur Lokasi Lompatan Vektor Interupsi

Bagian paling bawah dari memori program AVR, dimulai pada alamatdisebut sebagai “Tabel vektor memori programberawal dari ruang ini. Tabel vektor digunakan untuk menyimpan vektorlompatan jika terjadi interupsi. Artinya, masingtertentu dan jika suatu interupsi terjadi, mikrokontroler akandan memeriksa apa yang ada di lokasi tersebut, misalnyakode-kode untuk menangani interupsi tersebut dringkasan tabel vektor interupsi pada AT90S8515.

ggunaan Interupsi Eksternal INT0 dan INT1

h mekaniskme kontrol aliran yang diimplementasikan padatermasuk Atmel’s AVR. Pada aplikasi mikrokontroler yangn dunia luar, banyak hal-hal yang terjadi pada saat yangada kondisi tersinkronisasi, inilah yang harus ditangani oleh

ng ditekan oleh pengguna, data-data yang dibaca pada portuplikan yang diambil dari ADC atau bahkan sebuah pewaktuan “euy… waktunya habis!!”. Semua kejadian ini perlu ditangani

olling, dimana mikrokontroler selalu bertanyadak, kita bisa membuat agar periferal yang bersangkutan

kontroler jika sudah tiba saatnya membutuhkan layanan. Hal inii”, prosesor atau mikrokontroler akan menghentikan programn untuk memeriksa interupsi yang terjadi dan melakukan aksiprogram utama dijalankan kembali.

dali-Interupsi Pada AVR

an sebuah program yang terkendali-interupsi dimana programpun kecuali menunggu terjadinya interupsi. Untuk AT90S8515i eksternal yang diperoleh dari pin PD2 dan PD3, sebagaimana

bar 51. Interupsi eksternal AT90S8515

tuliskan dalam program:atan vektor interupsi � gunakan .org si yang benar untuk mengaktifkan interupsi yang diinginkan

eperlunya pada register kontrol MCUCR;ara global melalui SREG;

n Vektor Interupsi dengan .org

memori program AVR, dimulai pada alamator memori program” dan program yang sesungguhnya harus

k menyimpan vektor-vektor interupsi, yaitu suatu lokasi tujuanpsi. Artinya, masing-masing interupsi memiliki lokasi memoriupsi terjadi, mikrokontroler akan melompat ke lokasi tersebut

a di lokasi tersebut, misalnya untuk menemukan alamat dimanainterupsi tersebut disimpan, perhatikan Gambar 52 tentang

psi pada AT90S8515.

34

dan INT1

lementasikan padaikrokontroler yang

di pada saat yangarus ditangani oleh

g dibaca pada portan sebuah pewaktun ini perlu ditangani

a ke setiap periferalg bersangkutan-lah kan layanan. Hal inighentikan programan melakukan aksi-

psi dimana programUntuk AT90S8515PD3, sebagaimana

yang diinginkan �

at 0x0000, sering esungguhnya harus

suatu lokasi tujuanmiliki lokasi memorit ke lokasi tersebutukan alamat dimanaGambar 52 tentang

Page 35: mikrokontrolleravr-121108060828-phpapp01

35

Pengarah .org

Pada kode-kode assembly, pengarah .org digunakan untuk mengatur lokasi kode program. Pengarah ini akan memberitahukan assembler untuk men-set pencacah lokasi pada suatu nilai absolut. Ini bukan set instruksi AVR, hanya sekedar perintah yang digunakan assembler untuk memastikan bahwa kode program dipetakan secara benar pada saat membuat berkas biner untuk AVR. Perhatikan Gambar 53.

Gambar 52. Ringkasan Tabel Vektor 8515

Gambar 53. Contoh kode Label digunakan untuk menggantikan suatu angka absolut yang menyatakan suatu alamat. Yang perlu kita lakukan adalah memberitahukan assembler dimana lompatnya saat,

Page 36: mikrokontrolleravr-121108060828-phpapp01

36

misalnya, terjadi pemanggilan vektor reset (dengan instruksi rjmp reset dan reset merupakan label). Harap dicatat bahwa baris pertama adalah penghandel reset. Di sinilah stack diatur. Stack digunakan untuk menyimpan alamat kembalian (return address) dalam kode program utama saat sebuah rutin interupsi atau subrutin dijalankan. Untuk sembarang layanan interupsi atau subrutin agar bisa kembali ke alamat awal dengan benar, stack harus ditempatkan di luar dari ruang vektor. Secara default, nilai SP (penunjuk stack) di-inisialisasi dengan nilai $0000, yang sama dengan lokasi tempat vektor reset berada, sehingga kita perlu mengaturnya dengan benar. Untuk AVR dengan SRAM lebih dari 256 byte (selain dari AT Tiny, 2343 maupun 4433), register SP panjangnya 2 byte dan terbagi dalam register SPL (low byte) dan SPH (high byte). Mengatur register GIMSK Register GIMSK digunakan untuk mengaktifkan dan mematikan interupsi eksternal secara individual, sebagaimana ditunjukkan pada Gambar 54. Karena kita akan menggunakan interupsi eksternal INT0 dan INT1 melalui tombol di PD2 dan PD3, maka kedua interupsi eksternal ini diaktifkan melalui GIMSK pada bit 6 dan 7.

Gambar 54. Pengaturan aktivasi interupsi pada GIMSK Mengatur register MCUCR Kita akan menggunakan bit 0, 1, 2 dan 3 pada register MCUCR, sebagaimana ditunjukkan pada Gambar 55, untuk mengendalikan interupsi yang berasal dari INT0 dan INT1. Bit-bit ini digunakan untuk mengendalikan bagaimana interupsi eksternal dapat terjadi, apakah saat sisi turun (falling edge dari 1 � 0), sisi naik (rising edge dari 0 � 1) atau level (saat 0), sebagaimana aturannya ditunjukkan pada Gambar 56.

Gambar 55. Pengaturan pada MCUCR

Page 37: mikrokontrolleravr-121108060828-phpapp01

37

Gambar 56. Menentukan jenis picuan untuk aktivasi interupsi Kita akan menggunakan sisi naik dari tombol yang terpasang, sebagaimana ditunjukkan pada Gambar 57, sehingga untuk INT0, ISC01 dan ISC00 diisi masing-masing 1 dan 1, demikian juga dengan ISC11 dan ISC10 untuk INT1.

Gambar 57. Rangkaian saklar untuk interupsi eksternal pada PD2 dan PD3 Anda perhatikan rangkaian di Gambar 57, normal akan terbaca sebagai logika ‘1’. Saat tombol ditekan maka pada pin akan terbaca ‘0’. Sehingga interupsi akan terjadi saat tombol dilepas, terjadi perubahan dari 0 � 1. Mengaktifkan interupsi global dalam SREG Untuk mengaktifkan interupsi secara global, selain mengaktifkan secara individu, bit 7 pada register SREG (register status) juga harus di-set untuk mengaktifkan interupsi secara global atau keseluruhan, perhatikan posisi bit-7 pada SREG di Gambar 58.

Gambar 58. Register SREG, gunakan instruksi sei agar bit 7 =1 Semua bit pada SREG akan di-nol-kan saat reset dan dapat dibaca/tulis selama program berjalan. Hanya bit 7 yang diperhatikan untuk masalah interupsi ini, jika dibuat ‘1’, maka akan mengaktifkan seluruh interupsi, untuk itu digunakan instruksi khusus sei.

Penjelasan program interupsi eksternal INT0 dan INT1 Untuk VMLAB, digunakan tombol K0 dan K1 untuk masukan PD2 dan PD3 sebagai interupsi eksternal. Selain itu 8 LED dihubungkan ke PORTB sebagai tampilan eksternal. Saat program dijalankan, semua LED akan mati, jika dilakukan penekanan salah satu tombol, maka terjadi pencacahan naik atau pencacahan turun dan hasilnya ditunjukkan pada LED.

Page 38: mikrokontrolleravr-121108060828-phpapp01

38

Perhatikan bagan aliran program sebagaimana ditunjukkan pada Gambar 59.

Gambar 59. Proses penanganan interupsi

1. Sebuah tombol ditekan � misalnya PD2 yang berkaitan dengan INT0;2. Vektor INT0 ditemukan; 3. Kode pada lokasi yang terkait dijalankan dan lompat ke suatu subrutin; 4. Subrutin kembali ke pengulangan utama menggunakan instruksi reti.

Inilah yang akan dilakukan program kita, tidak lebih tidak kurang. Selain inisialisasi, juga dituliskan rutin-rutin pendek untuk menangani tombol (menghasilkan INT0 dan INT1) dan beberapa pengarah assembler, hanya itu saja… Oke inilah program kita menggunakan mikrokontroler AT90S8515…

;-------------------------------------------------------------------------- ; Nam1: intr01.asm ; Judul: Program Interupsi sederhana pada AVR ;--------------------------------------------------------------------------.include "C:\VMLAB\include\8515def.inc"

; Vektor layanan Interupsi

.org $0000 rjmp Reset ; vektor Reset

.org INT0addr rjmp IntV0 ; vektor INT0 (interupsi eksternal dari pin D2)

.org INT1addr rjmp IntV1 ; vektor INT1 (interupsi eksternal dari pin D3)

;-------------------------------------------------------------------------- ;; Definisi register untuk kalang utama

.def TIME=r16

.def TEMP=r17

.def BEEP=r18

;-------------------------------------------------------------------------- ;; Vektor Reset - hanya mengatur interupsi dan rutin layanan kemudian ; mengulang selamanya...

Page 39: mikrokontrolleravr-121108060828-phpapp01

39

Reset: ldi TEMP,low(RAMEND) ; Atur penunjuk stack ke akhir RAM out SPL,TEMP ldi TEMP, high(RAMEND) out SPH, TEMP

ser TEMP ; Atur TEMP menjadi $FF menjadi... out DDRB,TEMP ; ...atur arah data sebagai "keluaran" out PORTB,TEMP ; ...semua lampu MATI!

out PORTD,TEMP ; ...semua high untuk pullup pada masukan ldi TEMP,(1<<DDD6) ; hanya bit D6 saja sebagai keluaran, out DDRD,TEMP ; ...keluaran untuk piezo buzzer pada pin D6

; atur int0 dan int1

ldi TEMP,(1<<INT0)+(1<<INT1) ; atur int masks 0 dan 1 out GIMSK,TEMP ldi TEMP,$0f ; interrupsi t0 dan t1 hanya pada rising edge saja out MCUCR,TEMP ldi TIME,$00 ; Mulai dari 0

sei ; aktifkan interupsi dan go...!

loop: rjmp loop ; Mengulang selama-lamanya...

;--------------------------------------------------------------------------;; Vektor Int0 - menurunkan pencacahan

IntV0: dec TIME ; turunkan nilai TIME rjmp Int01 ; lompat ke kode untuk menampilkan hasil

;-------------------------------------------------------------------------- ;; Vektor Int1 - menaikkan pencacahan

IntV1: inc TIME ; naikkan nilai TIME

Int01: mov r0,TIME ; tampilkan pada LED di PORT B com r0 out PORTB,r0 reti

Baris pertama digunakan untuk menyertakan berkas 8515def.inc, sehingga semua nama register dan I/O akan dikenal oleh assembler. Pada baris berikutnya didefinisikan tabel vektor interupsi, pada $0000 diletakkan vektor reset. Ini adalah lokasi saat mikrokontoler bangun di pagi hari, segalanya berawal dari lokasi ini. Selain itu, juga dilakukan pengaturan vektor INT0 dan INT1 serta rutin untuk menghandelnya diberi nama IntV0 dan IntV1,berturut-turut. Selanjutnya dideklarasikan 3 variabel yang digunakan dalam program ke register r16, r17 dan r18 yang masing-masing panjangnya 1 byte saja!

Page 40: mikrokontrolleravr-121108060828-phpapp01

40

Label RESET Label RESET mengandung semua kode insialisasi, dijalankan saat mikrokontoler dihidupkan atau saat reset. 4 baris pertama digunakan untuk mengatur stack, sebagaimana telah dijelaskan sebelumnya. Perhatikan bagaimana instruksi ldi (load immediate) digunakan untuk menyimpan nilai sementara sebelum nilai tersebut disimpan pada lokasi yang sesungguhnya. Low() dan High() merupakan makro yang digunakan untuk mengembalikan nilai dari argumen-nya, yang merupakan lokasi memori yang didefinisikan di berkas def.

Kemudian, 6 baris berikutnya mengatur register arah data PORTB dan PORTD, yaitu DDRB dan DDRD. Semua bit PORTB sebagai keluaran, sehingga DDRB = $FF, sedangkan pada PORTD, semua bit kecuali bit 6 sebagai masukan, karena bit-6 nantinya bisa dikembangkan untuk memberikan sinyal keluaran. Perhatikan instruksi:

ldi Temp, (1<<DDD6) artinya “simpankan ke register TEMP nilai byte 1 yang digeser DDD6 ke kiri”. Apa artinya DDD6? Dari berkas def, kita temukan bahwa nilai ini adalah 6 dan artinya menunjuk pada bit ke-6 dari register arah PORTD (DDRD). Nilai disimpan kedalam TEMP kemudian ke dalam DDRD, sehingga DDRD menyimpan 01000000. 6 baris selanjutnya digunakan untuk mengatur INT0 dan INT1 dengan memberikan nilai-nilai tertentu pada register GIMSK dan MCUCR serta menyiapkan register TIME dengan data $00, dan diakhiri instruksi sei untuk mengaktifkan seluruh interupsi. Label LOOP Label LOOP hanya berisi panggilan ke dirinya sendiri, mengulag terus menerus selama-lamanya. Label IntV0 Blok ini digunakan untuk menurukan nilai TEMP dengan instruksi dec. Kemudian lompat ke label Int01 untuk menampilkan hasilnya pada LED. Label IntV1 Blok ini digunakan untuk menaikkan nilai TEMP dengan instruksi inc kemudian menampilkan hasilnya pada LED, yaitu masuk ke label Int01.

Label Int01 Disinilah register TEMP ditampilkan hasilnya ke LED, karena untuk menghidupkan LED harus menggunakan logika 0, maka sebelumnya TEMP di-negasi dulu melalui r0 menggunakan instruksi com (complement). Jangan lupa siapkan berkas projek-nya untuk membuat rangkaian eksternal mikrokontroler. ; ************************************************************ ; PROJECT: ; AUTHOR: ; ************************************************************

Page 41: mikrokontrolleravr-121108060828-phpapp01

; Micro + software running; ------------------------------------------------------------.MICRO "AT90S8515" .PROGRAM "intr01.asm" .TARGET "intr01.hex"

.TRACE ; Activate micro trace

; Following lines are optional; if; exactly these values are taken by default; ------------------------------------------------------------.POWER VDD=5 VSS=0 ; Power nodes.CLOCK 1meg ; Micro clock.STORE 250m ; Trace (micro+signals) storage time

; Micro nodes: RESET, PA0; Define here the hardware around the micro; ------------------------------------------------------------K0 VSS NODE1 R1 PD2 NODE1 1k R2 NODE1 VDD 1K

K1 VSS NODE2 R3 PD3 NODE2 1k R4 NODE2 VDD 1K

D1 VDD n0 ; Like in real life, with a resistor.D2 VDD n1 D3 VDD n2 D4 VDD n3 D5 VDD n4 D6 VDD n5 D7 VDD n6 D8 VDD n7

R5 n0 PB0 1K ; Voltage drop seen at PB0R6 n1 PB1 1K R7 n2 PB2 1K R8 n3 PB3 1K R9 n4 PB4 1K R10 n5 PB5 1K R11 n6 PB6 1K R12 n7 PB7 1K

Gunakan Control Panel untuk melakukan60, gunakan K0 dan K1 untuk

Gambar 60. Control Panel untuk Eksperimen

ng--------------------------------------

tivate micro trace

tional; if not included re taken by default--------------------------------------wer nodescro clockace (micro+signals) storage time

0-PA7, PB0-PB7, PC0-PC7, PD0-PD7, ACO, TIM1OVFre around the micro--------------------------------------

in real life, with a resistor.

age drop seen at PB0

uk melakukan simulasi, sebagaimana ditunjukkan pada Gambark INT0 dan INT1 serta perhatikan LED D1

ar 60. Control Panel untuk Eksperimen-5

41

--

--

CO, TIM1OVF

--

ukkan pada Gambars/d D8-nya.

Page 42: mikrokontrolleravr-121108060828-phpapp01

42

II.f. Eksperimen-6: Penggunaan Interupsi Pewaktu/Pencacah Setelah sukses mencoba program interupsi sebelumnya, kali ini program interupsi akan kita modifikasi dengan menambahkan satu interupsi lagi, yaitu interupsi pewaktu/pencacah (Timer/Counter0). Jika ada perangkat kerasnya, pin PD6 bisa disambungkan ke speaker sehingga bisa didengarkan hasilnya, menggunakan VMLAB digunakan scope dengan instruksi spice plot untuk menggambarkan gelombangnya. Interupsi Limpahan Pewaktu

AT90S8515 (juga AVR lainnya) memiliki dua pewaktu/pencacah, yang satu 8-bit sedangkan lainnya 16-bit. Artinya, kedua pewaktu/pencacah tersebut bisa melakukan pencacahan mulai dari suatu nilai tertentu (yang kita tentukan) hingga nilai maksimum-nya (256 dan 65535, masing-masing). Kemudian akan menghasilkan interupsi limpahan (jika pencacahan dilanjutkan hingga batas maksimal tersebut), jika interupsi yang terkait diaktifkan. Saat terjadi limpahan, pencacah/pewaktu akan tetap melakukan pencacahan, mulai dari awal (0) hingga batasan maksimal-nya. Dengan demikian, jika Anda ingin pencacahan tidak dimulai dari 0 tetapi nilai lain yang Anda tentukan, maka program Anda buat sedemikian rupa sehingga pencacah akan mereset bukan ke nilai 0 tetapi ke nilai yang Anda tentukan. Apa yang akan kita lakukan? Cukup tambahkan 3 blok kode:

1. Vektor interupsi lainnya, untuk interupsi limpahan Timer0: OVF0addr;2. Kode inisialisasi untuk pewaktu/pencacah 0: TIMSK, TCCR0 dan TCNT0;3. Subrutin penghandel interupsi.

OVF0addr Ini adalah nama yang sudah tercakup di dalam berkas 8515def.inc yang berupa lokasi dimana vektor interupsi harus berada (silahkan cek pada berkas 8515def.inc). Kita tambahkan dua baris berikut ke dalam program sebelumnya: ; -- vektor interupsi yang baru - .org OVF0addr

rjmp TimerV0 ; vektor limpahan T/C0

TIMSK, TCCR0 dan TCNT0 Ketiga register ini digunakan untuk menyiapkan interupsi limpahan pewaktu kita. TCCR0 digunakan untuk mengendalikan operasi pewaktu/pencacah 0. Cacahan akan naik pada setiap sinyal detak pada masukan pewaktu yang bersangkutan. Tetapi masukan detak dapat dipilih dan diskala-kan dengan N. Yang perlu diperhatikan dalam hal ini adalah 3 bit pertama pada TCCR0 sebagaimana ditunjukkan pada Gambar 61.

Gambar 61. Perhatikan 3 bit pertama pada TCCR0 untuk pemilihan sumber datak

Page 43: mikrokontrolleravr-121108060828-phpapp01

43

Tabel yang ditunjukkan pada Gambar 62 digunakan sebagai acuan isi CS00, CS01 dan CS02 untuk memilih sumber detaknya.

Gambar 62. Pemilihan sumber detak TIMSK merupakan register interupsi pewaktu/pencacah yang digunakan untuk mematikan dan mengaktifkan interupsi pewaktu/pencacah, yang juga mirip dengan GIMSK,sebagaimana ditunjukkan pada Gambar 63.

Gambar 63. Register TIMSK

Yang perlu diperhatikan pada register TIMSK ini adalah sebuah bit khusus yang dinamakan sebagai “Timer/Counter0 Overflow Interrupt Enable” yang disingkat sebagai TOIE0 dan ditemukan pada posisi bit ke-1. Untuk mengaktifkan, cukup tuliskan ‘1’ ke bit ini, demikian juga untuk mematikan, gunakan logika ‘0’. TCNT0 merupakan register pewaktu/pencacah yang sesungguhnya, di register inilah pewaktuan atau pencacahan dilakukan, tidak bit khusus di dalam register ini. Register ini bisa dibaca/tulis, dengan demikian bisa kita isi dengan sembarang nilai awal sesuai dengan kebutuhan (untuk program kita digunakan 128 desimal atau $80). Penjelasan program interupsi pewaktu/pencacah 0 Jika PD6 dihubungkan dengan speaker maka akan terdengar suara. Saat pewaktu/pencacah 0 melimpah akan men-togel pin PD6, hasilnya speakar akan berbunyi dengan frekuensi dasar yang proporsional dengan frekuensi pin yang di-togel. Frekuensi dasarnya:

CLK/2*Praskala*(256-TIME) Dengan TIME adalah nilai saat ini pada register TIME (=r16). Kedua tombol K0 dan K1 akan berpengaruh pada frekuensi dasar pin PD6 dengan demikian suara yang dihasilkan bisa berbeda-beda.

Page 44: mikrokontrolleravr-121108060828-phpapp01

44

Bagaimana rumus frekuensi dasarnya? Pewaktu/pencacah mencacah naik dari suatu nilai tertentu setiap siklus detak hingga melimpah (overflow). Kemudian nilai pewaktu/pencacah direset dan proses berulang lagi dari nilai reset tersebut. Perhatikan ilustrasi berikut, jika limpahan terjadi setiap siklus detak CLK dan digunakan untuk mem-flip nilai suatu pin, maka akan diperoleh frekuensi dasar:

CLK/2

2 Hz

4 clockmelimpah melimpah melimpah melimpah

karena register pewaktu/pencacah panjang-nya 8 bit, maka pencacah akan mencacah dari suatu nilai awal (misalnya TIME) hingga batasan maksimum (255 atau $FF), sehingga persamaan menjadi…

CLK/2 * (256-TIME) Selain itu ada juga praskala (=N), maka persamaan berubah menjadi…

CLK/2 * N *(256-TIME)

Perhatikan program lengkap berikut… ;--------------------------------------------------------------------------; Nama: intr02.asm ; Judul: Program Interupsi sederhana pada AVR + Timer0 ;--------------------------------------------------------------------------.include "C:\VMLAB\include\8515def.inc"

; Vektor layanan Interupsi

.org $0000 rjmp Reset ; vektor Reset

.org INT0addr rjmp IntV0 ; vektor INT0 (interupsi eksternal dari pin D2)

.org INT1addr rjmp IntV1 ; vektor INT1 (interupsi eksternal dari pin D3)

; -- vektor interupsi yang baru - .org OVF0addr

rjmp TimerV0 ; vektor limpahan T/C0

;-------------------------------------------------------------------------- ;; Definisi register untuk kalang utama

.def TIME=r16

.def TEMP=r17

.def BEEP=r18

;----------------------------------------------------------------- ;

Page 45: mikrokontrolleravr-121108060828-phpapp01

45

; Vektor Reset - hanya mengatur interupsi dan rutin layanan ; kemudian mengulang selamanya...

Reset: ldi TEMP,low(RAMEND) ; Atur penunjuk stack ke akhir SRAM out SPL,TEMP ldi TEMP, high(RAMEND) out SPH, TEMP

ser TEMP ; Atur TEMP dengan nilai $FF untuk... out DDRB,TEMP ; ...mengatur arah data sebagai "keluaran" out PORTB,TEMP ; ...semua lampu MATI!

out PORTD,TEMP ; ...semua HIGH untuk masukan ldi TEMP,(1<<DDD6) ; kecuali bit D6 sebagai keluaran out DDRD,TEMP ; ...keluaran ke piezo buzzer melalui pin D6

; set up int0 and int1 ldi TEMP,(1<<INT0)+(1<<INT1) ; set int masks 0 dan 1 out GIMSK,TEMP

ldi TEMP, 0x0F ; interrupsi t0 dan t1 pada rising edge out MCUCR,TEMP

;-- blok baru -- ldi TIME, 0x80 ; mulai dari 128.

out TCNT0,TIME ; set Timer/counter juga. ldi TEMP,(1<<TOIE0) ; aktivasi interupsi limpahan timer 0 out TIMSK,TEMP

ldi TEMP, 0x02 ; praskala detak = clk/8 out TCCR0,TEMP ldi BEEP, 0x00

sei ; aktivasi seluruh interupsi...

loop: rjmp loop ; mengulang selama-lamanya...

;----------------------------------------------------------------- ;; Vektor Int0 - menurunkan cacahan

IntV0: dec TIME ; turunkan cacahan rjmp Int01 ; lompat ke INT01 untuk menampilkan hasil ke LED

;----------------------------------------------------------------- ;; Vektor Int1 - menaikkan cacahan

IntV1: inc TIME ; naikkan cacahan

Int01: mov r0,TIME ; tampilkan ke LED com r0 out PORTB,r0 reti

;----------------------------------------------------------------- ;

Page 46: mikrokontrolleravr-121108060828-phpapp01

46

; Vektor Timer 0 - togel bit PD6

TimerV0: out TCNT0,TIME ; reset pewaktu TCNT0 <- TIME

com BEEP ori BEEP,0xBF ; bit 6 saja; lainnya HIGH untuk pullup out PORTD,BEEP

reti ; penting buanget - harus reti ;untuk set interrupt flag

Jangan lupa untuk membuat rangkaian eksternalnya menggunakan project… ; ************************************************************ ; PROJECT: ; AUTHOR: ; ************************************************************

; Micro + software running ; ------------------------------------------------------------ .MICRO "AT90S8515" .PROGRAM "intr02.asm" .TARGET "intr02.hex"

.TRACE ; Activate micro trace

; Following lines are optional; if not included ; exactly these values are taken by default ; ------------------------------------------------------------ .POWER VDD=5 VSS=0 ; Power nodes .CLOCK 1meg ; Micro clock .STORE 250m ; Trace (micro+signals) storage time

; Micro nodes: RESET, PA0-PA7, PB0-PB7, PC0-PC7, PD0-PD7, ACO, TIM1OVF ; Define here the hardware around the micro ; ------------------------------------------------------------ K0 VSS NODE1 R1 PD2 NODE1 1k R2 NODE1 VDD 1K

K1 VSS NODE2 R3 PD3 NODE2 1k R4 NODE2 VDD 1K

D1 VDD n0 ; Like in real life, with a resistor. D2 VDD n1 D3 VDD n2 D4 VDD n3 D5 VDD n4 D6 VDD n5 D7 VDD n6 D8 VDD n7

Page 47: mikrokontrolleravr-121108060828-phpapp01

R5 n0 PB0 1K ; Voltage drop seen at PB0R6 n1 PB1 1K R7 n2 PB2 1K R8 n3 PB3 1K R9 n4 PB4 1K R10 n5 PB5 1K R11 n6 PB6 1K R12 n7 PB7 1K

.plot v(PD6)

Hasilnya dilihat melalui control panel dan scope, sebagaimana ditunjukkan pada Gambar

Gambar 64. Scope pada VMLAB untuk eksperimen

Catatan: Saran dan masukan untuk ebook ini silahkan kirim email ke

age drop seen at PB0

ol panel dan scope, sebagaimana ditunjukkan pada Gambar

64. Scope pada VMLAB untuk eksperimen-6

ook ini silahkan kirim email ke [email protected]

--- selesai ---

47

n pada Gambar 64.

id, terima kasih!

Page 48: mikrokontrolleravr-121108060828-phpapp01

48

INFORMASI TENTANG PELATIHAN MIKROKONTROLER

Hanya dengan minimal 10 JAM (karena langsung dibimbing oleh Pakarnya) Anda bisa memahami konsep dasar dan membuat aplikasi mikrokontroler

(AT89/AVR)!

Ditambah dengan konsultasi gratis Anda bisa meningkatkan kemampuan Anda dalam mikrokontroler AVR/AT89!

Anda juga bisa menghasilkan INCOME TAK TERBATAS

dengan memanfaatan kemampuan Anda di bidang mikrokontroler!

Pelatihan yang saya selenggarakan mampu memberikan peserta konsep dasar dan tip/trik pembuatan aplikasi mikrokontroler hanya dengan 4 sesi x 2,5 jam = 10 jam!

Jika Anda merasa kurang, saya juga memberikan konsultasi gratis selama 3 bulan!

Informasi dan pemesanan: akses ke http://agfi.staff.ugm.ac.id atau [email protected] pelatihan sehari workshop AVR ini silahkan hubungi: [email protected]

Didukung oleh:

-o-