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-