ya
OUT PORTB, R20
Keluarkan hasilnya pd PORTB
Kusuma Wardana - Bahasa Rakitan 2016 9
Contoh:
Berdasarkan contoh sebelumnya,
berapakah maksimum pengulangan yg
bisa dilakukan?
Jawab:
Karena R16 = 8-bit register, maka R16
hanya bisa meng-handle pengulangan
sebanyak 0xFF (255 dec)
Oleh karena itu, pengulangan maks = 255
kali
Kusuma Wardana - Bahasa Rakitan 2016 10
Utk mengatasi keterbatasan pengulangan
(misal maks 255 pd contoh sebelumnya)
digunkanlah loop di dalam loop (nested
loop)
Menggunakan 2 register sbg counter
Contoh:
Buat program utk:
Muati register PORTB dgn nilai 0x55
Komplemenkan (invers) PORTB 700 kali
Contoh:
Tulislah program utk melakukan
pengulangan sebanyak 100.000 kali !
Instruksi Aksi
BRLO Bercabang jika C=1
BRSH Bercabang jika C=0
BREQ Bercabang jika Z=1
BRNE Bercabang jika Z=0
BRMI Bercabang jika N=1
BRPL Bercabang jika N=0
BRVS Bercabang jika V=1
BRVC Bercabang jika V=0
Contoh:
ATtiny25
2K byte 2 x 1024 = 2048 memori ROM
Karena lebar tiap alamat adlh 2 byte,
maka akan mempunyai 1024 lokasi (2048/2
= 1024).
Maka rentang lokasi = 0000 - $03FF
ATmega16
16K byte 16 x 1024 = 16.384 byte memori
ROM
Karena lebar tiap alamat adlh 2 byte, maka
akan mempunyai 8192 lokasi (16.384 /2 =
8192)
Maka rentang lokasi = 0000 - $1FFF
ATmega64
64K byte 64 x 1024 = 65.535 byte memori
ROM
Karena lebar tiap alamat adlh 2 byte, maka
akan mempunyai 32.768 lokasi (65.535 /2 =
32.768)
Maka rentang lokasi = 0000 - $7FFF
.INCLUDE "M16DEF.INC"
.EQU LOC = 0x300 ;lokasi LOC pd SRAM $300
.ORG 00 ;mulai pd lokasi 0
...
Contoh: .ORG 0
;inisialisasi SP pd lokasi terakhir dari
Tentukan isi dari ; RAM(RAMEND)
program berikut:
LDI R31, 0
LDI R20, 0x21
LDI R22, 0x66
PUSH R20
PUSH R22
LDI R20, 0
LDI R22, 0
POP R22
POP R31
Kusuma Wardana - Bahasa Rakitan 2016 68
.INCLUDE “M16DEF.INC”
.ORG 0
;inisialisasi SP pd lokasi terakhir dari
; RAM(RAMEND)
LDI R16, HIGH(RAMEND) ;load SPH
OUT SPH, R16
LDI R16, LOW(RAMEND) ;load SPL
OUT SPL, R16
LDI R31, 0
LDI R20, 0x21
LDI R22, 0x66
PUSH R20
PUSH R22
LDI R20, 0
LDI R22, 0
POP R22
POP R31
Kusuma Wardana - Bahasa Rakitan 2016 69
Ketika subrutin dipanggil, prosesor
menyimpan alamat tepat di bawah CALL &
segera lari ke subrutin yg dituju
Ketika RET dieksekusi, lokasi paling atas pd
stack disalin ke program counter (PC) dan
stack pointer dinaikkan
Jawab:
LDI R16, HIGH(RAMEND) ;load SPH
OUT SPH, R16
LDI R16, LOW(RAMEND)
OUT SPL, R16 ;load SPL
BACK : LDI R16, 0x55 ; R16 = 0x55
OUT PORTB, R16 ; kirim 55 (hex) ke port B
CALL DELAY ; delai
LDI R16, 0xAA ; R16 = 0xAA
OUT PORTB, R16 ; kirim AA (hex) ke port B
CALL DELAY ; delai
RJMP BACK ; lakukan secara terus-menerus
;------- ini adalah subrutin untuk delay ---------
.ORG 0x300 ; tempatkan delay di alamat 0x300
DELAY: LDI R20, 0xFF ; R20 = 255 (sbg counter)
LAGI: NOP ; no operation (buang2 detak)
NOP
DEC R20
BRNE LAGI ; lakukan sampai R20 mnjd 0
RET ; kembali ke caller
Kusuma Wardana - Bahasa Rakitan 2016 72
Upper Limit of the Stack
Kita dpt menentukan dimana saja lokasi
stack pd general purpose RAM (SRAM)
Jd, nilai stack bisa sebesar ukuran RAM yg
dimiliki
Stack TIDAK DAPAT dideklarasikan di
register memory atau I/O memory
mendefinisikan
$0000 R2
$0001 General
...
Purpose
stack pd register
...
Registers R31
$001F
memory, atau di
I/O Address
TWBR $00
$0020
TWSR $01
I/O memory
Standard I/O
...
...
Registers
SPH $3E
diatas alamat
General
purpose
0x60 ...
RAM
(SRAM)
$FFFF
1. Frekuensi kristal
Kristal terkoneksi pd pin XTAL1 dan XTAL2.
Durasi dr periode clock utk siklus intruksi
adlh fungsi dr frekuensi kristal ini
Instruction Cycles
DELAY: LDI R20, 0XFF 1
AGAIN: NOP 1
NOP 1
DEC R20 1
BRNE AGAIN 2/1
RET 4
fetch 2 execute 2
fetch 3 execute 3
fetch 4 execute 4
fetch 5 execute 5
Time
T1 T2 T3 T4 T5 T6
Pipeline