Your SlideShare is downloading. ×
Mikrokontroller avr
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Mikrokontroller avr

1,065
views

Published on

microcontrollers

microcontrollers


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,065
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
192
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. e-book Handout Workshop Pemrograman AVR (AT90S2313/AT90S8515) oleh Agfianto Eko Putra agfi@ugm.ac.id 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… 1
  • 2. Handout Workshop Pemrograman AVR (AT90S2313/AT90S8515) Disusun oleh: Agfianto Eko Putra – agfi@ugm.ac.id (tersedia CDROM pendukung, lihat pada bagian informasi di akhir ebook ini)Mikrokontroler Atmel’s AVR® merupakan jenis mikrokontroler RISC yang menjalankaninstruksi siklus tunggal dan memiliki struktur I/O yang bisa mengurangi kebutuhankomponen-komponen eksternal. DAFTAR ISII. 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 ................................................................................................... 21II. 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 2
  • 3. I. PENDAHULUAN MIKROKONTROLER AVR (AT90S2313) OKONTROLERI.a. Arsitektur Mikrokontroler Atmel’s AVR trolerMikrokontroler Atmel’s AVR secara umum memiliki beberapa bagian penting, VRsebagaimana arsitektur dasarnya ditunjukkan pada Gambar 1. Sedangkan inti CPU sarnya dangkan(CPU core) dan periferalnya ditunjukkan pada Gambar 2 dan 3. a Gambar 1. Arsitektur dasar Mikrokontroler Atmel’s AVR VRJika diperhatikan pada arsitektur tersebut terdapat 3 macam register: tektur er: 1. Register serbaguna atau General Purpose Register; na 2. Register status atau SREG – Status Register, dan tau 3. Register periferal atau Periphery RegistersYang masing-masing memilki fungsi atau kegunaan tertentu yang akan kita lihat milki ngpada pasal Tentang Register Mikrokontroler Atmel’s AVR. erDemikian juga dengan bagian periferal AVR, sebagaimana ditunjukkan pada Gambar ian kan3, terdapat berbagai macam periferal yang juga akan kita lihat pada pasal-pasal yang m a pasalmembahas periferal. 3
  • 4. Gambar 2. CPU Core Mikrokontroler Atmel’s AVRGambar 3. Periferal Mikrokontroler Atmel’s AVR 4
  • 5. I.b. Tentang Register-register AVR egisterCPU mengandung 32x8 bit register serbaguna (GPR – General Purpose Register), t Register)sebagaimana ditunjukkan pada Gambar 4 dengan waktu akses satu siklus detak 4,tunggal. Ke-32 register GPR ini langsung terhubung dengan ALU, membolehkan dua Rregister bebas (independen) dapat diakses dalam sebuah in en) instruksi tunggal yang ksidikerjakan dalam satu siklus detak tunggal. s Gambar 4. Register SerbagunaKhusus register R26 s/d R31 memiliki fungsi tambahan selain sebagai GPR, insebagaimana ditunjukkan pada Gambar 4 dan 5, register register-register ini juga berfungsisebagai penunjuk alamat untuk pengalamatan tak tak-langsung pada Ruang Data. Padamode pengalamatan lainny register alamat tak-langsung X, Y dan Z ini memiliki ya,fungsi sebagai fixed displacement, automatic increment dan decrement. cement ment Gambar 5. Register X, Y dan Z 5
  • 6. Gambar 6. Ringkasan Register ngkasan Register-register Periferal dan Status tatus Gambar 7. Register StatusRegister Status pada AVR (SREG) sebagaimana ditunjukkan pada gambar 7, R (SREG),tersimpan pada ruang lokasi I/O $3F atau $5F. Menyimpan 8 macam status: si m • I – Global Interrupt Enable • T – Bit Copy Storagee • H – Half Carry Flag 6
  • 7. • S – Sign Bit, S = N (+) V +) • V – Two’s Complement Overflow Flag ent • N – Negative Flag • Z – Zero Flag • C – Carry FlagCatatan penting: Register status – SREG, tidak secara otomatis menyimpan danmengembalikan lagi isi-isinya selama proses pemanggilan interupsi, hal ini harus nya psi,dilakukan melalui program atau perangkat lunak secara manual. Gambar 8. Register mbar Register-register Periferal 7
  • 8. I.c. Mode Pengalamatan AVR dan Set Instruksi nPada Gambar 9 ditunjukkan ringkasan mode pengalamatan yang dikenal pada kan angMikrokontroler Atmel’s AVR. Mode pengalamatan ini didasarkan pada jenis sumber R. adadan tujuan dari suatu instruksi, apakah melalui register, memori, data langsung atau uksi, ataI/O. Sedangkan set instruksi ditunjukkan pada Gambar 18, 19, 20 dan 21. si an Gambar 9. Ringkasan Mode Pengalamatan Atmel’s AVR VR Gambar 10. Pengalamat Register Tunggal Langsung 0. g Gambar 11. Pengalamatan Dua Register Langsung 1. g Gambar 12. Pengalamatan I/O Langsung bar 8
  • 9. Gambar 13. Pengalamatan Data Langsung bar Gambar 14. Pengalamatan Tak bar Tak-langsungGambar 15. Pengalamatan Tak galamatan Tak-langsung dengan post-increment crementGambar 16. Pengalamatan Tak galamatan Tak-langsung dengan pre-decrement rementGambar 17. Pengalamatan Tak ngalamatan Tak-langsung dengan displacement cement Gambar 18. Ringkasan Instruksi Aritmetika dan Logika ka 9
  • 10. Gambar 19. Ringkasan Instruksi Bit dan Test arGambar 20. Ringkasan Instruksi Pencabangan r 10
  • 11. Gambar 21. Ringkasan Instruksi Transfer Data rGambar 22. Ringkasan Operator Ekspresi (kiri) dan Pengarah (Directive – Kanan) perator ective 11
  • 12. I.d. Port-port I/OSemua port AVR memiliki fungsionalitas Read Read-Modify-Write yang sesungguhnya saat esungguhnyadigunakan sebagai port-port I/O digital. Artinya, arah sebuah pin pada port dapat ortdiubah tanpa harus merubah arah pin ah pin-pin port yang lain menggunakan instruksi SBI akandan CBI (lihat kembali Gambar 19). Hal ini juga berlaku untuk mengubah nilai kpenggerak (jika dikonfigurasi sebagai keluaran) atau mengaktifkan/mematikan urasi ktifkan/mematikanresistor pull-up (jika dikonfigurasi sebagai masukan). Ringkasan dan gambar onfigurasi sanskematik untuk port B dan D pada AVR AT9 AT90S2313 ditunjukkan pada Gambar 23 dan da24. Gambar 23. R Ringkasan port B dan D pada AVR AT90S2313 2313Efek DDBn pada pin-pin port B: rt 12
  • 13. Efek DDDn pada pin-pin port D: rt Gambar 24. Rangkaian pin pada port mbarFungsi alternatif port B: • PINB7 – SCK, pin masukan detak untuk up/downloading memori, mori, • PINB6 – MISO, pin data keluaran untuk up/downloading memori, mori, • PINB5 – MOSI, pin data masukan untuk up/downloading memori, emori, • PINB3 – OC1, keluaran cocok perbandingan (compare match), ran h • PINB1 – AIN1, masukan negatif komp ukan komparator analog, • PINB0 – AIN2, masukan positif komparator analog. ukanFungsi alternatif port D: • PIND6 – ICP, pin capture masukan untuk Timer 1, apture • PIND5 – T1, pin masukan sumber detak untuk Timer 1, sukan • PIND4 – T0, pin masukan sumber detak untuk Timer/Counter 0, sukan r • PIND3 – INT1, sumber interupsi eksternal 1, ber • PIND2 – INT0, sumber interupsi eksternal 0, ber • PIND1 – TxD, mengirimkan data serial, sebagai pin keluaran data untuk ngirimkan uaran UART, • PIND0 – RxD, menerima data serial, sebagai pin masukan data untuk UART, erima ata 13
  • 14. I.e. InterupsiMikrokontroler AVR menyediakan 10 sumber interupsi selain RESET. Interupsi- ediakan RESETinterupsi ini dan vektor RESET masing-masing memiliki vektor program yang terpisah SET ramdi dalam ruang memori program. Semua interupsi berhubungan dengan bit an bit-bitaktivasi individual yang harus di arus di-set bersamaan dengan bit-I dalam SREG untuk alammengaktifkan interupsi yang bersangkutan. Ringkasan vektor-vektor interupsi dan ng ktorRESET ditunjukkan pada Gambar 25. Setup program untuk inisialisasi interupsi isialisasiditunjukkan pada Gambar 26. Gambar 25. Ringkasan vektor-vektor interupsi dan reset esetCatatan: Bit-I akan di-nol-k secara perangkat keras (hardware) setelah munculnya kan ssuatu interupsi dan akan di di-set oleh instruksi RETI untuk mengaktifkan interupsi gaktifkanyang muncul berikutnya (jika ada). ka Gambar 26. Setup program yang sering untuk alamat vektor reset dan interupsi am et 14
  • 15. Gambar 27. Tiga sumber RESET pada AT90S2313I.f. Pencacah/Pewaktu 0 dan 1 Gambar 28. Bagan P gan Pewaktu/Pencacah0 8-bit (Timer/Counter0) unter0)Pewaktu/Pencacah0 8-bit dapat menggunakan sumber detak dari CK, CK praskalamaupun pin eksternal. Pengaturan interupsi untuk Timer/Counter0 melalui TIMSK ngaturan 0atau Timer/Counter Interrupt Mask Register. Flag limpahan ada di dalam TIFR atau upt 15
  • 16. Timer/Counter Flag Register, sedangkan sinyal kontrol ditemukan pada TCCR0 atau er,Timer/Counter0 Control Register. gister. Gambar 29. Bagan Pewaktu/Pencacah1 16 an 16-bit (Timer/Counter1) unter1)Timer/Counter1 16-bit mendapatkan sumber detak dari tiga macam, yaitu CK, CK ndapatkan am,praskala atau pin eksternal. Pengaturan interupsi untuk Timer/Counter0 melalui nal. /Counter0TIMSK atau Timer/Counter Interrupt Mask Register. Flag limpahan ada di dalam er hanTIFR atau Timer/Counter Flag Register, sedangkan sinyal kontrol ditemukan pada lTCCR1 atau Timer/Counter1 Control Register. r1 16
  • 17. Gambar 30. Penggunaan Timer/Counter1 bar Gambar 31. Ilustrasi sumber detak ambar 17
  • 18. Gambar 32. Bagan Sumber Detak untuk Timer/Counter0 dan 1 ganI.g. Pewaktu WatchdogPewaktu Watchdog mendapatkan detak secara terpisah dari osilator on patkan or on-chip 1 MHz.Instruksi WDR digunakan untuk mereset pewaktu Watchdog ( n (harus dijalankanselama periode waktu tertentu sebagaimana diberikan oleh praskalar WD entu ar WD). Gambar 33. Bagan pewaktu watchdog mbar 18
  • 19. Gambar 34. Penggunaan pewaktu watchdog ar G Gambar 35. Praskalar Watchdog 19
  • 20. I.h. Komparator AnalogKomparator analog membandingkan nilai pada masukan positif PB0 atau AIN0 bandingkan fdengan masukan negatif PB1 atau AIN1. Jika masukan AIN0 > AIN1 maka nilaikeluarannya adalah ACO ‘1’. Bagan dan penggunaan ko omparator analogditunjukkan pada Gambar 3 dan 37. 36 Gambar 36. Bagan Komparator Analog mbar Gambar 37. Penggunakan Komparator analog r 20
  • 21. I.i. Komunikasi SerialKomunikasi serial dilakukan oleh unit UART – Universal Asynchronous Receiver and n ousTransmitter yang memiliki beberapa fitur: • Generator baudrate; • Baudrate yang tinggi;i; • Data 8 atau 9 bit; • Penapis derau; • Deteksi Overrun; • Deteksi Framing Error; or; • Deteksi False Start Bit; • Tiga macam interupsi terpisah: Rx selesai, Tx selesai dan Register data Tx psi kosong. Gambar 38. Bagan Komunikasi serial UART pada Mikrokontroler AVR rolerGenerator baudrate, sebagaimana ditunjukkan pada Gambar 39, merupakan agaimanapembagi frekuensi yang menghasilkan baudrate berdasarkan persamaan sebagai ersamaanberikut: 21
  • 22. • BAUD = baudrate; • fck = frekuensi detak kristal; k • UBBR = isi dari Register UART Baud Rate; sterUntuk frekuensi kristal standard, baudrate yang biasa digunakan dihasilkan nakanmenggunakan pengaturan pada UBRR. Menggunakan baudrate yang memiliki error anglebih dari 1% sama sekali tidak disarankan. Semakin besar error-nya semakin rentan yaterhadap derau. Perhatikan tabel pada Gambar 39 untuk penentuan baudrate. n Gambar 39. Isi UBBR berkaitan dengan nilai baudrate . teNB:Keterangan lengkap pada bagian ini silahkan merujuk pada datasheet AT90S2313. et 22
  • 23. II. PEMROGRAMAN MIKROKONTROLER AVR (AT90S2313) KROKONTROLERII.a. Eksperimen-1: Proses aritmetika sederhana sesMembuat proyek baru dengan VMLAB 3.10 nganUntuk memahami pemrograman mikrokontroler AVR (khususnya AT90S2313) ograman nyagunakan metode Learning by Doing Aktifkan VMLAB vers 3.0 sehingga ng Doing. rsiditampilkan jendela utama sebagaimana ditunjukkan pada Gambar 40. Gambar 40. Jendela utama VMLAB 3.0 mbarVMLAB menggunakan sistem proyek, dengan demikian langkah awal atau langkah em walpertama adalah membuat proyek baru dengan cara memilih menu Project NewProject sehingga ditampilkan jendela dialog sebagaimana ditunjukkan pada Gambar kan kan41.Step 1: Beri nama proyek-nnya, misalnya coba01;Step 2: Pilih mikrokontroler yang akan digunakan, VMLAB mendukung hampir er endukung seluruh keluarga besar mikrokontroler Atmel’s AVR, dalam hal ini pilih lam AT90S2313;Step 3: Pilih perangkat lunak kompilasi, sementara biarkan saja dulu seperti itu nak karena akan digunakan pemrograman Bahasa Assembly AVR; akan R;Step 4: Tambahkan file-file yang digunakan, gunakan tombol e Add this untuk menambahkan file-file sumber; 23
  • 24. Step 5: Jangan lupa klik Ok sehingga akan dihasilkan dua berkas, yaitu project dan assembler-nya, sebagaimana ditunjukkan pada Gambar 42. bagaimana Gambar 41. Jendela Dialog Create New Project Gambar 42. Hasil dari Create new project ar 24
  • 25. Menuliskan program Assembly AVRSelanjutnya tuliskan program assembler berikut ini, keterangan lengkap ada di dalamacara workshop:; ******************************************************; BASIC .ASM template file for AVR; ******************************************************.include "C:VMLABinclude2313def.inc"; Definisikan variabel disini...;.def a = r16.def b = r17.def x = r18.def y = r19.def z = r20reset: 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 $000Autama: 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 jendelaMessage akan ditampilkan: 25
  • 26. Melakukan simulasi dengan VMLAB 3.10 anSelanjutkan dilakukan simulasi untuk melihat perubahan asi perubahan-perubahan isi register, aktifkan ijendela register, sebagaimana ditunjukkan pada Gambar 43, dengan menekan Alt+Shift+R a ekanatau menggunakan menu View ew Registers/Flags. G Gambar 44. Jendela Registers/FlagsLakukan simulasi langkah-demiemi-langkah dengan menekan F6, perhatikan perubahan isi kanregister yang terkait sebagaimana contohnya ditunjukkan pada Gambar 44 dan 45. mana 44 26
  • 27. Gambar 44. Hasil simulasi…Gambar 45. Hasil simulasi… 27
  • 28. II.b. Eksperimen-2: Proses aritmetika kompleksKali ini dibuat program aritmetiks yang agak lebih kompleks dari sebelumnya,tuliskan dan lakukan simulasi untuk program berikut serta jangan lupa untuk melihatperubahan-perubahan yang terjadi pada register yang terkait.; ******************************************************; BASIC .ASM template file for AVR; ******************************************************.include "C:VMLABinclude2313def.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 ceka_lbhkecil_b: sub b,acek: cp a,b brne startulang: 28
  • 29. rjmp ulang Gambar 46. Perhatikan juga perubahan pada SREG Gambar 47. Perhatikan juga perubahan pada SREG 29
  • 30. II.c. Eksperimen-3: Penggunaan I/O untuk LEDSekarang simulasi menggunakan LED pada Control Panel VMLAB (Gambar 48). Ketikprogram assembler berikut, lakukan simulasi dan amati hasilnya.; ******************************************************; BASIC .ASM template file for AVR; ******************************************************.include "C:VMLABinclude2313def.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 ulangMenyiapkan berkas project untuk rangkaian eksternalKemudian buat rangkaian di sekitar mikrokontroler menggunakan berkas dengan formatSPICE sebagai berikut…; ************************************************************; PROJECT:; AUTHOR:; ************************************************************; Micro + software running; ------------------------------------------------------------.MICRO "AT90S2313".PROGRAM "coba03.asm" 30
  • 31. .TARGET "coba03.hex".TRACE ; Activate micro trace tivate; Following lines are optional; if not included tional;; exactly these values are taken by default re; ------------------------------------------------------------ -------------------------------------- --.POWER VDD=5 VSS=0 ; Power nodes wer.CLOCK 1meg ; Micro clock cro.STORE 250m ; Trace (micro+signals) storage time ace; Micro nodes: RESET, PB0 0-PB7, PD0-PD5, ACO, TIM1OVF; Define here the hardware around the micro re; ------------------------------------------------------------ -------------------------------------- --D1 VDD n0 ; Like in real life, with a resistor.D2 VDD n1D3 VDD n2D4 VDD n3D5 VDD n4D6 VDD n5D7 VDD n6D8 VDD n7R0 n0 PB0 1K ; Voltage drop seen at PB0 geR1 n1 PB1 1KR2 n2 PB2 1KR3 n3 PB3 1KR4 n4 PB4 1KR5 n5 PB5 1KR6 n6 PB6 1KR7 n7 PB7 1KNb: jika Anda belum memahami SPICE dan ingin belajar simulasi elektronika menggunakan ami nika SPICE, dapatkan ebooknya dan softwaren (versi student) gratis di… booknya softwarenya atis http://agfi.staff.ugm.ac.id/index.php?page=simul gfi.staff.ugm.ac.id/index.php?page=simul.Perhatikan, susunan LED adalah common anoda, sehingga untuk menghidupkan digunakan ah dupkanlogika ‘0’ bukan logika ‘1’. Gambar 48. Tampilan Control Panel ( (Alt+Shift+C) 31
  • 32. Gambar 49. Tampilan port I/O ( ar (Alt+Shift+I) Gambar 50. Hasil simulasi… 32
  • 33. II.d. Eksperimen-4: LED berjalanApa yang dilakukan oleh program ini??; ******************************************************; BASIC .ASM template file for AVR; ******************************************************.include "C:VMLABinclude2313def.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 0001ulang: 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 lagilanjut: lsl temp ; lakukan geser ke kiri rjmp ulang ; ulangi lagiBagaimana jika sekarang arah gerakan diubah? Bagaimana pula untuk animasi ping-pong?Atau animasi gerakan pingpong dua arah? Lakukan percobaan/modifikasi pada program… 33
  • 34. II.e. Eksperimen-5: Penggu ggunaan Interupsi Eksternal INT0 dan INT1Dasar-Dasar InterupsiInterupsi merupakan sebuah mekaniskme kontrol aliran yang diimplementasikan pada h lementasikanhampir semua kontroler, termasuk Atmel’s AVR. Pada aplikasi mikrokontroler yang ikrokontrolermelibatkan interaksi dengan dunia luar, banyak hal-hal yang terjadi pada saat yang n dibersamaan, artinya, tidak pada kondisi tersinkronisasi, inilah yang harus ditangani oleh ada arusmikrokontroler.Misalnya: sebuah tombol yang ditekan oleh pengguna, data ng data-data yang dibaca pada port gserial atau UART, cuplikan-cuplikan yang diambil dari ADC atau bahkan sebuah pewaktu uplikan anyang seakan-akan meneriakkan “euy… waktunya habis!!”. Semua kejadian ini perlu ditangani an noleh mikrokontroler.Selain menggunakan teknik polling, dimana mikrokontroler selalu bertanya ke setiap periferal olling, bertanyaapakah perlu dilayani atau tidak, kita bisa membuat agar periferal yang bersangkutan dak, g bersangkutan-lahyang akan memanggil mikrokontroler jika sudah tiba saatnya membutuhkan layanan. Hal ini kontroler kandinamakan sebagai “interupsi”, prosesor atau mikrokontrol akan menghentikan program i”, mikrokontroler ghentikanutama yang sedang dijalankan untuk memeriksa interupsi yang terjadi dan melakukan aksi n an aksi-aksi yang terkait, setelah itu, program utama dijalankan kembali.Struktur Program Terkendali dali-Interupsi Pada AVRKita sekarang akan menuliskan sebuah program yang terkendali an terkendali-interupsi dimana program psiutama tidak melakukan apapun kecuali menunggu terjadinya interupsi. Untuk AT90S8515 punakan digunakan dua interupsi eksternal yang diperoleh dari pin PD2 dan PD3, sebagaimana iditunjukkan pada Gambar 51. Gambar 51. Interupsi eksternal AT90S8515 barHal-hal penting yang perlu dituliskan dalam program: tuliskan 1. Mengatur lokasi lompatan vektor interupsi atan gunakan .org 2. Mengatur set interupsi yang benar untuk mengaktifkan interupsi yang diinginkan si melalui GIMSK; 3. Lakukan pengaturan seperlunya pada register kontrol MCUCR; eperlunya 4. Aktifkan interupsi secara global melalui SREG; araMengatur Lokasi Lompatan Vektor Interupsi dengan .org nBagian paling bawah dari memori program AVR, dimulai pada alamat 0x0000, sering atdisebut sebagai “Tabel vektor memori program dan program yang sesungguhnya harus or program” esungguhnyaberawal dari ruang ini.Tabel vektor digunakan untuk menyimpan vektor k vektor-vektor interupsi, yaitu suatu lokasi tujuanlompatan jika terjadi interupsi. Artinya, masing psi. masing-masing interupsi memiliki lokasi memori milikitertentu dan jika suatu interupsi terjadi, mikrokontroler akan melompat ke lokasi tersebut upsi tdan memeriksa apa yang ada di lokasi tersebut, misalnya untuk menemukan alamat dimana a ukankode-kode untuk menangani interupsi tersebut d disimpan, perhatikan Gambar 52 tentangringkasan tabel vektor interupsi pada AT90S8515. psi 34
  • 35. Pengarah .orgPada kode-kode assembly, pengarah .org digunakan untuk mengatur lokasi kode program.Pengarah ini akan memberitahukan assembler untuk men-set pencacah lokasi pada suatunilai absolut. Ini bukan set instruksi AVR, hanya sekedar perintah yang digunakan assembleruntuk memastikan bahwa kode program dipetakan secara benar pada saat membuat berkasbiner untuk AVR. Perhatikan Gambar 53. Gambar 52. Ringkasan Tabel Vektor 8515 Gambar 53. Contoh kodeLabel digunakan untuk menggantikan suatu angka absolut yang menyatakan suatu alamat.Yang perlu kita lakukan adalah memberitahukan assembler dimana lompatnya saat, 35
  • 36. misalnya, terjadi pemanggilan vektor reset (dengan instruksi rjmp reset dan resetmerupakan label).Harap dicatat bahwa baris pertama adalah penghandel reset. Di sinilah stack diatur.Stack digunakan untuk menyimpan alamat kembalian (return address) dalam kode programutama saat sebuah rutin interupsi atau subrutin dijalankan. Untuk sembarang layananinterupsi atau subrutin agar bisa kembali ke alamat awal dengan benar, stack harusditempatkan di luar dari ruang vektor. Secara default, nilai SP (penunjuk stack) di-inisialisasidengan nilai $0000, yang sama dengan lokasi tempat vektor reset berada, sehingga kitaperlu 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 (highbyte).Mengatur register GIMSKRegister GIMSK digunakan untuk mengaktifkan dan mematikan interupsi eksternal secaraindividual, sebagaimana ditunjukkan pada Gambar 54. Karena kita akan menggunakaninterupsi eksternal INT0 dan INT1 melalui tombol di PD2 dan PD3, maka kedua interupsieksternal ini diaktifkan melalui GIMSK pada bit 6 dan 7. Gambar 54. Pengaturan aktivasi interupsi pada GIMSKMengatur register MCUCRKita akan menggunakan bit 0, 1, 2 dan 3 pada register MCUCR, sebagaimana ditunjukkanpada Gambar 55, untuk mengendalikan interupsi yang berasal dari INT0 dan INT1. Bit-bitini digunakan untuk mengendalikan bagaimana interupsi eksternal dapat terjadi, apakah saatsisi 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 36
  • 37. Gambar 56. Menentukan jenis picuan untuk aktivasi interupsiKita akan menggunakan sisi naik dari tombol yang terpasang, sebagaimana ditunjukkanpada 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 PD3Anda perhatikan rangkaian di Gambar 57, normal akan terbaca sebagai logika ‘1’. Saattombol ditekan maka pada pin akan terbaca ‘0’. Sehingga interupsi akan terjadi saat tomboldilepas, terjadi perubahan dari 0 1.Mengaktifkan interupsi global dalam SREGUntuk mengaktifkan interupsi secara global, selain mengaktifkan secara individu, bit 7 padaregister SREG (register status) juga harus di-set untuk mengaktifkan interupsi secara globalatau keseluruhan, perhatikan posisi bit-7 pada SREG di Gambar 58. Gambar 58. Register SREG, gunakan instruksi sei agar bit 7 =1Semua bit pada SREG akan di-nol-kan saat reset dan dapat dibaca/tulis selama programberjalan. Hanya bit 7 yang diperhatikan untuk masalah interupsi ini, jika dibuat ‘1’, makaakan mengaktifkan seluruh interupsi, untuk itu digunakan instruksi khusus sei.Penjelasan program interupsi eksternal INT0 dan INT1Untuk VMLAB, digunakan tombol K0 dan K1 untuk masukan PD2 dan PD3 sebagaiinterupsi eksternal. Selain itu 8 LED dihubungkan ke PORTB sebagai tampilan eksternal. Saatprogram dijalankan, semua LED akan mati, jika dilakukan penekanan salah satu tombol,maka terjadi pencacahan naik atau pencacahan turun dan hasilnya ditunjukkan pada LED. 37
  • 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, jugadituliskan rutin-rutin pendek untuk menangani tombol (menghasilkan INT0 dan INT1) danbeberapa pengarah assembler, hanya itu saja…Oke inilah program kita menggunakan mikrokontroler AT90S8515…;--------------------------------------------------------------------------; Nam1: intr01.asm; Judul: Program Interupsi sederhana pada AVR;--------------------------------------------------------------------------.include "C:VMLABinclude8515def.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... 38
  • 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 pencacahanIntV0: dec TIME ; turunkan nilai TIME rjmp Int01 ; lompat ke kode untuk menampilkan hasil;--------------------------------------------------------------------------;; Vektor Int1 - menaikkan pencacahanIntV1: inc TIME ; naikkan nilai TIMEInt01: mov r0,TIME ; tampilkan pada LED di PORT B com r0 out PORTB,r0 retiBaris pertama digunakan untuk menyertakan berkas 8515def.inc, sehingga semua namaregister dan I/O akan dikenal oleh assembler. Pada baris berikutnya didefinisikan tabelvektor interupsi, pada $0000 diletakkan vektor reset. Ini adalah lokasi saat mikrokontolerbangun di pagi hari, segalanya berawal dari lokasi ini. Selain itu, juga dilakukan pengaturanvektor 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, r17dan r18 yang masing-masing panjangnya 1 byte saja! 39
  • 40. Label RESETLabel RESET mengandung semua kode insialisasi, dijalankan saat mikrokontoler dihidupkanatau saat reset. 4 baris pertama digunakan untuk mengatur stack, sebagaimana telahdijelaskan sebelumnya. Perhatikan bagaimana instruksi ldi (load immediate) digunakanuntuk menyimpan nilai sementara sebelum nilai tersebut disimpan pada lokasi yangsesungguhnya. Low() dan High() merupakan makro yang digunakan untuk mengembalikannilai dari argumen-nya, yang merupakan lokasi memori yang didefinisikan di berkas def.Kemudian, 6 baris berikutnya mengatur register arah data PORTB dan PORTD, yaitu DDRBdan DDRD. Semua bit PORTB sebagai keluaran, sehingga DDRB = $FF, sedangkan padaPORTD, semua bit kecuali bit 6 sebagai masukan, karena bit-6 nantinya bisa dikembangkanuntuk 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 artinyamenunjuk pada bit ke-6 dari register arah PORTD (DDRD). Nilai disimpan kedalam TEMPkemudian 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 dengandata $00, dan diakhiri instruksi sei untuk mengaktifkan seluruh interupsi.Label LOOPLabel LOOP hanya berisi panggilan ke dirinya sendiri, mengulag terus menerus selama-lamanya.Label IntV0Blok ini digunakan untuk menurukan nilai TEMP dengan instruksi dec. Kemudian lompat kelabel Int01 untuk menampilkan hasilnya pada LED.Label IntV1Blok ini digunakan untuk menaikkan nilai TEMP dengan instruksi inc kemudianmenampilkan hasilnya pada LED, yaitu masuk ke label Int01.Label Int01Disinilah register TEMP ditampilkan hasilnya ke LED, karena untuk menghidupkan LED harusmenggunakan logika 0, maka sebelumnya TEMP di-negasi dulu melalui r0 menggunakaninstruksi com (complement).Jangan lupa siapkan berkas projek-nya untuk membuat rangkaian eksternal mikrokontroler.; ************************************************************; PROJECT:; AUTHOR:; ************************************************************ 40
  • 41. ; Micro + software running ng; ------------------------------------------------------------ -------------------------------------- --.MICRO "AT90S8515".PROGRAM "intr01.asm".TARGET "intr01.hex".TRACE ; Activate micro trace tivate; Following lines are optional; if not included tional;; exactly these values are taken by default re; ------------------------------------------------------------ -------------------------------------- --.POWER VDD=5 VSS=0 ; Power nodes wer.CLOCK 1meg ; Micro clock cro.STORE 250m ; Trace (micro+signals) storage time ace; Micro nodes: RESET, PA0 0-PA7, PB0-PB7, PC0-PC7, PD0-PD7, ACO, TIM1OVF CO,; Define here the hardware around the micro re; ------------------------------------------------------------ -------------------------------------- --K0 VSS NODE1R1 PD2 NODE1 1kR2 NODE1 VDD 1KK1 VSS NODE2R3 PD3 NODE2 1kR4 NODE2 VDD 1KD1 VDD n0 ; Like in real life, with a resistor.D2 VDD n1D3 VDD n2D4 VDD n3D5 VDD n4D6 VDD n5D7 VDD n6D8 VDD n7R5 n0 PB0 1K ; Voltage drop seen at PB0 ageR6 n1 PB1 1KR7 n2 PB2 1KR8 n3 PB3 1KR9 n4 PB4 1KR10 n5 PB5 1KR11 n6 PB6 1KR12 n7 PB7 1KGunakan Control Panel untuk melakukan simulasi, sebagaimana ditunjukkan pada Gambar uk ukkan60, gunakan K0 dan K1 untuk INT0 dan INT1 serta perhatikan LED D1 s/d D8-nya. k Gambar 60. Control Panel untuk Eksperimen ar Eksperimen-5 41
  • 42. II.f. Eksperimen-6: Penggunaan Interupsi Pewaktu/PencacahSetelah sukses mencoba program interupsi sebelumnya, kali ini program interupsi akan kitamodifikasi dengan menambahkan satu interupsi lagi, yaitu interupsi pewaktu/pencacah(Timer/Counter0). Jika ada perangkat kerasnya, pin PD6 bisa disambungkan ke speakersehingga bisa didengarkan hasilnya, menggunakan VMLAB digunakan scope denganinstruksi spice plot untuk menggambarkan gelombangnya.Interupsi Limpahan PewaktuAT90S8515 (juga AVR lainnya) memiliki dua pewaktu/pencacah, yang satu 8-bit sedangkanlainnya 16-bit. Artinya, kedua pewaktu/pencacah tersebut bisa melakukan pencacahan mulaidari suatu nilai tertentu (yang kita tentukan) hingga nilai maksimum-nya (256 dan 65535,masing-masing). Kemudian akan menghasilkan interupsi limpahan (jika pencacahandilanjutkan 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 tidakdimulai dari 0 tetapi nilai lain yang Anda tentukan, maka program Anda buat sedemikianrupa 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.OVF0addrIni adalah nama yang sudah tercakup di dalam berkas 8515def.inc yang berupa lokasidimana vektor interupsi harus berada (silahkan cek pada berkas 8515def.inc). Kitatambahkan dua baris berikut ke dalam program sebelumnya:; -- vektor interupsi yang baru -.org OVF0addr rjmp TimerV0 ; vektor limpahan T/C0TIMSK, TCCR0 dan TCNT0Ketiga register ini digunakan untuk menyiapkan interupsi limpahan pewaktu kita. TCCR0digunakan untuk mengendalikan operasi pewaktu/pencacah 0. Cacahan akan naik padasetiap sinyal detak pada masukan pewaktu yang bersangkutan. Tetapi masukan detak dapatdipilih dan diskala-kan dengan N. Yang perlu diperhatikan dalam hal ini adalah 3 bit pertamapada TCCR0 sebagaimana ditunjukkan pada Gambar 61. Gambar 61. Perhatikan 3 bit pertama pada TCCR0 untuk pemilihan sumber datak 42
  • 43. Tabel yang ditunjukkan pada Gambar 62 digunakan sebagai acuan isi CS00, CS01 danCS02 untuk memilih sumber detaknya. Gambar 62. Pemilihan sumber detakTIMSK merupakan register interupsi pewaktu/pencacah yang digunakan untuk mematikandan mengaktifkan interupsi pewaktu/pencacah, yang juga mirip dengan GIMSK,sebagaimana ditunjukkan pada Gambar 63. Gambar 63. Register TIMSKYang perlu diperhatikan pada register TIMSK ini adalah sebuah bit khusus yang dinamakansebagai “Timer/Counter0 Overflow Interrupt Enable” yang disingkat sebagai TOIE0dan 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 inilahpewaktuan atau pencacahan dilakukan, tidak bit khusus di dalam register ini. Register inibisa dibaca/tulis, dengan demikian bisa kita isi dengan sembarang nilai awal sesuai dengankebutuhan (untuk program kita digunakan 128 desimal atau $80).Penjelasan program interupsi pewaktu/pencacah 0Jika PD6 dihubungkan dengan speaker maka akan terdengar suara. Saat pewaktu/pencacah0 melimpah akan men-togel pin PD6, hasilnya speakar akan berbunyi dengan frekuensidasar 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 K1akan berpengaruh pada frekuensi dasar pin PD6 dengan demikian suara yang dihasilkanbisa berbeda-beda. 43
  • 44. Bagaimana rumus frekuensi dasarnya?Pewaktu/pencacah mencacah naik dari suatu nilai tertentu setiap siklus detak hinggamelimpah (overflow). Kemudian nilai pewaktu/pencacah direset dan proses berulang lagi darinilai reset tersebut.Perhatikan ilustrasi berikut, jika limpahan terjadi setiap siklus detak CLK dan digunakanuntuk mem-flip nilai suatu pin, maka akan diperoleh frekuensi dasar: CLK/2 2 Hz 4 clock melimpah melimpah melimpah melimpahkarena register pewaktu/pencacah panjang-nya 8 bit, maka pencacah akan mencacah darisuatu nilai awal (misalnya TIME) hingga batasan maksimum (255 atau $FF), sehinggapersamaan 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:VMLABinclude8515def.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;-----------------------------------------------------------------; 44
  • 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 cacahanIntV0: dec TIME ; turunkan cacahan rjmp Int01 ; lompat ke INT01 untuk menampilkan hasil ke LED;-----------------------------------------------------------------;; Vektor Int1 - menaikkan cacahanIntV1: inc TIME ; naikkan cacahanInt01: mov r0,TIME ; tampilkan ke LED com r0 out PORTB,r0 reti;-----------------------------------------------------------------; 45
  • 46. ; Vektor Timer 0 - togel bit PD6TimerV0: 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 flagJangan 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 NODE1R1 PD2 NODE1 1kR2 NODE1 VDD 1KK1 VSS NODE2R3 PD3 NODE2 1kR4 NODE2 VDD 1KD1 VDD n0 ; Like in real life, with a resistor.D2 VDD n1D3 VDD n2D4 VDD n3D5 VDD n4D6 VDD n5D7 VDD n6D8 VDD n7 46
  • 47. R5 n0 PB0 1K ; Voltage drop seen at PB0 ageR6 n1 PB1 1KR7 n2 PB2 1KR8 n3 PB3 1KR9 n4 PB4 1KR10 n5 PB5 1KR11 n6 PB6 1KR12 n7 PB7 1K.plot v(PD6)Hasilnya dilihat melalui control panel dan scope, sebagaimana ditunjukkan pada Gambar 64. ol n Gambar 64. Scope pada VMLAB untuk eksperimen eksperimen-6Catatan:Saran dan masukan untuk ebook ini silahkan kirim email ke agfi@ugm.ac.id terima kasih! ook id, --- selesai --- 47
  • 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 agfi@ugm.ac.idUntuk pelatihan sehari workshop AVR ini silahkan hubungi: agfi@ugm.ac.id Didukung oleh: -o- 48