Materi 6: AVR Status Register & AVR Data Format Directives
I Nyoman Kusuma Wardana
Sistem Komputer STMIK STIKOM Bali
AVR Status Register AVR data format
AVR directive Workshop
Sprt halnya mikroprosesor lain, AVR
dilengkapi dgn flag register utk mengetahui kondisi suatu perhitungan aritmatika, msl:
carry bit
Flag register pd AVR dikenal sbg status register (SREG)
SREG mrpkn 8 bit register
Sinonim istilah: status register = flag register
Bit: C, Z, N, V, S dan H adlh conditional flag
Conditional flag suatu kondisi yg
dihasilkan SETELAH suatu instruksi dieksekusi Setiap conditional flag dapat digunakan utk melakukan operasi percabangan (JMP)
C : Carry Flag
Bernilai 1 jika trdpt carry yg keluar dr bit D7 Flag ini bisa diaktifkan oleh operasi
penambahan atau pengurangan
Z : Zero Flag
Mrpkan indikasi dr operasi aritmatika atau operasi logika
Jika hasil adlh nol, maka Z =1. jadi, Z = 0 jika hasil operasi TIDAK sama dgn nol
N : Negative Flag
Bilangan bertanda diwakili oleh bit D7 Jika D7 = 0, maka N = 0 Positif
Jika D7 = 1, maka N = 1 Negatif
Kombinasi flag N dan V digunakan utk bil
bertanda
8 Kusuma Wardana, M.Sc.
V : Overflow Flag
Bernilai 1 jika operasi terlalu besar
menyebabkan overflow menjd bil bertanda Carry flag digunakan utk mendeteksi error operasi aritmatika bil TIDAK bertanda
Overflow flag digunakan utk mendeteksi
error operasi aritmatika bil bertanda
Kombinasi N dan V : digunakan utk operasi bil bertanda
S : Sign Flag
Merupakan hasil dr N ⨁ V N XOR V H : Half Carry Flag
Bernilai 1 Jika trdpt carry dari D3 ke D4
akibat operasi penjumlahan &
pengurangan
Digunakan pd BCD (Binary Coded Decimal)
Pd bbrp mikroprosesr dsbt jg AC Flag (Auxiliary Carry) Flag
Mari kita gunakan instruksi DEC dan ADD utk mengamati nilai: C, H, dan Z
Contoh:
Buatlah status Z flag selama eksekusi berikut: 11 LDI R20, 4 ;R20 = 4 DEC R20 ;R20 = R20 - 1 DEC R20 ;R20 = R20 – 1 DEC R20 ;R20 = R20 - 1 DEC R20 ;R20 = R20 - 1 Kusuma Wardana, M.Sc.
Jawab: Kusuma Wardana, M.Sc. 12 LDI R20, 4 ;R20 = 4 DEC R20 ;R20 = R20 - 1 DEC R20 ;R20 = R20 – 1 DEC R20 ;R20 = R20 - 1 DEC R20 ;R20 = R20 - 1
Setelah Nilai R20 Z Flag
LDI R20, 4 4 0
DEC R20 3 0
DEC R20 2 0
DEC R20 1 0
Contoh:
Carilah status flag C, H dan Z pd program berikut:
Kusuma Wardana, M.Sc. 13
LDI R16, 0x38
LDI R20, 0x2F
Jawab:
Mrpkn operasi 0x38 + 0x2F
C = 0 krn tdk ada carry dr D7
H = 1 krn ada carry dr D3 ke D4
Z = 0 krn hasil pd R16 bukan nol
Kusuma Wardana, M.Sc. 14
LDI R16, 0x38 LDI R20, 0x2F ADD R16, R20
Contoh:
Carilah status flag C, H dan Z pd program berikut:
Kusuma Wardana, M.Sc. 15
LDI R18, 0x9C
LDI R20, 0x64
Jawab:
Mrpkn operasi 0x9C + 0x64
C = 1 krn ada carry dr D7
H = 1 krn ada carry dr D3 ke D4
Z = 1 krn hasil pd R20 adlh nol
Kusuma Wardana, M.Sc. 16
LDI R18, 0x9C LDI R20, 0x64 ADD R20, R18
Contoh:
Carilah status flag C, H dan Z pd program berikut:
Kusuma Wardana, M.Sc. 17
LDI R20, 0x88
LDI R21, 0x93
Jawab:
Mrpkn operasi 0x88 + 0x93
C = 1 krn ada carry dr D7
H = 0 krn tidak ada carry dr D3 ke D4
Z = 0 krn hasil pd R16 adlh bukan nol
Kusuma Wardana, M.Sc. 18
LDI R20, 0x88 LDI R21, 0x93 ADD R20, R21
Tidak semua instruksi akan menghasilkan flag Bbrp instruksi hanya menghasilkan flag tertentu Kusuma Wardana, M.Sc. 19
Flag dan Percabangan
Bbrp instruksi yg akan menghasilkan
percabangan (JMP) berdasarkan status bit flag
Kusuma Wardana, M.Sc. 20 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
AVR data type hanya satu yaitu: 8 bit
Ukuran tiap register 8 bit
AVR data format Representasi data byte dlm AVR assembler dapat berupa 4 , yaitu sbb: Hex Biner Desimal ASCII Kusuma Wardana, M.Sc. 22
Bilangan Hex
Terdapat 2 cara:
Dengan 0x (atau 0X) : LDI R16, 0x99
Dengan $ : LDI R20, $99 Contoh: Kusuma Wardana, M.Sc. 23 LDI R28, $75 ;R28 = 0x75 SUBI R28, 0x11 ;R28 = 0x75 – 0x11 = 0x64 SUBI R28, 0X20 ;R28 = 0x64 – 0x20 = 0x44
Bilangan Biner
Hanya terdapat 1 cara: Dengan 0b (atau 0B)
Contoh:
Kusuma Wardana, M.Sc. 24
LDI R20, 0b00100101 ;R20 = $25
Bilangan Desimal
Hanya terdapat 1 cara:
Dengan menulis langsung bilangan
Contoh:
Kusuma Wardana, M.Sc. 25
LDI R18, 12 ;R18 = 00001100 (0C dlm hex)
Bilangan ASCII
Hanya terdapat 1 cara:
Dengan memberi single quote Contoh:
Kusuma Wardana, M.Sc. 26
LDI R20, '9' ;R20 = 0x39 (ASCII utk 9 = 0x39)
Instruksi katakan ke CPU apa yg hrs dilakukan
Contoh: LDI, ADD, dsb
Directive memberi petunjuk arah
(directive) utk assembler (disebut jg
pseudo-instructions)
Contoh: .EQU, .DEVICE, .ORG
.EQU (equate)
Utk menyatakan konstanta atau fix address
Tidak disimpan sbg data tertentu, namun akan digunakan sbg label
Contoh:
Kusuma Wardana, M.Sc. 30
.EQU CACAH = 0x25 ... ...
.SET
Utk menyatakan konstanta atau fix address
Identik dgn .EQU, namun .SET dpt diseting belakangan
Contoh: fixed data assignment
Kusuma Wardana, M.Sc. 32
.EQU DATA1 = 0x39 ;definisikan DATA1 = 0x39 .EQU DATA2 = $39 ;definisi lain utk DATA2 .EQU DATA3 = 0b00110101 ;DATA3 = 35 (hex)
.EQU DATA4 = 39 ;DATA 4 = 39 (dec) = 27(hex)
Contoh: SFR address assignment
Kusuma Wardana, M.Sc. 33
.EQU CACAH = 0x00 ;nilai CACAH = 00
.EQU PORTB = 0x18 ;SFR utk alamat PORTB LDI R20, CACAH ;R16 = 0x00
Contoh: RAM address assignment
Kusuma Wardana, M.Sc. 34
.EQU ALAMAT = 0x120 ;menentukan lokasi RAM LDI R20, 5 ;R20 = 5
LDI R21, 2 ;R21 = 2
ADD R20, R21 ;R20 = R20 + R21 ADD R20, R21 ;R20 = R20 + R21
Contoh:
Carilah nilai data memory utk lokasi 0x200
berdasarkan program berikut:
Kusuma Wardana, M.Sc. 35
.EQU MYCOUNT = 0x95 .EQU MYREG = 0x200 LDI R22, MYCOUNT STS MYREG, R22
Contoh:
Carilah nilai data memory utk lokasi 0x63
berdasarkan program berikut:
Kusuma Wardana, M.Sc. 36 .EQU MYDATA = 12 .EQU MYREG = 0x63 .EQU FACTOR = 0x10 LDI R19, MYDATA ADD R19, FACTOR STS MYREG, R19
.ORG (origin)
Mengindikasikan awal suatu alamat Dapat digunakan utk data ataupun program
Contoh:
Kusuma Wardana, M.Sc. 37
.INCLUDE
Seperti #include dlm bahasa C
Sesuaikan dgn jenis mikrokontroler
Contoh:
Kusuma Wardana, M.Sc. 38
Ketiklah program berikut:
Kusuma Wardana, M.Sc. 40
;Program pertamaku menggunakan AVR Studio .INCLUDE "M16DEF.INC" RESET: LDI R16, 0xFF OUT DDRB, R16 LDI R16, 0x01 LOOP: OUT PORTB, R16 ROL R16 RJMP LOOP
Buatlah program assembly utk
mensimulasikan dancing LED dgn skenario sbb:
LED akan bergerak ke kiri dan ke kanan
Kalau dibuat per tahapan akan terlihat sbb:
Mazidi, Naimi and Naimi, 2011, The AVR
Microcontroller and Embedded System: Using
Assembly and C, Prentice Hall
www.atmel.com/
Morton, John, 2007, AVR: An Introductory
Course, Newnes Publisher
Gadre, Dhananjaya, 2001, Programming and
Customizing the AVR Microcontroller,
McGraw-Hill
Daniel J.Pack and Steven F.Barrettt, 2008,
Atmel AVR Microcontroller Primer:
Programming and Interfacing, Morgan &
Claypool Publisher