LECTURE 17
1
Sekilas Tentang AVR
AVR = Alf and Vegard RISC
AVR = Advanced Virtual RISC
RISC = Reduced Instruction Set Computer
2
Sekilas Tentang AVR
Mikrokontroler AVR Atmel.
Seri pertama AVR mikrokontroler 8 bit AT90S8515.
Konfigurasi pin yang sama dengan mikrokontroler
8051, termasuk address dan data bus yang
termultipleksi.
3
Sekilas Tentang AVR
Mikrokontroler AVR teknologi RISC
Set instruksinya dikurangi dari segi ukurannya
dan kompleksitas mode pengalamatannya.
Pada awal era industri komputer, bahasa
pemrograman kode mesin & bahasa assembly.
Para desainer komputer mengembangkan
bahasa pemrograman tingkat tinggi yang mudah
dipahami manusia.
Akibatnya, instruksi yang ada menjadi semakin
komplek dan butuh lebih banyak memori.
Siklus eksekusi instruksinya semakin lama.
4
Sekilas Tentang AVR
Dalam AVR arsitektur RISC 8 bit
Semua instruksi berukuran 16 bit
Sebagian besar dieksekusi dalam 1 siklus clock.
Berbeda dengan mikrokontroler MCS-51 yang
instruksinya bervariasi antara 8 bit sampai 32 bit dan
dieksekusi selama 1 sampai 4 siklus mesin, dimana 1
siklus mesin membutuhkan 12 periode clock.
5
Sekilas Tentang AVR
Dalam perkembangannya, AVR dibagi menjadi
beberapa varian yaitu AT90Sxx, ATMega, AT86RFxx
dan ATTiny.
Pada dasarnya yang membedakan masing-masing
varian adalah kapasitas memori dan beberapa fitur
tambahan saja.
6
Fitur ATMega8535
Fitur yang tersedia pada ATMega 8535 adalah :
Frekuensi clock maksimum 16 MHz
Jalur I/O 32 buah, yang terbagi dalam PortA,
PortB, PortC dan PortD
Analog to Digital Converter 10 bit sebanyak 8
input
Timer/Counter sebanyak 3 buah
CPU 8 bit yang terdiri dari 32 register
Watchdog Timer dengan osilator internal
7
Fitur ATMega8535
SRAM sebesar 512 byte
Memori Flash 8 Kbyte dengan kemampuan read
while write
Interrupt internal maupun eksternal
Port komunikasi SPI
EEPROM sebesar 512 byte yang dapat diprogram
saat operasi
Analog Comparator
Komunikasi serial standar USART dengan
kecepatan maksimal 2,5 Mbps
8
MCU ARCHITECTURE
9
Konfigurasi Pin ATMega8535
10
Peta Memori ATMega8535
ATMega8535 memiliki dua jenis memori yaitu Data
Memory dan Program Memory ditambah satu fitur
tambahan yaitu EEPROM Memory untuk
penyimpan data.
Program Memory
ATMega8535 memiliki On-Chip In-System
Reprogrammable Flash Memory untuk
menyimpan program.
Untuk alasan keamanan, program memory dibagi
menjadi dua bagian yaitu Boot Flash Section dan
Application Flash Section.
11
Peta Memori ATMega8535
Boot Flash Section digunakan untuk menyimpan
program Boot Loader, yaitu program yang harus
dijalankan pada saat AVR reset atau pertamakali
diaktifkan.
Application Flash Section digunakan untuk
menyimpan program aplikasi yang dibuat user.
AVR tidak dapat menjalankan program aplikasi ini
sebelum menjalankan program Boot Loader.
Besarnya memori Boot Flash Section dapat
diprogram dari 128 word sampai 1024 word
tergantung setting pada konfigurasi bit di register
BOOTSZ.
Jika Boot Loader diproteksi, maka program pada 12
Gambar Peta Memori
Memori Program yang terletak di
Flash PEROM tersusun dalam 2
byte tiap instruksi memiliki
lebar 16bit atau 32bit.
15
SREG (Status Register)
Status yang dihasilkan setiap operasi setelah suatu
instruksi dieksekusi CPU core
17
SREG (Status Register)
Status yang dihasilkan setiap operasi setelah suatu
instruksi dieksekusi CPU core
18
SREG (Status Register)
Status yang dihasilkan setiap operasi setelah suatu
instruksi dieksekusi CPU core
19
SREG (Status Register)
Status yang dihasilkan setiap operasi setelah suatu
instruksi dieksekusi CPU core
20
SREG (Status Register)
Status yang dihasilkan setiap operasi setelah suatu
instruksi dieksekusi CPU core
21
SREG (Status Register)
Status yang dihasilkan setiap operasi setelah suatu
instruksi dieksekusi CPU core
22
Pengarah Assembler
.cseg (code segment) penunjuk bahwa kode
dibawahnya terletak pada memori program.
.db (data byte) : meletakkan konstanta, serial number,
look-up table di memori program pada alamat
tertentu.
.dw (data word) : sama dengan db, ukuran word.
.org : mengeset PC pada awal vektor reset .org 0x0000
atau vektor interupsi misal .org 0x0002
23
Pengarah Assembler
.byte : inisialisasi besar byte yang digunakan pada
SRAM untuk label tertentu.
.dseg (data segmen) : penunjuk bahwa kode
dibawahnya berfungsi untuk melakukan setting
SRAM.
.def (define) : mendefinisikan suatu register misal .def
temp=r16
.equ : memberi nama konstanta yang tidak dapata
berubah misal .equ max = 9600
24
Pengarah Assembler
.set : sama dengan .equ tetapi konstantanya dapat
diubah, misal .set baud=2400
.set baud = 9600
.endm (end macro) : mengakhiri macro
.include : memisahkan kode dalam 2 atau lebih file
terpisah
Misal : .include “C:\m8535def.inc”
25
Pengarah Assembler
.device : penunjuk jenis AVR yang digunakan
.exit : penunjuk agar berhenti melakukan assembly
pada file
.list : membangkitkan file list
.listmac : agar penambahan macro ditampilkan pada
file list yang dibangkitkan
.nolist : agar suatu runtun instruksi tidak dimasukkan
dalam file list yang dibangkitkan
26
Bahasa Assembly AVR
Bahasa yang dipakai untuk memprogram
mikrokontroler AVR adalah bahasa assembly AVR atau
bahasa C (dalam praktikum 2 kali assembly dan
selanjutnya AVR GCC atau Code Vision).
27
Bahasa Assembly AVR
28
Bahasa Assembly AVR
Sebuah program harus terdiri dari dua bagian, yaitu
inisialisasi program dan program utama.
Inisialisasi program harus disertakan agar program
utama dapat berjalan. Berikut adalah urutan langkah
inisialisasi program :
29
Bahasa Assembly AVR
1. Menentukan jenis mikrokontroler yang digunakan
dengan cara memasukkan file definisi device
(m8535def.inc) ke dalam program utama.
.include “m8535def.inc”
30
Bahasa Assembly AVR
2.Menuliskan original address program, yaitu 0x0000.
Kemudian dilanjutkan dengan instruksi rjmp / relative
jump ke label main.
Hal ini dimaksudkan agar program memory tidak
tumpang tindih dengan data memory.
.org 0x0000
rjmp main
31
Bahasa Assembly AVR
3.Menentukan isi Stack Pointer dengan address terakhir
RAM (RAMEND). Untuk ATMega8535 yaitu 0x025F.
Ini dimaksudkan agar program utama mulai ditulis setelah
address terakhir RAM.
main:
ldi r16,low(RAMEND) ; low byte address RAM = 5F
out SPL,r16
ldi r16,high(RAMEND) ; high byte address RAM = 02
out SPH,r16
32
Operasi Port Input Output
Register I/O
Setiap port ATMega8535 terdiri dari 3 register I/O
yaitu DDRx, Portx dan PINx.
DDRx (Data Direction Register)
Register DDRx digunakan untuk memilih arah pin.
Jika DDRx = 1 maka Pxn sebagai pin output Jika DDRx
= 0 maka Pxn sebagai input.
33
Operasi Port Input Output
Register I/O
Portx (Port Data Register)
Register Portx digunakan untuk 2 keperluan yaitu untuk
jalur output atau untuk mengaktifkan resistor pullup.
1. Portx berfungsi sebagai output jika DDRx = 1 maka :
Portxn = 1 maka pin Pxn akan berlogika high.
Portxn = 0 maka pin Pxn akan berlogika low.
2. Portx berfungsi untuk mengaktifkan resistor pullup jika
DDRx = 0 maka :
Portxn = 1 maka pin Pxn sebagai pin input dengan resistor pull up.
Portxn = 0 maka pin Pxn sebagai output tanpa resistor pull up.
34
Operasi Port Input Output
35
Operasi Port Input Output
Instruksi I/O
in : membaca data I/O port ke dalam register
contoh : in r16,PinA
out : menulis data register ke I/O port
contoh : out PortA,r16
ldi : (load immediate) : menulis konstanta ke
register sebelum konstanta tersebut dikeluarkan
ke I/O port
contoh : ldi r16,0xff
36
Operasi Port Input Output
Instruksi I/O
sbi : (set bit in I/O) : membuat logika high pada sebuah bit
I/O port
contoh : sbi PortB,7
cbi : (clear bit in I/O) : membuat logika low pada sebuah
bit I/O port
contoh : cbi PortB,5
sbic : (skip if bit in I/O is clear) : lompati satu instruksi
jika bit I/O port dalam kondisi clear/low
contoh : sbic PortA,3
sbis : (skip if bit in I/O is set) : lompati satu instruksi
jika bit I/O port dalam kondisi set/high
contoh : sbis PortB,3
37
38
39
40
Jawaban no 1.
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8535def.inc"
.org 0x00
rjmp main
main:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0x00
out ddrc,r16 ;port c sebagai input
ldi r16,0xff
out ddra,r16 ;port a sebagai output
ulang: in r16,PortC
out PortA,r16
rjmp ulang
41
Jawaban no 2.
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8535def.inc"
.org 0x00
rjmp main
main:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16 ;port a sebagai output
ldi r16,0x00
out ddrb,r16 ;port b sebagai input
ulang: ldi r16,0x00
out PortA,r16
sbic PortB,1
rjmp ulang
ldi r16,0x20
out PortA,r16
rjmp ulang 42
43
End of slide……