Materi 6: AVR Status Register & AVR Data Format Directives I Nyoman Kusuma Wardana
Sistem Komputer STMIK STIKOM Bali
Kusuma Wardana, M.Sc.
1
AVR Status Register AVR data format AVR directive Workshop
Kusuma Wardana, M.Sc.
2
Kusuma Wardana, M.Sc.
3
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
Kusuma Wardana, M.Sc.
4
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) Kusuma Wardana, M.Sc.
5
C : Carry Flag Bernilai 1 jika trdpt carry yg keluar dr bit D7 Flag ini bisa diaktifkan oleh operasi penambahan atau pengurangan
Kusuma Wardana, M.Sc.
6
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
Kusuma Wardana, M.Sc.
7
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 Kusuma Wardana, M.Sc.
8
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
Kusuma Wardana, M.Sc.
9
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 Kusuma Wardana, M.Sc.
10
Mari kita gunakan instruksi DEC dan ADD utk mengamati nilai: C, H, dan Z Contoh: Buatlah status Z flag selama eksekusi berikut: 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.
11
Jawab: 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
DEC R20
0
1
Kusuma Wardana, M.Sc.
12
Contoh: Carilah status flag C, H dan Z pd program berikut:
LDI R16, 0x38
LDI R20, 0x2F ADD R16, R20
Kusuma Wardana, M.Sc.
13
Jawab: Mrpkn operasi 0x38 + 0x2F
LDI R16, 0x38 LDI R20, 0x2F ADD R16, R20
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
Contoh: Carilah status flag C, H dan Z pd program berikut:
LDI R18, 0x9C
LDI R20, 0x64 ADD R20, R18
Kusuma Wardana, M.Sc.
15
Jawab: Mrpkn operasi 0x9C + 0x64
LDI R18, 0x9C LDI R20, 0x64 ADD R20, R18
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
Contoh: Carilah status flag C, H dan Z pd program berikut:
LDI R20, 0x88
LDI R21, 0x93 ADD R20, R21
Kusuma Wardana, M.Sc.
17
Jawab: Mrpkn operasi 0x88 + 0x93
LDI R20, 0x88 LDI R21, 0x93 ADD R20, R21
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
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 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 Kusuma Wardana, M.Sc.
20
Kusuma Wardana, M.Sc.
21
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: LDI
R28, $75
;R28 = 0x75
SUBI R28, 0x11
;R28 = 0x75 – 0x11 = 0x64
SUBI R28, 0X20
;R28 = 0x64 – 0x20 = 0x44 Kusuma Wardana, M.Sc.
23
Bilangan Biner Hanya terdapat 1 cara: Dengan 0b (atau 0B) Contoh: LDI
R20, 0b00100101
SUBI R20, 0B00010001
;R20 = $25 ;R20 = $25 – $11 = $14
Kusuma Wardana, M.Sc.
24
Bilangan Desimal Hanya terdapat 1 cara: Dengan menulis langsung bilangan Contoh: LDI
R18, 12
SUBI R18, 2
;R18 = 00001100 (0C dlm hex) ;R18 = 12 – 2 = 10 (0x0A dlm hex)
Kusuma Wardana, M.Sc.
25
Bilangan ASCII Hanya terdapat 1 cara: Dengan memberi single quote Contoh: LDI
R20, '9'
SUBI R20, '1'
;R20 = 0x39 (ASCII utk 9 = 0x39) ;R20 = 0x39 – 0x32 = 0x8
Kusuma Wardana, M.Sc.
26
Kusuma Wardana, M.Sc.
ASCII Data Format 27
Kusuma Wardana, M.Sc.
28
Instruksi katakan ke CPU apa yg hrs dilakukan Contoh: LDI, ADD, dsb Directive memberi petunjuk arah (directive) utk assembler (disebut jg pseudoinstructions) Contoh: .EQU, .DEVICE, .ORG
Kusuma Wardana, M.Sc.
29
.EQU (equate) Utk menyatakan konstanta atau fix address Tidak disimpan sbg data tertentu, namun akan digunakan sbg label Contoh: .EQU CACAH = 0x25 ... ... LDI R21, CACAH Kusuma Wardana, M.Sc.
30
.SET Utk menyatakan konstanta atau fix address Identik dgn .EQU, namun .SET dpt diseting belakangan
Kusuma Wardana, M.Sc.
31
Contoh: fixed data assignment .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)
.EQU DATA5 = '5'
;ASCII 5 utk DATA5
Kusuma Wardana, M.Sc.
32
Contoh: SFR address assignment .EQU CACAH = 0x00
;nilai CACAH = 00
.EQU PORTB = 0x18
;SFR utk alamat PORTB
LDI R20, CACAH
;R16 = 0x00
OUT PORTB, R16
;nilai PORTB (lokasi 0x18) = 00
Kusuma Wardana, M.Sc.
33
Contoh: RAM address assignment .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
STS ALAMAT, R20
;simpan pada lokasi 0x120
Kusuma Wardana, M.Sc.
34
Contoh: Carilah nilai data memory utk lokasi 0x200 berdasarkan program berikut: .EQU MYCOUNT = 0x95 .EQU MYREG = 0x200
LDI R22, MYCOUNT STS MYREG, R22 Kusuma Wardana, M.Sc.
35
Contoh: Carilah nilai data memory utk lokasi 0x63 berdasarkan program berikut: .EQU MYDATA = 12 .EQU MYREG = 0x63 .EQU FACTOR = 0x10 LDI R19, MYDATA ADD R19, FACTOR STS MYREG, R19 Kusuma Wardana, M.Sc.
36
.ORG (origin) Mengindikasikan awal suatu alamat Dapat digunakan utk data ataupun program Contoh: .ORG 00
;mulai pada alamat 00
Kusuma Wardana, M.Sc.
37
.INCLUDE Seperti #include dlm bahasa C Sesuaikan dgn jenis mikrokontroler Contoh: .INCLUDE “M32DEF.INC”
;memakai ATmega32
Kusuma Wardana, M.Sc.
38
Kusuma Wardana, M.Sc.
39
Ketiklah program berikut: ;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 Kusuma Wardana, M.Sc.
40
Buatlah program assembly utk mensimulasikan dancing LED dgn skenario sbb:
LED akan bergerak ke kiri dan ke kanan
Kusuma Wardana, M.Sc.
41
Kalau dibuat per tahapan akan terlihat sbb:
Kusuma Wardana, M.Sc.
42
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, McGrawHill Daniel J.Pack and Steven F.Barrettt, 2008, Atmel AVR Microcontroller Primer: Programming and Interfacing, Morgan & Claypool Publisher Kusuma Wardana, M.Sc.
43