loading...
STRUKTUR
BAHASA ASMBELER AVR
Bahasa yang
akan dipakai untuk memperogram mikrokontroler AVR adalah Bahasa assembly AVR. Struktur
Bahasa assembly terdiri dari paling banyak empat medan (field), yaitu medan
abel, medan kode operasi (mnemonic), medan operand dan medan komentar. Contoh :
Mulai : mov r16,
r17 :salin data dari
register r17 ke register r16
Mulai =
label
Mov =
operand
R16, r17 =
operand
Dan yang
palinga kanan adalah komentar
·
Label
mewakili alamat intruksi (atau data). Jika program bercabang ke intruksi ini,
maka label ini digunakan oleh intruksi branch. Nama label harus diakhiri dengan
ttanda titik dua.
·
Mnemonic
merupakan operasi yang harus dikerjakan.
·
Operand
adalah r16, r17, r16 menunjukan operand tujuan/target dan r17 adalah operand sumber.
·
Komentar
biasanya berisi penjelasan pada baris program yang bersangkutan, komentar harus
didahului tanda titik koma (;) yang menyatakan bahwa bagian tersebut tidak
diproses menjadi kode mesin dalam proses kompilasi
·
Setiap
pealihan dari suatu medan ke medan berikutnya harus dipisahkan minimal satu
spasi/blank dengan tmbol TAB.
Sebuah program
harus terdiri dari dua bagian yaitu inisialisasi program dan program utama. Inisialisasi
program harus disertakan agar program utama dapat berjalan berikut adalah
langkah inisialisasi program :
1. Menetukan jenis mikrokontroler yang
digunakan dengan cara memasukan file definisi devaice (m8535def.inc) kedalam
program utama.
2. ,enuliskan original address yaitu
0x0000. Kemudian dilanjutkan dengan intruksi rjmp/relative jump ke label main. Hal
ini dimaksudkan agar program memori tidak tumpeng tindih dengan program data.
3. Menuliskan isi stack ponter dengan
address terakhir RAM (RAMEND). Untuk ATMega8535 yaitu 0x025f. hal ini
dimaksudkan agar program utama mulai ditulis setelah address terakhir RAM.
INTRUKSI
I/O
Operasi I/O
port dapat diubah-ubah di dalam program secara byte atau hanya pada bit (bit addressable).
Pengubahan secara byte dilakukan dengan intruksi in atau out yang menggunakan
register pembantu. Sedangkan pengubahan per bit misalnya dapat dilakukan dengan
intruksi cbi (clear bit ini I/O register) atau sbi (set bit in I/O register).
·
In menuliskan data dari I/O space (port, timer,
configuration register, dsb) ke dalam register.
Contoh : in r16, pinA
·
out menuliskan data dari register ke I/O space
(port, timer, configuration, dsb).
contoh : clr r16 ;clear
r16
set r17 ;set
r17
out portB, r16 ;menulis nol ke portB
out
$16, r17 ;menulis satu ke portB. portB = alamat $18
·
ldi (load immediate) : menulis konstanta 8 bit langsung
ke register 16 sampai 31.
Contoh 1 : ldi r16, oxff
Out portA, r16 ;artinya porta dibuat jadi high
Contoh 2 : ldi r16, 0x00
Out
portA, r16 ;
artinya portA dibuat menjadi low
·
sbi (set bit
in I/O register)I : membuat logika low pada sebuah bit i/o register
contoh : sbi portB, 7 ;port
PB7 di set
·
cbi (clear
bit in I/O register is cleared) : lompati satu intruksi di bawah jika bit
tunggal dalam I/O register dalam kondisi clear / low.
Contoh : cbi portB, 5 ; port
PB5 di clear
·
Sbis (skip if bit in I/O
register is set): lompati satu intruksi di bawahnya jika bit tunggal dalam I/O
register dalam kondisi set/high.
Contoh : sbis, portA, 3 ;lompati
satu intruksi ke bawah jika bit 3 port A set
·
Sbic (skif if bit in I/O
register is clear)
: lompati satu intruksi ke bawah jika bit tunggal dalam I/O register dalam
kondisi clear/low.
Contoh : sbic portA, 3 ;lompati
satu intruksi ke bawah jika bit 3 portA clear.
LATIHAN
Buatlah algoritma/flowchart dan program berdasarkan keadaan yang pada
abel kebenaran berikut :
S1
|
S2
|
LED0
|
LED1
|
LED2
|
LED3
|
terbuka
|
terbuka
|
Nyala
|
Nyala
|
Padam
|
Padam
|
Terbuka
|
Terttutup
|
Nyala
|
padam
|
Nyala
|
Padam
|
Tertutup
|
Terbuka
|
nyala
|
Padam
|
nyala
|
Padam
|
Terttutup
|
terttutup
|
Nyala
|
nyala
|
Padam
|
padam
|
;f kristal = 11.0592MHz
.include"m8535def.inc"
.org 0x000
rjmp utama
utama : ldi r16, low(RAMEND)
out
SPL, r16
ldi
r16, high(RAMEND)
out
SPH, r16
sbi
ddra, 0
sbi
ddra, 1
sbi
ddra, 2
sbi
ddra, 3
sbi
ddrd, 1
sbi
ddrd, 0
sbi
ddrd, 2
sbi
ddrd, 3
cbi
ddrc, 7
cbi
ddrc, 6
cbi
ddrc, 5
cbi
ddrc, 4
cbi
ddrc, 3
cbi
ddrc, 2
cbi
ddrc, 1
cbi
ddrc, 0
sbi
portc, 7
sbi
portc, 6
sbi
portc, 5
sbi
portc, 4
sbi
portc, 3
sbi
portc, 2
sbi
portc, 1
sbi
portc, 0
ldi
r18, 0b01111111
ldi
r19, 0b11111111
ldi
r20, 0b11011111
ldi
r21, 0b10111111
ldi
r22, 0b10011111
in
r17, pinc
cp
r17, r19
breq
ledym
cp
r17, r20
breq
ledym
cp
r17, r21
breq
lednyala
cp
r17, r22
breq
lednyala
led : sbi porta, 0
sbi
porta, 1
sbi
porta, 2
sbi
porta, 3
rjmp
utama
lednyala: cbi porta, 0
cbi
porta, 1
cbi
porta, 2
cbi
porta, 3
rjmp
utama
ledym : cbi porta, 0
sbi
porta, 1
cbi
porta, 2
sbi
porta, 3
rjmp
utama
stop : rjmp stop
loading...
Comments
Post a Comment