• Tidak ada hasil yang ditemukan

Materi 7: Branch, Call and Time Delay Loop

N/A
N/A
Protected

Academic year: 2021

Membagikan "Materi 7: Branch, Call and Time Delay Loop"

Copied!
97
0
0

Teks penuh

(1)

Materi 7: Branch, Call and Time Delay Loop

I Nyoman Kusuma Wardana

(2)

Branches and Looping Program Counter (PC)

Calculating the Short Branch Address

Unconditional Branches Call Instruction & Stack AVR time delay

(3)
(4)

Loop  pengulangan instruksi atau operasi dlm suatu waktu tertentu

Loop  salah satu teknik pemrograman yg

paling sering digunakan

Di AVR, ada berbagai teknik utk melakukan pengulangan

Salah satunya dgn melakukan operasi yg

sama berulang-ulang sampai tujuan akhir

terpenuhi

(5)

Contoh:

Bgmn jika agar isi R24 mencapai 0x50?  boros

LDI R24, 0 ;R24 = 0 LDI R25, 3 ;R25 = 3 ADD R24, R25 ;R24 = 0x03 ADD R24, R25 ;R24 = 0x06 ADD R24, R25 ;R24 = 0x09 ADD R24, R25 ;R24 = 0x0C ADD R24, R25 ;R24 = 0x0F ADD R24, R25 ;R24 = 0x12

(6)

BRNEBRanch if Not Equal

BRNE  memakai zero flag

Lompatlah jika Z = 0

Kusuma Wardana - Bahasa Rakitan 2016 6

BACK: ... ;start loop ... ; body loop ... ; body loop

DEC Rn ; decrement Rn, Z=1 jika Rn=0 BRNE BACK ; kembali jika z=0

(7)

Contoh:

Buatlah program dgn kasus berikut:

Kosongkan R20, kemudian tambahkan nilai

3 ke R20 sebanyak sepuluh kali. Terakhir,

kirim hasil penjumlahan ke PORTB

(8)

Jawab:

Kusuma Wardana - Bahasa Rakitan 2016 8

.INCLUDE “M16DEF.INC”

LDI R16, 10 ;R16 = 10 (utk counter) LDI R20, 0 ;R20 = 0 (kosongkan R20) LDI R21,3 ;R21 = 3

LAGI: ADD R20, R21 ;R20 = R20 +3

DEC R16 ;decrement R16 (counter)

BRNE LAGI ;ulangi sampai count = 0

(9)

LDI R16, 10 LDI R20, 0 LDI R21,3 LAGI: ADD R20, R21 DEC R16 BRNE LAGI Load counter Clear R20 Isi R21 dgn 3 Tambahkan R20 dan R21 Decrement counter Apakah counter = 0? tidak ya

(10)

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

(11)

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

(12)

Kusuma Wardana - Bahasa Rakitan 2016 12

Jawab:

.INCLUDE “M16DEF.INC” .ORG 0

LDI R16, 0x55 ;R16 = 0x55 OUT PORTB, R16 ;PORTB = 0x55

LDI R20, 10 ;R20 = 10 (loop luar)

LOP_1: LDI R21, 70 ;R21 = 70 (loop dalam)

LOP_2: COM R16 ;komplemen R16

OUT PORTB, R16 ;keluarkan ke PORTB DEC R21 ;dec R21 (loop dalam)

BRNE LOP_2 ;ulangi 70 kali

DEC R20 ;dec R20 (loop luar)

(13)
(14)

Dua register memberikan kita maksimum

65.025 (255 x 255) pengulangan

Jika menggunakan tiga register  lebih dr

16 juta kali!

Contoh:

Tulislah program utk melakukan

pengulangan sebanyak 100.000 kali !

(15)

Jawab: LDI R16, 0x55 OUT PORTB, R16 LDI R23, 10 LOP_3: LDI R22, 100 LOP_2: LDI R21, 100 LOP_1: COM R16 DEC R21 BRNE LOP_1 DEC R22 BRNE LOP_2

(16)

Jenis-jenis percabangan bersyarat lainnya:

Kusuma Wardana - Bahasa Rakitan 2016 16

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

(17)

BREQ BRanch if EQual

BREQ  Z flag dicek. Jika tinggi (1), maka CPU akan melompat ke alamat target

Contoh:

OVER: IN R20, PINB ;baca PINB & taruh di R20 TST R20 ;set flag sesuai R20

(18)

Jika PINB = 0, maka CPU akan melompat ke

OVER

TST  set flag sesuai dgn isi dr register tsb

tanpa melakukan operasi aritmatika (misal increment/decrement)

Kusuma Wardana - Bahasa Rakitan 2016 18

OVER: IN R20, PINB ;baca PINB & taruh di R20

TST R20 ;set flag sesuai R20

(19)

BRSH BRanch if Same or Higher

BRSH  C flag dicek. Jika rendah (0), maka CPU akan melompat ke alamat target

Jika C =1, maka tdk akan bercabang, namun akan mengeksekusi perintah selanjutnya

Contoh:

Buatlah program utk menentukan apakah RAM pd lokasi 0x200 berisi nilai 0. jika ya,

(20)

Jawab:

Kusuma Wardana - Bahasa Rakitan 2016 20

.EQU LOKASI = 0x200 LDS R30, LOKASI

TST R30

BRNE NEXT ;brcabang jk R30 ≠ 0 (Z=0)

LDI R30, 0x55 ;isi 0x55 jk R30 = 0 STS LOKASI, R30

NEXT: ...

Buatlah program utk menentukan apakah RAM pd lokasi 0x200

(21)
(22)

Program Counter (PC)

Salah satu register yg sangat penting!

PC  digunakan oleh CPU utk

mendapatkan alamat dr instruksi

selanjutnya utk dieksekusi

(23)

CPU mengambil (fetch) instruksi (opcode)

dr program ROM dan selanjutnya PC naik

scr otomatis memposisikan alamat utk instruksi berikutnya

Semakin lebar PC  semakin banyak lokasi

memori yg dpt diakses

Misal, 14-bit PC dapat mengakses 16K

(24)

µC AVR  memiliki Flash memory dgn lebar

memori sebesar 2-byte

Contoh: ATmega32 mempunyai 32K byte 

diorganisasikan 16K x 2 byte.

PC = 14bit (214 = 16K lokasi memori)

(25)

ATmega64  memiliki 64K byte ROM

64K dipecah menjd 32K x 2 byte

Fokus pd 32K - nya

Oleh karena itu, lebar PC adlh 15-bit, sebab

(26)

Untuk 16-bit PC  ruang memori kode adlh

64K (216 = 64K): mengambil lokasi 0000-$FFFF

Jika 22-bit  ruang = 000000 - $3FFFFF

(27)
(28)

Contoh:

Temukanlah rentang alamat ROM dr µC berikut:

ATtiny25 dgn 2KB

ATmega16 dgn 16KB

ATmega64 dgn 64KB

(29)

Jawab:

ATtiny25

2K byte  2 x 1024 = 2048 memori ROM Karena lebar tiap alamat adlh 2 byte,

maka akan mempunyai 1024 lokasi (2048/2 = 1024).

(30)

Jawab:

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

(31)

Jawab:

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)

(32)

AVR On-Chip Program ROM Address Range

(33)

Placing Code in Program ROM

.INCLUDE "M16DEF.INC"

.EQU LOC = 0x300 ;lokasi LOC pd SRAM $300

.ORG 00 ;mulai pd lokasi 0

LDI R16, 0x25 ;R16=0x25 LDI R17, $34 ;R17=0x34 LDI R18, 0x31 ;R18=0x31 ADD R16, R17 ;R16=R16+R17 ADD R16, R18 ;R16=R16+R18 LDI R17, 11 ;R17=0x0B ADD R16, R17 ;R16=R16+R17 STS LOC, R16 ;simpan pd 0x300

(34)

Ubah seting pd AVR Studio utk membuat

list file: Project Assembler Options

(35)

Sebagian isi list file:

...

.EQU LOC = 0x300 ;lokasi LOC pd SRAM $300 .ORG 00 ;mulai pd lokasi 0

000000 e205 LDI R16, 0x25 ;R16=0x25 000001 e314 LDI R17, $34 ;R17=0x34 000002 e321 LDI R18, 0x31 ;R18=0x31 000003 0f01 ADD R16, R17 ;R16=R16+R17 000004 0f02 ADD R16, R18 ;R16=R16+R18 000005 e01b LDI R17, 11 ;R17=0x0B 000006 0f01 ADD R16, R17 ;R16=R16+R17 000007 9300 0300 STS LOC, R16 ;simpan pd 0x300 000009 940c 0009 HERE: JMP HERE ;diam selamanya disini

(36)

Amati untuk program counter (PC) utk LDI,

ADD dan STS pd AVR Instruction Set, sbb:

(37)

Penambahan PC menunjukkan sasaran target lokasi selanjutnya

000000 e205 LDI R16, 0x25 000001 e314 LDI R17, $34 ... 000007 9300 0300 STS LOC, R16 PC = PC+1 PC = PC+2

(38)

Alamat 0000 berisi E205opcode utk

memindahkan nilai ke R16 dan operand

(dlm hal ini 0x25) ke R16

Dgn demikian, instruksi LDI R16, 0x25

memiliki kode mesin E205

Dimana E = opcode, 205 = operand

Kusuma Wardana - Bahasa Rakitan 2016 38

.EQU LOC = 0x300 ;lokasi LOC pd SRAM $300

.ORG 00 ;mulai pd lokasi 0

000000 e205 LDI R16, 0x25 ;R16=0x25 ...

(39)

Lihat instruksi LDI pd AVR Instruction Set dan amati byte Opcode (dlm biner), sbb:

(40)

Opcode LDI Rd, K dlm hex:

Amati pada list file:

Kusuma Wardana - Bahasa Rakitan 2016 40

000000 e205 LDI R16, 0x25 ;R16=0x25 000001 e314 LDI R17, $34 ;R17=0x34 000002 e321 LDI R18, 0x31 ;R18=0x31

(41)
(42)

SEMUA percabangan bersyarat (misal

BRSH, BREQ dan BRNE) adlh short jump

Short jump  alamat target harus lebih kecil dr 64 byte dlm Program Counter (PC)

(43)

Short jump (short branch)  instruksi 2 byte

2 byte tersebut:

Opcode = 9-bit

relative address (operand) = 7-bit

Contoh BRSH

kkkkkkk = relative address

(44)

Contoh BRSH

kkkkkkk = relative address

Sisanya = opcode

Asumsi kode mesinnya adalh: 1111 0100 0000 1000 Maka:

Relative address= 0000001 Opcode = 111101000

(45)

Target address relatif terhadap nilai pd program counter (PC)

Relative address positif  melompat maju

Relative address negatif  melompat

mundur

Relative address memiliki nilai antara: -64 -

+63

Utk menghitung target address:

(46)

Kusuma Wardana - Bahasa Rakitan 2016 46

(47)
(48)

JMP (Jump)

JMP unconditional Jump: dpt pergi ke

lokasi memori mana saja dlm rentang 4M

(word) ruang memori

Mrpkn perintah 4-byte (32-bit):

10-bit: opcode

22-bit: alamat target

(49)
(50)

22-bit target address  dpt menjangkau

4M (words) lokasi memori dgn rentang:

000000 - $3FFFFF

Ingat 222=4.194.304

Jd, perintah JMP dpt mengkover seluruh

ruang memori

Tidak semua keluarga AVR dpt diberi instruksi JMP!!!

(51)

Wlpn AVR dpt mempunyai ruang memori

sampai 8M-byte, tdk semua keluarga AVR

mempunyai sedemikian besar kapasitas ROM

Bbrp jenis AVR hanya memiliki 4K-32K

on-chip ROM  setiap byte begitu berharga Oleh karena itu, terdapat alternatif  yaitu

(52)

RJMP (Relative Jump)

RJMP  instruksi 2-byte (16-bit):

4-bit: opcode

12-bit: relative address

Rentang alamat: 000-$FFF

Dibagi mnjd lompat maju dan lompat

mundur dlm rentang -2048 sampai +2047

relatif thd PC

(53)

Jika lompat maju: relative address = positif

Jika lompat mundur: relative address =

negatif

Dlm hal ini, RJMP seperti conditional

branch, namun 12 bit digunakan sbg offset

(54)

IJMP (Indirect Jump)

IJMP  mrpkn instruksi 2-byte

Ketika dieksekusi, PC dimuati dgn nilai dr suatu register Z

Jadi, akan melompat ke alamat yg ditunjukkan oleh nilai dr register Z

(55)

Pd percabangan yg lain  target address bersifat statik

Namun, pd IJMP  target bersifat dinamis

Kita dpt scr dinamis mengubah alamat

(56)
(57)

Call  digunakan utk memanggil subrutin Subrutin melaksanakan tugas tertentu yg sering dilakukan

Penggunaan instruksi call membuat

program lebih terstruktur dan menghemat

memori

(58)

CALL

Call  instruksi 4-byte (32-bit):

10-bit: opcode

22-bit: target address

Seperti halnya JMP  call dpt mengakses

sampai 4M dgn rentang: 000000-$3FFFFF

(59)
(60)

Utk memastikan bahwa CPU akan kembali

ke program utama setelah memanggil

CALL,  maka perintah dibawah CALL scr

otomatis akan disimpan pada stack

Setelah selesai mengeksekusi subrutin,

maka diperlukan perintah RET utk kembali

lg ke asal

Setiap subrutin memerlukan perintah RET

(61)

Stack and Stack Pointer

Stack  lokasi pd RAM yg digunakan utk menyimpan informasi sementara

Register yg digunakan utk mengakses stack

dinamakan SP (Stack Pointer)

Terdpt 2 register:

1. SPL (utk low bit SP) dan 2. SPH (utk high bit SP)

(62)

Utk instruksi yg kurang atau sama dgn 8-bit,

cukup digunakan SPL

Jika lebih, dipakai keduanya

(63)

Perintah utk menyimpan informasi pd stack disebut PUSH

Perintah utk me-load informasi dr stack ke register disebut POP

Dgn kata lain, register di “pushed” ke stack

utk disimpan lalu mem “popped-off ” stack

(64)

Pushing onto the Stack

SP diarahkan ke top of stack (TOS)

Karena kita push ke stack, maka data akan disimpan pd tempat yg diarahkan oleh SP Kemudian SP dikurangi 1

Contoh:

PUSH R10 ;simpan R10 ke stack, dec SP

(65)

Popping from the Stack

Proses mrpkn kebalikan dr PUSH

Ketika POP dieksekusi  SP dinaikkan (increment) 1 dan TOS disalin balik ke register

Stack bersifat LIFO (Last-In-First-Out)

Contoh:

(66)

Inisialisasi Stack Pointer

Ketika uC dinyalakan  SP bernilai 0, yaitu pd R0

Oleh karena itu, kita hrs menginisialisasinya ke suatu alamat pd RAM

Pd AVR, stack berjalan dr memori lebih

tinggi ke meori lebih rendah (makanya kita

mengurangi alamat SP)

Oleh karena itu, utk pertama kali, kita

alamatkan pd memori yg paling tinggi

(67)

Setiap uC AVR memiliki ukuran RAM yg berbeda

Jika kita ingin menginisialisasi SP, gunakan

perintah RAMEND

Ingat, SP terdiri dr 2: SPL dan SPH

(68)

Contoh:

Tentukan isi dari stack, stack poniter, serta R20, R22 dan R31 dari program berikut: 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

(69)

.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

(70)

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

(71)

Contoh:

Toggle semua bit pd PORTB dengan

mengirim nilai $55 dan $AA terus-menerus. Letakkan time delay diantaranya

(72)

Jawab:

72 .INCLUDE “M16DEF.INC”

.ORG 0

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

(73)

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

(74)

Ingat: kita tdk dpt mendefinisikan stack pd register memory, atau di I/O memory Jd, SP hrs diset diatas alamat 0x60

Kusuma Wardana - Bahasa Rakitan 2016 74

$0000 $0001 $0020 General purpose RAM (SRAM) R0 R1 R2 $001F $005F R31 .. . TWBR TWSR SPH SREG .. . General Purpose Registers Standard I/O Registers $00 $01 $3E $3F $0060 .. . .. . Data Address Space I/O Address .. . 8 bit $FFFF

(75)

.ORG 0

000000 e004 LDI R16, HIGH(RAMEND) 000001 bf0e OUT SPH, R16

000002 e50f LDI R16, LOW(RAMEND) 000003 bf0d OUT SPL, R16

000004 e505 BACK : LDI R16, 0x55 000005 bb08 OUT PORTB, R16

000006 940e 0300 CALL DELAY 000008 ea0a LDI R16, 0xAA 000009 bb08 OUT PORTB, R16 00000a 940e 0300 CALL DELAY

00000c cff7 RJMP BACK .ORG 0x300

000300 ef4f DELAY: LDI R20, 0xFF 000301 0000 LAGI: NOP

000302 0000 NOP

(76)

Memanggil banyak subrutin:

(77)

RCALL (Relative Call)

RCALL instruksi 2-byte (16-bit)

4-bit: opcode

12-bit: target address

Target address harus antara: -2048 – +2047

Tdk ada perbedaan antara RCALL dan

CALL, namun yg membedakan adlh range

(78)

ICALL (Indirect Call)

ICALL instruksi 2-byte (16-bit)

Z register menentukan alamat target

Z register = 16 bit  dpt menjangkau 64K words

(79)
(80)

Utk membuat time delay menggunakan bhs assembly, trdapat 2 faktor yg

mempengaruhi akurasi, sbb:

1. Frekuensi kristal

Kristal terkoneksi pd pin XTAL1 dan XTAL2. Durasi dr periode clock utk siklus intruksi adlh fungsi dr frekuensi kristal ini

(81)

2. Desain AVR

Salah satu utk mempercepat kinerja

mikrokontroler membwt single instruction

cycle

Mengapa AVR dpt membuat 1 siklus utk 1 instruksi? Krn sbb:

1. Menggunakan arsitektur Harvard

2. Menggunakan RISC

(82)

Subrutin delay terdiri dr 2 bagian:

1. Seting counter

2. Loop

Kita sering mengkalkulasi time dalay brdasarkan instruksi di dlm loop

(83)

Register 8 bit  max 255

Salah satu utk memperlambat delay 

menggunakan perintah NOP

NOPNo OPeration : wasting time

NOP menghabiskan 2 byte ROM dieksekusi

1 clock cycle

NOP  terlalu mahal utk 1 clock cycle Alternatif  pakai nested loop

(84)

Contoh:

Dgn menggunakan kristal 1 MHz, tentukan lamanya delay dr program berikut:

Kusuma Wardana - Bahasa Rakitan 2016 84

;---ini adalah subrutin delay .ORG 0X300

DELAY: LDI R20, 0XFF ;R20 = 255: counter AGAIN:

NOP NOP

DEC R20

BRNE AGAIN ;ulangi sampai R20 = 0 RET ; kembali ke caller

(85)

Jawab:

Lihat AVR Instruction Set, kemudian carilah instruction cycle Instruction Cycles DELAY: LDI R20, 0XFF 1 AGAIN: NOP 1 NOP 1 DEC R20 1 BRNE AGAIN 2/1 RET 4

(86)

Time delay = [1+(1+1+1+2)x255 + 4]x1us =1280us Ingat, BRNE menghabiskan 2 siklus jika lompat dan 1 siklus ketika tidak lompat.

Jadi, time delay =1280us – 1 = 1279us

Kusuma Wardana - Bahasa Rakitan 2016 86

Instruction Cycles DELAY: LDI R20, 0XFF 1 AGAIN: NOP 1 NOP 1 DEC R20 1 BRNE AGAIN 2/1 RET 4

(87)

Loop Inside a Loop Delay

Loop Inside a Loop Delay = nested loop

Digunakan untuk membuat delay yang

(88)

Contoh:

Dgn menggunakan kristal 1 MHz, tentukan lamanya delay dr program berikut:

Kusuma Wardana - Bahasa Rakitan 2016 88

DELAY: LDI R16, 200 AGAIN: LDI R17, 250 HERE: NOP NOP DEC R17 BRNE HERE DEC R16 BRNE AGAIN RET

(89)

Jawab:

HERE Loop= [(5x250)-1] x 1us = 1.249us AGAIN mengulangi HERE sbanyak 200x, maka: 200 x 1249 = 249.800 us Instruction Cycles DELAY: LDI R16, 200 1 AGAIN: LDI R17, 250 1 HERE: NOP 1 NOP 1 DEC R17 1 BRNE HERE 2/1 DEC R16 1 BRNE AGAIN 2/1

(90)

Kemudian instruksi diluar kalang:

[(4 x 200) – 1] x 1us = 799us

Total = 249.800 + 799 = 250.599us

Kita blm memasukkan “LDI R16, 200” dan “RET” TOTAL semuanya = 1us + 250.599us + 4us =

250.604us

Kusuma Wardana - Bahasa Rakitan 2016 90

Instruction Cycles

AGAIN: LDI R17, 250 1

...

DEC R16 1

(91)
(92)

Non-pipeline fetch 1 execute 1 fetch 2 execute 2 fetch 3 execute 3

Pipeline fetch 1 execute 1

fetch 2 execute 2

fetch 3 execute 3

fetch 4 execute 4

fetch 5 execute 5

Kusuma Wardana - Bahasa Rakitan 2016 92

T1 T2 T3 T4 T5 T6

(93)
(94)
(95)

Single-cycle

(96)

Kita dpt menggunakan pipeline utk

mempercepat eksekusi dr instruksi

Pd pipeline  proses utk mengeksekusi

dipecah menjadi langkah2 kecil dan

dikerjakan scr paralel

Kelemahan pipeline  kecepatan eksekusi

terbatasi oleh kecepatan terendah dr

bagian pipeline tsb

(97)

Mazidi, Naimi and Naimi, 2011, The AVR Microcontroller and Embedded System: Using Assembly and C, Prentice Hall

www.atmel.com/

Vahid, Frank and Gigarvis, Tony, 1999,

Embedded System Design: Unified Hardware/Software Approach

Morton, John, 2007, AVR: An Introductory

Referensi

Dokumen terkait