SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
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
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 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




                                                                                                                                      2
I. PENDAHULUAN MIKROKONTROLER AVR (AT90S2313)
                   OKONTROLER

I.a. Arsitektur Mikrokontroler Atmel’s AVR
                        troler

Mikrokontroler Atmel’s AVR secara umum memiliki beberapa bagian penting,
                          VR
sebagaimana 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
                                                                  VR

Jika 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 Registers
Yang masing-masing memilki fungsi atau kegunaan tertentu yang akan kita lihat
                          milki                                   ng
pada pasal Tentang Register Mikrokontroler Atmel’s AVR.
                           er

Demikian juga dengan bagian periferal AVR, sebagaimana ditunjukkan pada Gambar
                         ian                                       kan
3, terdapat berbagai macam periferal yang juga akan kita lihat pada pasal-pasal yang
                         m                                        a pasal
membahas periferal.




                                                                                  3
Gambar 2. CPU Core Mikrokontroler Atmel’s AVR




Gambar 3. Periferal Mikrokontroler Atmel’s AVR


                                                 4
I.b. Tentang Register-register AVR
                       egister

CPU 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
                           R
register bebas (independen) dapat diakses dalam sebuah in
                          en)                              instruksi tunggal yang
                                                                 ksi
dikerjakan dalam satu siklus detak tunggal.
                           s




                           Gambar 4. Register Serbaguna

Khusus register R26 s/d R31 memiliki fungsi tambahan selain sebagai GPR,
                                                                    in
sebagaimana ditunjukkan pada Gambar 4 dan 5, register
                                                  register-register ini juga berfungsi
sebagai penunjuk alamat untuk pengalamatan tak tak-langsung pada Ruang Data. Pada
mode 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
Gambar 6. Ringkasan Register
                       ngkasan Register-register Periferal dan Status
                                                                tatus




                           Gambar 7. Register Status

Register 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
• S – Sign Bit, S = N (+) V
                           +)
    • V – Two’s Complement Overflow Flag
                          ent
    • N – Negative Flag
    • Z – Zero Flag
    • C – Carry Flag
Catatan penting: Register status – SREG, tidak secara otomatis menyimpan dan
mengembalikan 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
I.c. Mode Pengalamatan AVR dan Set Instruksi
                     n

Pada Gambar 9 ditunjukkan ringkasan mode pengalamatan yang dikenal pada
                           kan                                     ang
Mikrokontroler Atmel’s AVR. Mode pengalamatan ini didasarkan pada jenis sumber
                          R.                                        ada
dan tujuan dari suatu instruksi, apakah melalui register, memori, data langsung atau
                           uksi,                                    ata
I/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
Gambar 13. Pengalamatan Data Langsung
             bar




          Gambar 14. Pengalamatan Tak
             bar                  Tak-langsung




Gambar 15. Pengalamatan Tak
              galamatan Tak-langsung dengan post-increment
                                                   crement




Gambar 16. Pengalamatan Tak
              galamatan Tak-langsung dengan pre-decrement
                                                   rement




Gambar 17. Pengalamatan Tak
             ngalamatan Tak-langsung dengan displacement
                                                  cement




    Gambar 18. Ringkasan Instruksi Aritmetika dan Logika
                                                      ka

                                                             9
Gambar 19. Ringkasan Instruksi Bit dan Test
    ar




Gambar 20. Ringkasan Instruksi Pencabangan
     r




                                              10
Gambar 21. Ringkasan Instruksi Transfer Data
                     r




Gambar 22. Ringkasan Operator Ekspresi (kiri) dan Pengarah (Directive – Kanan)
                      perator                                  ective




                                                                             11
I.d. Port-port I/O

Semua port AVR memiliki fungsionalitas Read
                                        Read-Modify-Write yang sesungguhnya saat
                                                                 esungguhnya
digunakan sebagai port-port I/O digital. Artinya, arah sebuah pin pada port dapat
                         ort
diubah tanpa harus merubah arah pin
                          ah      pin-pin port yang lain menggunakan instruksi SBI
                                                                akan
dan CBI (lihat kembali Gambar 19). Hal ini juga berlaku untuk mengubah nilai
                                                                 k
penggerak (jika dikonfigurasi sebagai keluaran) atau mengaktifkan/mematikan
                          urasi                                  ktifkan/mematikan
resistor pull-up (jika dikonfigurasi sebagai masukan). Ringkasan dan gambar
                          onfigurasi                             san
skematik untuk port B dan D pada AVR AT9
                                       AT90S2313 ditunjukkan pada Gambar 23 dan
                                                                da
24.




            Gambar 23. R
                       Ringkasan port B dan D pada AVR AT90S2313
                                                            2313

Efek DDBn pada pin-pin port B:
                         rt




                                                                               12
Efek DDDn pada pin-pin port D:
                         rt




                      Gambar 24. Rangkaian pin pada port
                        mbar

Fungsi 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.
                          ukan

Fungsi 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
I.e. Interupsi

Mikrokontroler AVR menyediakan 10 sumber interupsi selain RESET. Interupsi-
                            ediakan                              RESET
interupsi ini dan vektor RESET masing-masing memiliki vektor program yang terpisah
                           SET                                   ram
di dalam ruang memori program. Semua interupsi berhubungan dengan bit
                                                                 an          bit-bit
aktivasi individual yang harus di
                           arus di-set bersamaan dengan bit-I dalam SREG untuk
                                                                 alam
mengaktifkan interupsi yang bersangkutan. Ringkasan vektor-vektor interupsi dan
                           ng                                    ktor
RESET ditunjukkan pada Gambar 25. Setup program untuk inisialisasi interupsi
                                                                  isialisasi
ditunjukkan pada Gambar 26.




              Gambar 25. Ringkasan vektor-vektor interupsi dan reset
                                                                eset

Catatan: Bit-I akan di-nol-k secara perangkat keras (hardware) setelah munculnya
                           kan                                  s
suatu interupsi dan akan di di-set oleh instruksi RETI untuk mengaktifkan interupsi
                                                                gaktifkan
yang muncul berikutnya (jika ada).
                           ka




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




                                                                                 14
Gambar 27. Tiga sumber RESET pada AT90S2313

I.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 praskala
maupun pin eksternal. Pengaturan interupsi untuk Timer/Counter0 melalui TIMSK
                         ngaturan                                0
atau Timer/Counter Interrupt Mask Register. Flag limpahan ada di dalam TIFR atau
                         upt


                                                                             15
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.                                  /Counter0
TIMSK atau Timer/Counter Interrupt Mask Register. Flag limpahan ada di dalam
                        er                                   han
TIFR atau Timer/Counter Flag Register, sedangkan sinyal kontrol ditemukan pada
                                                              l
TCCR1 atau Timer/Counter1 Control Register.
                         r1




                                                                            16
Gambar 30. Penggunaan Timer/Counter1
   bar




  Gambar 31. Ilustrasi sumber detak
   ambar


                                       17
Gambar 32. Bagan Sumber Detak untuk Timer/Counter0 dan 1
                       gan

I.g. Pewaktu Watchdog

Pewaktu Watchdog mendapatkan detak secara terpisah dari osilator on
                          patkan                                or on-chip 1 MHz.
Instruksi WDR digunakan untuk mereset pewaktu Watchdog (
                         n                                      (harus dijalankan
selama periode waktu tertentu sebagaimana diberikan oleh praskalar WD
                         entu                                   ar WD).




                      Gambar 33. Bagan pewaktu watchdog
                        mbar

                                                                              18
Gambar 34. Penggunaan pewaktu watchdog
    ar




     G
     Gambar 35. Praskalar Watchdog




                                         19
I.h. Komparator Analog

Komparator analog membandingkan nilai pada masukan positif PB0 atau AIN0
                        bandingkan                       f
dengan masukan negatif PB1 atau AIN1. Jika masukan AIN0 > AIN1 maka nilai
keluarannya adalah ACO        ‘1’. Bagan dan penggunaan ko
                                                         omparator analog
ditunjukkan pada Gambar 3 dan 37.
                        36




                    Gambar 36. Bagan Komparator Analog
                      mbar




                 Gambar 37. Penggunakan Komparator analog
                      r

                                                                      20
I.i. Komunikasi Serial

Komunikasi serial dilakukan oleh unit UART – Universal Asynchronous Receiver and
                          n                                     ous
Transmitter 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
                                                              roler

Generator baudrate, sebagaimana ditunjukkan pada Gambar 39, merupakan
                       agaimana
pembagi frekuensi yang menghasilkan baudrate berdasarkan persamaan sebagai
                                                          ersamaan
berikut:




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

Untuk frekuensi kristal standard, baudrate yang biasa digunakan dihasilkan
                                                                  nakan
menggunakan pengaturan pada UBRR. Menggunakan baudrate yang memiliki error
                                                                 ang
lebih dari 1% sama sekali tidak disarankan. Semakin besar error-nya semakin rentan
                                                                 ya
terhadap derau. Perhatikan tabel pada Gambar 39 untuk penentuan baudrate.
                                                                 n




               Gambar 39. Isi UBBR berkaitan dengan nilai baudrate
                        .                                       te

NB:
Keterangan lengkap pada bagian ini silahkan merujuk pada datasheet AT90S2313.
                                                                et




                                                                                22
II. PEMROGRAMAN MIKROKONTROLER AVR (AT90S2313)
                  KROKONTROLER

II.a. Eksperimen-1: Proses aritmetika sederhana
                       ses

Membuat proyek baru dengan VMLAB 3.10
                      ngan

Untuk memahami pemrograman mikrokontroler AVR (khususnya AT90S2313)
                         ograman                               nya
gunakan metode Learning by Doing Aktifkan VMLAB vers 3.0 sehingga
                          ng      Doing.                      rsi
ditampilkan jendela utama sebagaimana ditunjukkan pada Gambar 40.




                     Gambar 40. Jendela utama VMLAB 3.0
                       mbar

VMLAB menggunakan sistem proyek, dengan demikian langkah awal atau langkah
                         em                                     wal
pertama adalah membuat proyek baru dengan cara memilih menu Project        New
Project sehingga ditampilkan jendela dialog sebagaimana ditunjukkan pada Gambar
                         kan                                    kan
41.

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
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
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:VMLABinclude2313def.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:




                                                                                    25
Melakukan simulasi dengan VMLAB 3.10
                       an

Selanjutkan dilakukan simulasi untuk melihat perubahan
                            asi                perubahan-perubahan isi register, aktifkan
                                                                     i
jendela register, sebagaimana ditunjukkan pada Gambar 43, dengan menekan Alt+Shift+R
                            a                                        ekan
atau menggunakan menu View  ew     Registers/Flags.




                           G
                           Gambar 44. Jendela Registers/Flags

Lakukan simulasi langkah-demiemi-langkah dengan menekan F6, perhatikan perubahan isi
                                                                     kan
register yang terkait sebagaimana contohnya ditunjukkan pada Gambar 44 dan 45.
                             mana                                   44




                                                                                      26
Gambar 44. Hasil simulasi…




Gambar 45. Hasil simulasi…




                             27
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: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 cek
a_lbhkecil_b:
     sub b,a
cek:
     cp          a,b
     brne start
ulang:

                                                                                28
rjmp   ulang




           Gambar 46. Perhatikan juga perubahan pada SREG




           Gambar 47. Perhatikan juga perubahan pada SREG




                                                            29
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: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 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"


                                                                                     30
.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   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 PB0
                            ge
R1   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 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                                   dupkan
logika ‘0’ bukan logika ‘1’.




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




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




        Gambar 50. Hasil simulasi…




                                             32
II.d. Eksperimen-4: LED berjalan

Apa 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 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…




                                                                                 33
II.e. Eksperimen-5: Penggu
                       ggunaan Interupsi Eksternal INT0 dan INT1

Dasar-Dasar Interupsi

Interupsi merupakan sebuah mekaniskme kontrol aliran yang diimplementasikan pada
                           h                                          lementasikan
hampir semua kontroler, termasuk Atmel’s AVR. Pada aplikasi mikrokontroler yang
                                                                       ikrokontroler
melibatkan interaksi dengan dunia luar, banyak hal-hal yang terjadi pada saat yang
                          n                                          di
bersamaan, artinya, tidak pada kondisi tersinkronisasi, inilah yang harus ditangani oleh
                           ada                                       arus
mikrokontroler.

Misalnya: sebuah tombol yang ditekan oleh pengguna, data
                            ng                         data-data yang dibaca pada port
                                                                    g
serial atau UART, cuplikan-cuplikan yang diambil dari ADC atau bahkan sebuah pewaktu
                            uplikan                                 an
yang seakan-akan meneriakkan “euy… waktunya habis!!”. Semua kejadian ini perlu ditangani
                            an                                      n
oleh mikrokontroler.

Selain menggunakan teknik polling, dimana mikrokontroler selalu bertanya ke setiap periferal
                                olling,                           bertanya
apakah perlu dilayani atau tidak, kita bisa membuat agar periferal yang bersangkutan
                                dak,                                     g bersangkutan-lah
yang akan memanggil mikrokontroler jika sudah tiba saatnya membutuhkan layanan. Hal ini
                               kontroler                                 kan
dinamakan sebagai “interupsi”, prosesor atau mikrokontrol akan menghentikan program
                                i”,              mikrokontroler          ghentikan
utama 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 AVR

Kita sekarang akan menuliskan sebuah program yang terkendali
                           an                         terkendali-interupsi dimana program
                                                                       psi
utama tidak melakukan apapun kecuali menunggu terjadinya interupsi. Untuk AT90S8515
                           pun
akan digunakan dua interupsi eksternal yang diperoleh dari pin PD2 dan PD3, sebagaimana
                           i
ditunjukkan pada Gambar 51.




                         Gambar 51. Interupsi eksternal AT90S8515
                            bar

Hal-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;
                             ara

Mengatur Lokasi Lompatan Vektor Interupsi dengan .org
                       n

Bagian paling bawah dari memori program AVR, dimulai pada alamat 0x0000, sering
                                                               at
disebut sebagai “Tabel vektor memori program dan program yang sesungguhnya harus
                           or        program”                  esungguhnya
berawal dari ruang ini.

Tabel vektor digunakan untuk menyimpan vektor
                              k             vektor-vektor interupsi, yaitu suatu lokasi tujuan
lompatan jika terjadi interupsi. Artinya, masing
                             psi.          masing-masing interupsi memiliki lokasi memori
                                                                         miliki
tertentu dan jika suatu interupsi terjadi, mikrokontroler akan melompat ke lokasi tersebut
                              upsi                                        t
dan memeriksa apa yang ada di lokasi tersebut, misalnya untuk menemukan alamat dimana
                             a                                            ukan
kode-kode untuk menangani interupsi tersebut d    disimpan, perhatikan Gambar 52 tentang
ringkasan tabel vektor interupsi pada AT90S8515.
                             psi

                                                                                           34
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,

                                                                                        35
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




                                                                                             36
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.



                                                                                         37
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: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
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!




                                                                                          39
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:
;   ************************************************************

                                                                                      40
; 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 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 PB0
                            age
R6    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 melakukan simulasi, sebagaimana ditunjukkan pada Gambar
                          uk                                      ukkan
60, 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
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


                                                                                         42
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.

                                                                                       43
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 clock
       melimpah             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: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
; 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

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

                                                                               45
; 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




                                                                              46
R5    n0   PB0   1K    ; Voltage drop seen at PB0
                             age
R6    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 64.
                              ol                                        n




                      Gambar 64. Scope pada VMLAB untuk eksperimen
                                                        eksperimen-6

Catatan:
Saran dan masukan untuk ebook ini silahkan kirim email ke agfi@ugm.ac.id terima kasih!
                          ook                                         id,

                                       --- selesai ---




                                                                                         47
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.id
Untuk pelatihan sehari workshop AVR ini silahkan hubungi: agfi@ugm.ac.id

                                     Didukung oleh:




                                           -o-




                                                                                     48

Weitere ähnliche Inhalte

Was ist angesagt?

Mikrokontroler pertemuan 4
Mikrokontroler pertemuan 4Mikrokontroler pertemuan 4
Mikrokontroler pertemuan 4Rumah Belajar
 
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...Muhammad Kennedy Ginting
 
Basic avr-microcontroller-tutorial 8535
Basic avr-microcontroller-tutorial 8535Basic avr-microcontroller-tutorial 8535
Basic avr-microcontroller-tutorial 8535LAZY MAGICIAN
 
Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)
Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)
Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)Muhammad Kennedy Ginting
 
Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...Muhammad Kennedy Ginting
 
Mikrokontroler pertemuan 2
Mikrokontroler pertemuan 2Mikrokontroler pertemuan 2
Mikrokontroler pertemuan 2Rumah Belajar
 
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16Beny Abdurrahman
 
Mikrokontroler pertemuan 1
Mikrokontroler pertemuan 1Mikrokontroler pertemuan 1
Mikrokontroler pertemuan 1Rumah Belajar
 

Was ist angesagt? (10)

Mikrokontroler pertemuan 4
Mikrokontroler pertemuan 4Mikrokontroler pertemuan 4
Mikrokontroler pertemuan 4
 
Multivibrator bistabil
Multivibrator bistabilMultivibrator bistabil
Multivibrator bistabil
 
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
 
Basic avr-microcontroller-tutorial 8535
Basic avr-microcontroller-tutorial 8535Basic avr-microcontroller-tutorial 8535
Basic avr-microcontroller-tutorial 8535
 
Mikrokontroler ATMega16
Mikrokontroler ATMega16Mikrokontroler ATMega16
Mikrokontroler ATMega16
 
Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)
Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)
Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)
 
Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...
 
Mikrokontroler pertemuan 2
Mikrokontroler pertemuan 2Mikrokontroler pertemuan 2
Mikrokontroler pertemuan 2
 
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16
 
Mikrokontroler pertemuan 1
Mikrokontroler pertemuan 1Mikrokontroler pertemuan 1
Mikrokontroler pertemuan 1
 

Ähnlich wie Mikrokontroller avr

Basic avr-microcontroller-tutorial v3
Basic avr-microcontroller-tutorial v3Basic avr-microcontroller-tutorial v3
Basic avr-microcontroller-tutorial v3Mabekni Yulianto
 
Makalah mikroprosesor jam digital dengan LCD16X2
Makalah mikroprosesor jam digital dengan LCD16X2 Makalah mikroprosesor jam digital dengan LCD16X2
Makalah mikroprosesor jam digital dengan LCD16X2 lely charo
 
Mikrokontroler Atmega16 Lampu Deret Kedip-kedip
Mikrokontroler Atmega16 Lampu Deret Kedip-kedipMikrokontroler Atmega16 Lampu Deret Kedip-kedip
Mikrokontroler Atmega16 Lampu Deret Kedip-kedipSitiAmaliaPangestu
 
Pertemuan 4-set-instruksi-arm3
Pertemuan 4-set-instruksi-arm3Pertemuan 4-set-instruksi-arm3
Pertemuan 4-set-instruksi-arm3France Rhezhek
 
Ppt robot roda 3 aldi
Ppt robot roda 3 aldiPpt robot roda 3 aldi
Ppt robot roda 3 aldiAldiNur1
 
Pemahaman Dasar Mikrokontroler
Pemahaman Dasar MikrokontrolerPemahaman Dasar Mikrokontroler
Pemahaman Dasar MikrokontrolerAbel Tasfir
 
Mikroprosesor Zilog Z80
Mikroprosesor Zilog Z80Mikroprosesor Zilog Z80
Mikroprosesor Zilog Z80Habibullah Srg
 
Mikroprosesor dan mikrokontroler
Mikroprosesor dan mikrokontrolerMikroprosesor dan mikrokontroler
Mikroprosesor dan mikrokontrolerAzizah Amel
 
Presentasi dan video pembelajaran Mikrokontroller
Presentasi dan video pembelajaran MikrokontrollerPresentasi dan video pembelajaran Mikrokontroller
Presentasi dan video pembelajaran Mikrokontrollerirsyadsyawal1
 
PERANCANGAN PUTAR BALIK MOTOR DC WALKING ROBOT MENGGUNAKAN MIKROKONTROLLER ...
PERANCANGAN PUTAR BALIK MOTOR DC  WALKING ROBOT MENGGUNAKAN  MIKROKONTROLLER ...PERANCANGAN PUTAR BALIK MOTOR DC  WALKING ROBOT MENGGUNAKAN  MIKROKONTROLLER ...
PERANCANGAN PUTAR BALIK MOTOR DC WALKING ROBOT MENGGUNAKAN MIKROKONTROLLER ...muhamadaulia3
 
Natalia-Sistem komputer(bab6 dan 7)
Natalia-Sistem komputer(bab6 dan 7)Natalia-Sistem komputer(bab6 dan 7)
Natalia-Sistem komputer(bab6 dan 7)nataliahong2
 
MODUL PRAKTIKUM SISTEM OPERASI PRAKTIKUM I MODEL PEMROGRAMAN 1.pdf
MODUL PRAKTIKUM SISTEM OPERASI PRAKTIKUM I MODEL PEMROGRAMAN 1.pdfMODUL PRAKTIKUM SISTEM OPERASI PRAKTIKUM I MODEL PEMROGRAMAN 1.pdf
MODUL PRAKTIKUM SISTEM OPERASI PRAKTIKUM I MODEL PEMROGRAMAN 1.pdfLalu Delsi Samsumar
 

Ähnlich wie Mikrokontroller avr (20)

Basic avr-microcontroller-tutorial v3
Basic avr-microcontroller-tutorial v3Basic avr-microcontroller-tutorial v3
Basic avr-microcontroller-tutorial v3
 
Makalah mikroprosesor jam digital dengan LCD16X2
Makalah mikroprosesor jam digital dengan LCD16X2 Makalah mikroprosesor jam digital dengan LCD16X2
Makalah mikroprosesor jam digital dengan LCD16X2
 
Laporan fix
Laporan fixLaporan fix
Laporan fix
 
Mikrokontroler Atmega16 Lampu Deret Kedip-kedip
Mikrokontroler Atmega16 Lampu Deret Kedip-kedipMikrokontroler Atmega16 Lampu Deret Kedip-kedip
Mikrokontroler Atmega16 Lampu Deret Kedip-kedip
 
Sensor suhu LM 35
Sensor suhu LM 35Sensor suhu LM 35
Sensor suhu LM 35
 
Pertemuan 4-set-instruksi-arm3
Pertemuan 4-set-instruksi-arm3Pertemuan 4-set-instruksi-arm3
Pertemuan 4-set-instruksi-arm3
 
Ppt robot roda 3 aldi
Ppt robot roda 3 aldiPpt robot roda 3 aldi
Ppt robot roda 3 aldi
 
Register
RegisterRegister
Register
 
Pemahaman Dasar Mikrokontroler
Pemahaman Dasar MikrokontrolerPemahaman Dasar Mikrokontroler
Pemahaman Dasar Mikrokontroler
 
Mikroprosesor Zilog Z80
Mikroprosesor Zilog Z80Mikroprosesor Zilog Z80
Mikroprosesor Zilog Z80
 
Mikroprosesor dan mikrokontroler
Mikroprosesor dan mikrokontrolerMikroprosesor dan mikrokontroler
Mikroprosesor dan mikrokontroler
 
Ppt robot dc rchd
Ppt robot dc rchdPpt robot dc rchd
Ppt robot dc rchd
 
robot motor dc
robot motor dc robot motor dc
robot motor dc
 
Presentasi dan video pembelajaran Mikrokontroller
Presentasi dan video pembelajaran MikrokontrollerPresentasi dan video pembelajaran Mikrokontroller
Presentasi dan video pembelajaran Mikrokontroller
 
PERANCANGAN PUTAR BALIK MOTOR DC WALKING ROBOT MENGGUNAKAN MIKROKONTROLLER ...
PERANCANGAN PUTAR BALIK MOTOR DC  WALKING ROBOT MENGGUNAKAN  MIKROKONTROLLER ...PERANCANGAN PUTAR BALIK MOTOR DC  WALKING ROBOT MENGGUNAKAN  MIKROKONTROLLER ...
PERANCANGAN PUTAR BALIK MOTOR DC WALKING ROBOT MENGGUNAKAN MIKROKONTROLLER ...
 
Komputer terapan
Komputer terapanKomputer terapan
Komputer terapan
 
Laporan led
Laporan ledLaporan led
Laporan led
 
Natalia-Sistem komputer(bab6 dan 7)
Natalia-Sistem komputer(bab6 dan 7)Natalia-Sistem komputer(bab6 dan 7)
Natalia-Sistem komputer(bab6 dan 7)
 
MODUL PRAKTIKUM SISTEM OPERASI PRAKTIKUM I MODEL PEMROGRAMAN 1.pdf
MODUL PRAKTIKUM SISTEM OPERASI PRAKTIKUM I MODEL PEMROGRAMAN 1.pdfMODUL PRAKTIKUM SISTEM OPERASI PRAKTIKUM I MODEL PEMROGRAMAN 1.pdf
MODUL PRAKTIKUM SISTEM OPERASI PRAKTIKUM I MODEL PEMROGRAMAN 1.pdf
 
Laporan Joystick
Laporan JoystickLaporan Joystick
Laporan Joystick
 

Mikrokontroller avr

  • 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 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 2
  • 3. I. PENDAHULUAN MIKROKONTROLER AVR (AT90S2313) OKONTROLER I.a. Arsitektur Mikrokontroler Atmel’s AVR troler Mikrokontroler Atmel’s AVR secara umum memiliki beberapa bagian penting, VR sebagaimana 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 VR Jika 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 Registers Yang masing-masing memilki fungsi atau kegunaan tertentu yang akan kita lihat milki ng pada pasal Tentang Register Mikrokontroler Atmel’s AVR. er Demikian juga dengan bagian periferal AVR, sebagaimana ditunjukkan pada Gambar ian kan 3, terdapat berbagai macam periferal yang juga akan kita lihat pada pasal-pasal yang m a pasal membahas periferal. 3
  • 4. Gambar 2. CPU Core Mikrokontroler Atmel’s AVR Gambar 3. Periferal Mikrokontroler Atmel’s AVR 4
  • 5. I.b. Tentang Register-register AVR egister CPU 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 R register bebas (independen) dapat diakses dalam sebuah in en) instruksi tunggal yang ksi dikerjakan dalam satu siklus detak tunggal. s Gambar 4. Register Serbaguna Khusus register R26 s/d R31 memiliki fungsi tambahan selain sebagai GPR, in sebagaimana ditunjukkan pada Gambar 4 dan 5, register register-register ini juga berfungsi sebagai penunjuk alamat untuk pengalamatan tak tak-langsung pada Ruang Data. Pada mode 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 Status Register 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 Flag Catatan penting: Register status – SREG, tidak secara otomatis menyimpan dan mengembalikan 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 n Pada Gambar 9 ditunjukkan ringkasan mode pengalamatan yang dikenal pada kan ang Mikrokontroler Atmel’s AVR. Mode pengalamatan ini didasarkan pada jenis sumber R. ada dan tujuan dari suatu instruksi, apakah melalui register, memori, data langsung atau uksi, ata I/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-langsung Gambar 15. Pengalamatan Tak galamatan Tak-langsung dengan post-increment crement Gambar 16. Pengalamatan Tak galamatan Tak-langsung dengan pre-decrement rement Gambar 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 ar Gambar 20. Ringkasan Instruksi Pencabangan r 10
  • 11. Gambar 21. Ringkasan Instruksi Transfer Data r Gambar 22. Ringkasan Operator Ekspresi (kiri) dan Pengarah (Directive – Kanan) perator ective 11
  • 12. I.d. Port-port I/O Semua port AVR memiliki fungsionalitas Read Read-Modify-Write yang sesungguhnya saat esungguhnya digunakan sebagai port-port I/O digital. Artinya, arah sebuah pin pada port dapat ort diubah tanpa harus merubah arah pin ah pin-pin port yang lain menggunakan instruksi SBI akan dan CBI (lihat kembali Gambar 19). Hal ini juga berlaku untuk mengubah nilai k penggerak (jika dikonfigurasi sebagai keluaran) atau mengaktifkan/mematikan urasi ktifkan/mematikan resistor pull-up (jika dikonfigurasi sebagai masukan). Ringkasan dan gambar onfigurasi san skematik untuk port B dan D pada AVR AT9 AT90S2313 ditunjukkan pada Gambar 23 dan da 24. Gambar 23. R Ringkasan port B dan D pada AVR AT90S2313 2313 Efek DDBn pada pin-pin port B: rt 12
  • 13. Efek DDDn pada pin-pin port D: rt Gambar 24. Rangkaian pin pada port mbar Fungsi 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. ukan Fungsi 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. Interupsi Mikrokontroler AVR menyediakan 10 sumber interupsi selain RESET. Interupsi- ediakan RESET interupsi ini dan vektor RESET masing-masing memiliki vektor program yang terpisah SET ram di dalam ruang memori program. Semua interupsi berhubungan dengan bit an bit-bit aktivasi individual yang harus di arus di-set bersamaan dengan bit-I dalam SREG untuk alam mengaktifkan interupsi yang bersangkutan. Ringkasan vektor-vektor interupsi dan ng ktor RESET ditunjukkan pada Gambar 25. Setup program untuk inisialisasi interupsi isialisasi ditunjukkan pada Gambar 26. Gambar 25. Ringkasan vektor-vektor interupsi dan reset eset Catatan: Bit-I akan di-nol-k secara perangkat keras (hardware) setelah munculnya kan s suatu interupsi dan akan di di-set oleh instruksi RETI untuk mengaktifkan interupsi gaktifkan yang 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 AT90S2313 I.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 praskala maupun pin eksternal. Pengaturan interupsi untuk Timer/Counter0 melalui TIMSK ngaturan 0 atau 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. /Counter0 TIMSK atau Timer/Counter Interrupt Mask Register. Flag limpahan ada di dalam er han TIFR atau Timer/Counter Flag Register, sedangkan sinyal kontrol ditemukan pada l TCCR1 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 gan I.g. Pewaktu Watchdog Pewaktu Watchdog mendapatkan detak secara terpisah dari osilator on patkan or on-chip 1 MHz. Instruksi WDR digunakan untuk mereset pewaktu Watchdog ( n (harus dijalankan selama 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 Analog Komparator analog membandingkan nilai pada masukan positif PB0 atau AIN0 bandingkan f dengan masukan negatif PB1 atau AIN1. Jika masukan AIN0 > AIN1 maka nilai keluarannya adalah ACO ‘1’. Bagan dan penggunaan ko omparator analog ditunjukkan pada Gambar 3 dan 37. 36 Gambar 36. Bagan Komparator Analog mbar Gambar 37. Penggunakan Komparator analog r 20
  • 21. I.i. Komunikasi Serial Komunikasi serial dilakukan oleh unit UART – Universal Asynchronous Receiver and n ous Transmitter 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 roler Generator baudrate, sebagaimana ditunjukkan pada Gambar 39, merupakan agaimana pembagi frekuensi yang menghasilkan baudrate berdasarkan persamaan sebagai ersamaan berikut: 21
  • 22. BAUD = baudrate; • fck = frekuensi detak kristal; k • UBBR = isi dari Register UART Baud Rate; ster Untuk frekuensi kristal standard, baudrate yang biasa digunakan dihasilkan nakan menggunakan pengaturan pada UBRR. Menggunakan baudrate yang memiliki error ang lebih dari 1% sama sekali tidak disarankan. Semakin besar error-nya semakin rentan ya terhadap derau. Perhatikan tabel pada Gambar 39 untuk penentuan baudrate. n Gambar 39. Isi UBBR berkaitan dengan nilai baudrate . te NB: Keterangan lengkap pada bagian ini silahkan merujuk pada datasheet AT90S2313. et 22
  • 23. II. PEMROGRAMAN MIKROKONTROLER AVR (AT90S2313) KROKONTROLER II.a. Eksperimen-1: Proses aritmetika sederhana ses Membuat proyek baru dengan VMLAB 3.10 ngan Untuk memahami pemrograman mikrokontroler AVR (khususnya AT90S2313) ograman nya gunakan metode Learning by Doing Aktifkan VMLAB vers 3.0 sehingga ng Doing. rsi ditampilkan jendela utama sebagaimana ditunjukkan pada Gambar 40. Gambar 40. Jendela utama VMLAB 3.0 mbar VMLAB menggunakan sistem proyek, dengan demikian langkah awal atau langkah em wal pertama adalah membuat proyek baru dengan cara memilih menu Project New Project sehingga ditampilkan jendela dialog sebagaimana ditunjukkan pada Gambar kan kan 41. 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 AVR Selanjutnya tuliskan program assembler berikut ini, keterangan lengkap ada di dalam acara 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 = 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: 25
  • 26. Melakukan simulasi dengan VMLAB 3.10 an Selanjutkan dilakukan simulasi untuk melihat perubahan asi perubahan-perubahan isi register, aktifkan i jendela register, sebagaimana ditunjukkan pada Gambar 43, dengan menekan Alt+Shift+R a ekan atau menggunakan menu View ew Registers/Flags. G Gambar 44. Jendela Registers/Flags Lakukan simulasi langkah-demiemi-langkah dengan menekan F6, perhatikan perubahan isi kan register 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 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: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 cek a_lbhkecil_b: sub b,a cek: cp a,b brne start ulang: 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 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: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 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" 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 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 PB0 ge R1 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 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 dupkan logika ‘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 berjalan Apa 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 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… 33
  • 34. II.e. Eksperimen-5: Penggu ggunaan Interupsi Eksternal INT0 dan INT1 Dasar-Dasar Interupsi Interupsi merupakan sebuah mekaniskme kontrol aliran yang diimplementasikan pada h lementasikan hampir semua kontroler, termasuk Atmel’s AVR. Pada aplikasi mikrokontroler yang ikrokontroler melibatkan interaksi dengan dunia luar, banyak hal-hal yang terjadi pada saat yang n di bersamaan, artinya, tidak pada kondisi tersinkronisasi, inilah yang harus ditangani oleh ada arus mikrokontroler. Misalnya: sebuah tombol yang ditekan oleh pengguna, data ng data-data yang dibaca pada port g serial atau UART, cuplikan-cuplikan yang diambil dari ADC atau bahkan sebuah pewaktu uplikan an yang seakan-akan meneriakkan “euy… waktunya habis!!”. Semua kejadian ini perlu ditangani an n oleh mikrokontroler. Selain menggunakan teknik polling, dimana mikrokontroler selalu bertanya ke setiap periferal olling, bertanya apakah perlu dilayani atau tidak, kita bisa membuat agar periferal yang bersangkutan dak, g bersangkutan-lah yang akan memanggil mikrokontroler jika sudah tiba saatnya membutuhkan layanan. Hal ini kontroler kan dinamakan sebagai “interupsi”, prosesor atau mikrokontrol akan menghentikan program i”, mikrokontroler ghentikan utama 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 AVR Kita sekarang akan menuliskan sebuah program yang terkendali an terkendali-interupsi dimana program psi utama tidak melakukan apapun kecuali menunggu terjadinya interupsi. Untuk AT90S8515 pun akan digunakan dua interupsi eksternal yang diperoleh dari pin PD2 dan PD3, sebagaimana i ditunjukkan pada Gambar 51. Gambar 51. Interupsi eksternal AT90S8515 bar Hal-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; ara Mengatur Lokasi Lompatan Vektor Interupsi dengan .org n Bagian paling bawah dari memori program AVR, dimulai pada alamat 0x0000, sering at disebut sebagai “Tabel vektor memori program dan program yang sesungguhnya harus or program” esungguhnya berawal dari ruang ini. Tabel vektor digunakan untuk menyimpan vektor k vektor-vektor interupsi, yaitu suatu lokasi tujuan lompatan jika terjadi interupsi. Artinya, masing psi. masing-masing interupsi memiliki lokasi memori miliki tertentu dan jika suatu interupsi terjadi, mikrokontroler akan melompat ke lokasi tersebut upsi t dan memeriksa apa yang ada di lokasi tersebut, misalnya untuk menemukan alamat dimana a ukan kode-kode untuk menangani interupsi tersebut d disimpan, perhatikan Gambar 52 tentang ringkasan tabel vektor interupsi pada AT90S8515. psi 34
  • 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, 35
  • 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 36
  • 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. 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, 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: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 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! 39
  • 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: ; ************************************************************ 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 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 PB0 age R6 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 melakukan simulasi, sebagaimana ditunjukkan pada Gambar uk ukkan 60, 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/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 42
  • 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. 43
  • 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 clock melimpah 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: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 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 ;----------------------------------------------------------------- ; 45
  • 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 46
  • 47. R5 n0 PB0 1K ; Voltage drop seen at PB0 age R6 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 64. ol n Gambar 64. Scope pada VMLAB untuk eksperimen eksperimen-6 Catatan: 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.id Untuk pelatihan sehari workshop AVR ini silahkan hubungi: agfi@ugm.ac.id Didukung oleh: -o- 48