Sabtu, 18 Juni 2011

Tutorial Led and Keypad with AVR Assembler

Kali ini saya akan membahas sedikit tentang bahasa assembly, biasanya bahasa yang pertama kali dikuasai untuk belajar mikrokontroler adalah assembler, walaupun sudah banyak bahasa tingkat tinggi seperti Basic dan C yang digunakan, tentunya assembler tetap akan berguna suatu waktu. Untuk yang baru belajar atau untuk bernostalgia kembali dengan bahasa assembler ini, saya menggunakan software AVR Studio dari Atmel, yang dapat di download disini.

Pilih Start --> All Programs --> Atmel AVR Tools --> AVR Studio 4, saya masih menggunakan versi AVR Studio 4, sekarang sudah ada yang versi 5. Kemudian pilih New Project:

Klik Next dan pilih Atmel AVR Assembler, beri nama Project dan tentukan Location yang diinginkan, misal namanya ledkeypad:
Setelah itu klik Next, pilih AVR Simulator dan ATMega32:
Kemudian klik Finish, dan akan tampil form utama AVR Studio sbb:

Lalu ketikkan listing programnya seperti ini:
;
;====================================================
;KEYPAD & LED
;PROGRAMMER = WAHYU RAHMANIAR
;COMPANY = TECHNOLOGINATION
;====================================================
;
;Masukkan header untuk tipe AVR yang dipakai
.NOLIST
.INCLUDE "m32def.inc" ; Header untuk ATMEGA32
.LIST
;

;====================================================
;        INISIALISASI KONSTANTA DAN REGISTER
;====================================================
.equ    led=portb        ;variabel LED sebagai data
.equ    keyin=pind
.equ    keyout=portd
.def    temp=r16
.def    delay1=r17
.def    delay2=r18
.def    delay3=r19

;====================================================
;                   PROGRAM UTAMA
;====================================================
.cseg
.org 0000 ;awal kode program pada alamat 0x0000

;menyiapkan alamat SP - Stack Pointer
;harus dituliskan sebagai inisialisasi SP pada RCALL

    ldi temp,low(ramend)
    out spl,temp
    ldi temp,high(ramend)
    out sph,temp

;-------------------- inisialisasi port --------------------
    ldi    temp,0b11111111   
    out    ddrb,temp       
    clr    temp           
    out    ddrd,temp       
    ser    temp           
    out    portd,temp
    out    portb, temp        
    ldi    temp,led

           
mulai:
    in      temp, keyin
    out     portb, temp
    ;rcall  tunda
    rjmp    mulai

; =============================
;    delay loop generator
;     2000000 cycles:
; -----------------------------
; delaying 1999998 cycles:
tunda:
          ldi  R17, $12
WGLOOP0:  ldi  R18, $BC
WGLOOP1:  ldi  R19, $C4
WGLOOP2:  dec  R19
          brne WGLOOP2
          dec  R18
          brne WGLOOP1
          dec  R17
          brne WGLOOP0
; -----------------------------
; delaying 2 cycles:
          nop
          nop
          ret
; =============================
.exit           

Program diatas akan memberikan nilai led sesuai dengan keypad yang ditekan, atau led yang menyala sama urutannya dengan keypad yang ditekan.

Rangkaiannya seperti ini:

Simulasi dan source codenya dapat di download disini.

-ayuchan-