Materi 5: Architecture and Assembly Language Programming I Nyoman Kusuma Wardana
Sistem Komputer STMIK STIKOM Bali
General Purpose Registers (GPRs) The AVR Data Memory Using Instructions with the Data Memory
Kusuma Wardana, M.Sc.
2
Mikrokontroler AVR merupakan Register-based Microcontroller Sistem kerja uC diatur berdasarkan kondisi register Programmer menuliskan isi register utk menjalankan mikrokontroler Pemahaman terhadap register MUTLAK diperlukan
Kusuma Wardana, M.Sc.
4
CPU menggunakan register utk menyimpan data sementara AVR memiliki banyak register utk operasi aritmatika dan logika Informasi pd register bisa berupa data byte ataupun address Umumnya, ukuran register AVR 8-bit, dgn urutan sbb:
Kusuma Wardana, M.Sc.
5
AVR memiliki 32 General Purpose Register (GPR), yaitu R0-R31 GPR bisa digunakan utk instruksi aritmatika ataupun logika Utk memahami GPR, kita ambil contoh instruksi : LDI dan ADD
Kusuma Wardana, M.Sc.
6
LDI LoaD Immediate Immediate Nilai “harus” disediakan disaat itu! Berfungsi menyalin 8-bit data ke GPR
Masukkan Rd (tujuan) seketika dgn nilai K Nilai d antara 16 dan 31 Nilai K antara 0 – 255 (desimal) atau 00-FF (hex)7
Contoh: LDI R20, 0x25 ;load R20 dgn 0x25 LDI R31, 0x87 ;load R31 dgn 0x87 LDI R25, 0x79 ;load R25 dgn 0x79 Arti sintaks tsb: muati Register R20 dgn nilai 0x25 (heksadesimal) muati Register R31 dgn nilai 0x87 (heksadesimal) muati Register R25 dgn nilai 0x79 (heksadesimal) Kusuma Wardana, M.Sc.
8
Amati bahwa LDI destination, source Tujuan akan ditulis lebih dahulu Komentar dlm assembly setelah ; Ingat, dlm GPR (R0-R31) kita tidak bisa memakai perintah LDI utk R0-R15
Contoh: LDI R5, 0x99
; tidak valid
Kusuma Wardana, M.Sc.
9
Utk mewakili heksadesimal gunakan $ dan 0x di depan bilangan Jika tdk maka bilangan diartikan desimal LDI R16,50 ;R16 di-load dgn 50 (desimal) LDI R16,0x50 ;R16 di-load dgn 50 (hex)
Jika nilai 0 sampai F dimasukkan ke 8-bit register, maka sisanya diasumsikan nol LDI R16, 0x5
;R16=0x05 atau 00000101
Kusuma Wardana, M.Sc.
10
Jika memindahkan bilangan lebih besar dr 255 (FF dlm hex) dlm GPR akan error LDI R17,0xF72 ;ILLEGAL $7F2 > 8bit($FF)
Kusuma Wardana, M.Sc.
11
ADD menambah 2 register
Tambahkan isi Rd dan Rr kemudian simpan hasilnya di Rd Nilai d antara 0 dan 31 Nilai K antara 0 dan 31 Kusuma Wardana, M.Sc.
12
Contoh: ADD R1,R2
;tambahkan isi R1 dan R2 ;R1 = R1 + R2 ADD R28,R28 ;tambahkan isi R28 dgn isi R28 ;R28 = R28 + R28
Arti sintaks tsb: Tambahkan isi Register R1 dgn isi Register R2 kemudian simpan hasilnya di R1 Tambahkan isi Register R28 dgn isi Register R28 kemudian simpan hasilnya di R28 Kusuma Wardana, M.Sc.
13
Contoh: Hitung: 19 + 95 LDI R16, 19
;R16 = 19
LDI R20, 95
;R20 = 95
ADD R16, R20
;R16 = R16 + R20
Pembahasan: Hasil program tsb: R16 = 19 + 95 = 114
Kusuma Wardana, M.Sc.
14
Contoh: Hitung: 0x25 + 0x34 LDI R16, 0x25
;R16 = 0x25
LDI R17, 0x34
;R17 = 0x34
ADD R16, R17
;R16 = R16 + R17
Pembahasan: Hasil program tsb: R16 = 0x59 (0x25 + 0x34)
Kusuma Wardana, M.Sc.
15
Contoh: Hitung: 19 + 95 + 5 LDI
R16, 19
;R16 = 19
LDI
R20, 95
;R20 = 95
LDI
R21, 5
;R21 = 5
ADD
R16, R20
;R16 = R16 + R20
ADD
R16, R21
;R16 = R16 + R21
Kusuma Wardana, M.Sc.
16
Contoh: Hitung: 19 + 95 + 5 Atau… LDI
R16, 19
;R16 = 19
LDI
R20, 95
;R20 = 95
ADD
R16, R20
;R16 = R16 + R20
LDI
R20, 5
;R20 = 5
ADD
R16, R20
;R16 = R16 + R20 Kusuma Wardana, M.Sc.
17
Trdpt 2 jenis ruang memori (memory space), yaitu: 1. Code memory space Program yg kita ketik tersimpan disini 2. Data memory space Data-data tersimpan disini Mari kita bahas dulu data memory! Kusuma Wardana, M.Sc.
19
Data Memory
General Purpose Register
I/O Register (SFR) Kusuma Wardana, M.Sc.
General Purpose RAM (SRAM) 20
8 bit
...
R0 R1 R2
General Purpose Registers
...
$0000 $0001
R31
$001F
I/O Address
...
Standard I/O Registers
SPH SREG
$005F
$00 $01
...
TWBR TWSR
$0020
$3E $3F
$0060 ...
Data memory terdiri dari 3, sbb: 1. General Purpose Register (GPR) 2. I/O memory 3. Internal data SRAM
Data Address Space
General purpose RAM (SRAM)
$FFFF
Kusuma Wardana, M.Sc.
21
1. General Purpose Register Sperti yg telah dibahas sebelumnya, GPR memakai 32 byte dr ruang memori data GPR selalu menempati alamat $00 - $1F, apapun jenis mikrokontrolernya
Kusuma Wardana, M.Sc.
22
2. I/O Data Memory (SFRs) I/O memory didedikasikan utk fungsi2 spesifik sprt: 1. Timer 2. Komunikasi serial 3. I/O port 4. ADC 5. dan lain-lain
Kusuma Wardana, M.Sc.
23
I/O memory adlh register 8-bit Jumlah lokasi tergantung dr jumlah pin dan peripheral yg dimiliki oleh µC tsb. Semua keluarga AVR paling tidak memiliki 64 byte lokasi I/O memory Utk keluarga AVR yg memiliki lebih dr 32 I/O pin (misal ATmega64, ATmega128, & ATmega256) terdpt extended I/O memory utk mengontrol ekstra port dan ekstra peripheral
Kusuma Wardana, M.Sc.
24
8 bit
Data Address Space
...
General Purpose Registers
...
$0000 $0001
R0 R1 R2
R31
$001F
I/O Address TWBR TWSR
...
$0020
Standard I/O Registers
SPH SREG
$005F
$00 $01
...
I/O register dsbt juga SFR (Special Function Register) Perbedaan SFR dan GPR: SFR : memiliki fungsi khusus GPR: tidak memiliki fungsi khusus (utk menyimpan data scr umum)
$3E $3F
...
$0060
General purpose RAM (SRAM)
$FFFF
Kusuma Wardana, M.Sc.
25
Kusuma Wardana, M.Sc.
26
...
$0000 $0001
8 bit R0 R1 R2
General Purpose Registers
...
3. Internal Data SRAM Internal data SRAM Data Address Space menyimpan data dan parameter oleh AVR programmers dan C compilers Ukuran SRAM bervariasi trgantung jenis µC Setiap lokasi pd SRAM dpt diakses scr langsung berdasarkan alamatnya
R31
$001F
I/O Address
...
$0020
Standard I/O Registers
SPH SREG
$005F
$00 $01
...
TWBR TWSR
$3E $3F
...
$0060
General purpose RAM (SRAM)
$FFFF
27
SRAM vs Data EEPROM EEPROM utk menyimpan data yg jarang diubah dan tdk hilang ketika power dimatikan SRAM menyimpan data dan parameter yg sering diubah & data hilang ketika power dimatikan 3 data memori: GPR, SFR dan internal SRAM bertipe SRAM
Kusuma Wardana, M.Sc.
28
Dlm datasheet, ukuran memori dinyatakan: EEPROM size dr EEPROM SRAM size dr internal SRAM Ukuran data memori = ukuran GPR + SFR(I/O register) + SRAM
Kusuma Wardana, M.Sc.
29
8 bit
Data Address Space
...
General Purpose Registers
...
$0000 $0001
R0 R1 R2
R31
$001F
I/O Address
...
Standard I/O Registers
SPH SREG
$005F
$00 $01
...
TWBR TWSR
$0020
$3E $3F
...
$0060
General purpose RAM (SRAM)
$FFFF 30
Kita sudah belajar 2 perintah dasar utk kerja GPR: LDI dan ADD AVR mengijinkan utk akses langsung (direct access) utk lokasi tertentu pada data memory Sesi pd slide ini akan memperlihatkan instruksi2 utk mengakses berbagai lokasi dlm data memory Kuasai pokok bahasan ini!!!
Kusuma Wardana, M.Sc.
32
LDS LoaD direct from data Space LDS Katakan ke CPU untuk me-load (copy) 1 byte dr alamat data memoy ke GPR
Kusuma Wardana, M.Sc.
33
Contoh: LDS R20, 0x0001
Pembahasan: Salin isi dari lokasi 1 pd data memory ke GPR Lokasi 1 pd data memory memiliki isi tertentu. Isi inilah yg kita salin, namun dengan merujuk adalah alamatnya Kusuma Wardana, M.Sc.
34
...
R0 R1 R2
General Purpose Registers
R31
$001F
I/O Address
$0020
Standard I/O Registers
$00 $01
...
TWBR TWSR
SPH SREG
$005F
$3E $3F
$0060 ...
LDS R20, 0x0001
...
$0000 $0001
...
Lihat Gambar Lokasi 1 berada di GPR dan merupakan alamat dr R1 Maka instruksi:
8 bit
Data Address Space
Berarti salin R1 ke R20
General purpose RAM (SRAM)
$FFFF
Kusuma Wardana, M.Sc.
35
Contoh: LDS R5, 0x0200
Pembahasan: Salin isi dari lokasi 0x0200 pd data memory ke R5
Kusuma Wardana, M.Sc.
36
8 bit
Data Address Space
...
General Purpose Registers
...
$0000 $0001
R0 R1 R2
R31
$001F
I/O Address
...
$0020
Standard I/O Registers
SPH SREG
$005F
$00 $01
...
TWBR TWSR
Lihat Gambar Lokasi 0x0200 terletak pd internal SRAM Maka instruksi:
$3E $3F
...
$0060
General purpose RAM (SRAM)
LDS R5, 0x0200
Berarti, salin isi internal SRAM yg berlokasi 0x0200 ke R5
$FFFF
Kusuma Wardana, M.Sc.
37
Contoh: Tambahkan isi lokasi 0x300 dengan isi pd lokasi 0x302. Manfaatkan R0 dan R1. Selanjutnya, tentukan dimana letak 0x300? LDS R0, 0x0300
;R0=isi pd lokasi 0x300
LDS R1, 0x0302
;R1=isi pd lokasi 0x302
ADD R0, R1
;tambahkan R1 ke R0,hasil di R0
Kusuma Wardana, M.Sc.
38
Amati gambar: LDS R0, 0x0300 LDS R1, 0x0302 ADD R0, R1
Kusuma Wardana, M.Sc.
39
LDS R0, 0x0300
LDS R1, 0x0302 ADD R0, R1 R0
R1
Lokasi $300
Lokasi $302
Sebelum LDS R0,0x300
?
?
α
β
Setelah LDS R0,0x300
α
?
α
β
Setelah LDS R1,0x302
α
β
α
β
α+β
β
α
β
Setelah ADD R0,R1
Kusuma Wardana, M.Sc.
40
Contoh: Apa maksud program berikut: LDS R20, 2 Jawab: Menyalin isi dari R2 ke R20 Mengapa? karena 2 adalah alamat dari R2
Kusuma Wardana, M.Sc.
41
STS STore direct to data Space STS Katakan ke CPU untuk menyimpan (mengkopi) isi dr GPR ke alamat lokasi pd data memory
Kusuma Wardana, M.Sc.
42
Lokasi dapat berupa salah satu lokasi pada data memory: bisa salah satu I/O register, suatu lokasi di SRAM, atau GPR Contoh: STS 0x1, R10
Pembahasan: Menyalin isi dari R10 dan tempatkan pd register berlokasi 1 Karena lokasi 1 adlh R1, maka salin R10 ke R1 Kusuma Wardana, M.Sc.
43
Contoh: STS 0x230, R25
;simpan isi R25 ke lokasi 0x230
Pembahasan: Salin isi dari register R25 ke lokasi 0x230 pd data memory Lokasi 0x230 adlh internal SRAM
Kusuma Wardana, M.Sc.
44
Contoh: Tulislah program utk menyimpan nilai 55 ke lokasi 0x80 pada SRAM Jawab: LDI R20, 55 STS 0x80, R20
;R20 = 55 ;[0x80] = R20 = 55
Kusuma Wardana, M.Sc.
45
Contoh: Tulislah program utk menyimpan nilai 0x99 ke lokasi 0x200 sampai lokasi 0x203 pada ruang SRAM Jawab: LDI STS STS STS STS
R20, 0x99 0x200, R20 0x201, R20 0x202, R20 0x203, R20
; ; ; ; ;
R20 = 0x99 simpan pd R20 simpan pd R20 simpan pd R20 simpan pd R20 Kusuma Wardana, M.Sc.
lokasi lokasi lokasi lokasi
0x200 0x201 0x202 0x203 46
LDI STS STS STS STS
R20, 0x99 0x200, R20 0x201, R20 0x202, R20 0x203, R20
; ; ; ; ;
R20 = 0x99 simpan pd R20 simpan pd R20 simpan pd R20 simpan pd R20
lokasi lokasi lokasi lokasi
0x200 0x201 0x202 0x203
Tabel Lokasi Beserta Data yg Tersimpan Address
Data
$200
0x99
$201
0x99
$202
0x99
$203
0x99
Ingat!!! Kita tidak dapat menyalin (menyimpan) nilai secara LANGSUNG ke lokasi pd SRAM. Hal ini harus dilakukan melalui perantara GPR Kusuma Wardana, M.Sc.
47
Contoh: Buatlah tabel utk menyatakan keadaan nilai RAM yg berlokasi dr $212 sampai $216 berdasar program berikut: LDI STS LDI STS LDI STS LDI STS LDI STS
R16, 0x99 0x212, R16 R16, 0x85 0x213, R16 R16, 0x3F 0x214, R16 R16, 0x63 0x215, R16 R16, 0x12 0x216, R16
Jawab: Address
Data
$212
0x99
$213
0x85
$214
0x3F
$215
0x63
$216
0x12
Kusuma Wardana, M.Sc.
48
Carilah isi dr R20, R21 dan data memory pd lokasi 0x120 setelah program berikut:
LDI LDI ADD ADD STS
R20, 5 R21, 2 R20, R21 R20, R21 0x120, R20
Kusuma Wardana, M.Sc.
49
LDI LDI ADD ADD STS
R20, 5 R21, 2 R20, R21 R20, R21 0x120, R20
Lokasi
Data
Lokasi
Data
R20
5
R20
5
R21
R21
2
0x120
0x120
Setelah LDI R20, 5
Setelah LDI R21, 2
Lokasi
Data
Lokasi
Data
Lokasi
Data
R20
7
R20
9
R20
9
R21
2
R21
2
R21
2
0x120
9
0x120
Setelah ADD R20, R21
0x120 Setelah ADD R20, R21 Kusuma Wardana, M.Sc.
Setelah STS 0x120, R20 50
Contoh: Jumlahkan isi memori yg berlokasi di 0x90 dgn isi memori yg berlokasi lokasi di 0x95 dan simpan hasilnya di lokasi 0x313 Jawab: LDS LDS ADD STS
R20, 0x90 R21, 0x95 R20, R21 0x313, R20
; ; ; ;
R20 = [0x90] R21 = [0x95] R20 = R20 + R21 [0x313] = R20
Kusuma Wardana, M.Sc.
51
Contoh: Isi register R16 dengan angka 0x55. Kemudian pindahkan angka tersebut ke PORTB, PORTC dan PORTD! Jawab: Pertama-tama, ketahui dulu dimana alamat data memory utk PORTB, PORTC dan PORTD Kusuma Wardana, M.Sc.
52
Alamat PORTB = 0x38, PORTC = 0x35 dan PORTD=0x32 Address I/O $00 $01 $02 $03 $04 $05 $06 $07 $08 $09 $0A $0B $0C $0D $0E $0F $10 $11 $12 $13 $14 $15
Mem. $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $2A $2B $2C $2D $2E $2F $30 $31 $32 $33 $34 $35
Name TWBR TWSR TWAR TWDR ADCL ADCH ADCSRA ADMUX ACSR UBRRL UCSRB UCSRA UDR SPCR SPSR SPDR PIND DDRD PORTD PINC DDRC PORTC
Address I/O $16 $17 $18 $19 $1A $1B $1C $1D $1E $1F
Mem. $36 $37 $38 $39 $3A $3B $3C $3D $3E $3F
$20
$40
$21 $22 $23 $24 $25 $26 $27 $28 $29 $2A
$41 $42 $43 $44 $45 $46 $47 $48 $49 $4A
Name PINB DDRB PORTB PINA DDRA PORTA EECR EEDR EEARL EEARH UBRRC UBRRH WDTCR ASSR OCR2 TCNT2 TCCR2 ICR1L ICR1H OCR1BL OCR1BH OCR1AL
Kusuma Wardana, M.Sc.
Address I/O $2B $2C $2D $2E $2F $30
Mem. $4B $4C $4D $4E $4F $50
$31
$51
$32 $33 $34 $35 $36 $37 $38 $39 $3A $3B $3C $3D $3E $3E
$52 $53 $54 $55 $56 $57 $58 $59 $5A $5B $5C $5D $5E $5E
Name OCR1AH TCNT1L TCNT1H TCCR1B TCCR1A SFIOR OCDR OSCCAL TCNT0 TCCR0 MCUCSR MCUCR TWCR SPMCR TIFR TIMSK GIFR GICR OCR0 SPL SPH SREG 53
Programnya sbb: LDI R16, 0x55
;R16 = 55 (hex)
STS 0x38, R16
;salin isi R16 ke PORTB
STS 0x35, R16
;salin isi R16 ke PORTC
STS 0x32, R16
;salin isi R16 ke PORTD
Kusuma Wardana, M.Sc.
54
IN IN from I/O Location
IN Katakan ke CPU untuk menyalin 1 byte dari register I/O ke GPR Setelah program ini dieksekusi, GPR akan memiliki nilai yg sama dgn I/O register
Kusuma Wardana, M.Sc.
55
Contoh: IN R20, 0x16 Pembahasan: Salin isi dr lokasi 16 (hex) pd I/O memory ke dalam R20 I/O memory memiliki 2 alamat: 1. I/O address 2. Data memory address Kusuma Wardana, M.Sc.
56
Setiap lokasi dlm data memory memiliki alamat unik disebut data memory address Setiap I/O register memiliki alamat relatif dlm kaitannya dgn awal dr I/O memory disebut I/O address
Kusuma Wardana, M.Sc.
57
Address I/O $00 $01 $02 $03 $04 $05 $06 $07 $08 $09 $0A $0B $0C $0D $0E $0F $10 $11 $12 $13 $14 $15
Mem. $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $2A $2B $2C $2D $2E $2F $30 $31 $32 $33 $34 $35
Name TWBR TWSR TWAR TWDR ADCL ADCH ADCSRA ADMUX ACSR UBRRL UCSRB UCSRA UDR SPCR SPSR SPDR PIND DDRD PORTD PINC DDRC PORTC
Address I/O $16 $17 $18 $19 $1A $1B $1C $1D $1E $1F
Mem. $36 $37 $38 $39 $3A $3B $3C $3D $3E $3F
$20
$40
$21 $22 $23 $24 $25 $26 $27 $28 $29 $2A
$41 $42 $43 $44 $45 $46 $47 $48 $49 $4A
Name PINB DDRB PORTB PINA DDRA PORTA EECR EEDR EEARL EEARH UBRRC UBRRH WDTCR ASSR OCR2 TCNT2 TCCR2 ICR1L ICR1H OCR1BL OCR1BH OCR1AL
Kusuma Wardana, M.Sc.
Address I/O $2B $2C $2D $2E $2F $30
Mem. $4B $4C $4D $4E $4F $50
$31
$51
$32 $33 $34 $35 $36 $37 $38 $39 $3A $3B $3C $3D $3E $3E
$52 $53 $54 $55 $56 $57 $58 $59 $5A $5B $5C $5D $5E $5E
Name OCR1AH TCNT1L TCNT1H TCCR1B TCCR1A SFIOR OCDR OSCCAL TCNT0 TCCR0 MCUCSR MCUCR TWCR SPMCR TIFR TIMSK GIFR GICR OCR0 SPL SPH SREG 58
Contoh: IN R20, 0x16 Pembahasan: Salin isi dr lokasi 0x16 pd I/O memory ke dalam R20 Alamat I/O 0x16 adalah milik PINB Jadi, arti program tsb: salin isi PINB ke R20
Kusuma Wardana, M.Sc.
59
Contoh: IN R19, 0x10 Pembahasan: Salin isi dr lokasi 0x10 pd I/O memory ke dalam R19 Alamat I/O 0x10 adalah milik PIND Jadi, arti program tsb: salin isi PIND ke R19
Kusuma Wardana, M.Sc.
60
Agar dapat bekerja lebih mudah, sintaks sebelumnya bisa ditulis sbb: IN R19, PIND * Butuh file header jika menggunakan nama dr suatu alamat I/O
Kusuma Wardana, M.Sc.
61
Contoh: Jumlahkan nilai pada PINC dgn isi pd PIND dan simpan hasilnya pd lokasi 0x300 pd data memory Jawab: IN R1, PINC IN R2, PIND ADD R1, R2 STS 0x300, R1
; ; ; ;
R1 = PINC R2 = PIND R1 = R1 + R2 [0x300] = R1
Kusuma Wardana, M.Sc.
62
IN vs. LDS Kita tahu bahwa LDS jg bisa digunakan utk menyalin isi dr suatu lokasi ke GPR Lalu, apa keuntungan menggunakan IN untuk membaca isi dr I/O register ketimbang memakai LDS?
Kusuma Wardana, M.Sc.
63
IN vs. LDS Beberapa keuntungan menggunakan instruksi IN, sbb: CPU mengeksekusi instruksi IN lebih cepat drpd LDS (IN = 1 siklus, LDS = 2 siklus) IN adalah instruksi 2-byte, sdgkn LDS 4-byte. Berarti, IN menghabiskan lebih sedikit memori Kita dpt menggunakan nama dr I/O register sbg ganti alamatnya IN tersedia disemua instruksi dr keluarga AVR beberapa jenis AVR tdk mendukung fungsi LDS Ingat!!! Kita dapat menggunakan IN HANYA untuk mengakses I/O memory Sedangkan LDS dapat mengakses SEMUA data memory Kusuma Wardana, M.Sc.
64
OUT OUT to I/O Location
OUT Katakan ke CPU untuk menulis nilai pd GPR ke I/O register Setelah program ini dieksekusi, I/O register akan memiliki nilai yg sama dgn GPR
Kusuma Wardana, M.Sc.
65
Contoh: LDI R20, 0xE6 OUT SPL, R20 Pembahasan: Masukkan nilai 0xE6 ke register R20 Keluarkan nilai pd R20 ke SPL
Ingat!!! Kita tidak dapat menyalin secara LANGSUNG nilai ke I/O register atau ke lokasi SRAM Kusuma Wardana, M.Sc.
66
Contoh: Salin nilai PIND ke PORTA Jawab: IN R0, PIND OUT PORTA, R0
Kusuma Wardana, M.Sc.
67
Contoh: Buatlah program untuk mendapatkan data dari PINB dan kirim ke PORTC secara terus menerus Jawab: ULANGI: IN R16, PINB OUT PORTC, R16 JMP ULANGI ;loop
Kusuma Wardana, M.Sc.
68
MOV MOVe or Copy data among GPR
MOV Katakan ke CPU untuk menyalin data antar register GPR
Kusuma Wardana, M.Sc.
69
Contoh: MOV R10, R20 Pembahasan: Salin isi register R20 ke register R10 Sebagai contoh, jika R20 memiliki nilai 60, maka setelah eksekusi nilai R10 juga 60
Kusuma Wardana, M.Sc.
70
SUB SUBstract SUB Katakan ke CPU untuk mengurangi nilai Rd dengan Rr. SUB bekerja dalam GPR
Kusuma Wardana, M.Sc.
72
Contoh: Kurangi nilai register R10 dgn 1 (hex) Jawab: LDI R16, 0x1 SUB R10, R16
;R16 = 1 ;R10 = R10 – 1
Kusuma Wardana, M.Sc.
73
Contoh: Hitunglah 0x34 – 0x25 Jawab: LDI R20, 0x34 LDI R21, 0x25 SUB R20, R21
;R20 = 0x34 ;R21 = 0x25 ;R20 = R20 – R21
Kusuma Wardana, M.Sc.
74
INC INCrement INC Katakan ke CPU untuk Menambah nilai Rd dengan 1 dan simpan hasilnya di Rd
Kusuma Wardana, M.Sc.
75
Contoh: INC R2
; R2 = R2 + 1
Pembahasan: Tambahkan isi dari R2 dengan 1 Simpan hasilnya di R2
Kusuma Wardana, M.Sc.
76
Contoh: Naikkan satu nilai pada register data memory yang berlokasi di 0x430 Jawab: LDS R20, 0x430 INC R20 STS 0x430, R20
;R20 = [0x430] ;R20 = R20 + 1 ;[0x430] = R20
Kusuma Wardana, M.Sc.
77
DEC DECrement DEC Katakan ke CPU untuk mengurangi nilai Rd dengan 1 dan simpan hasilnya di Rd
Kusuma Wardana, M.Sc.
78
Contoh: Kurangi nilai register R10 dgn 1 Jawab: DEC R10
;R10 = R10 – 1
Kusuma Wardana, M.Sc.
79
Contoh: Isi register R15 dengan 3. Kemudian kurangi sampai menjadi nol Jawab: LDI R16, 3 ;R16 = 3 MOV R15, R16 ;R15 = 3 DEC R15 ;R15 = 2 DEC R15 ;R15 = 1 DEC R15 ;R15 = 0 DEC dapat digunakan untuk membentuk kalang (loop) Kusuma Wardana, M.Sc.
80
COM COMplement COM Komplemen (invert) isi dari Rd dan simpan hasilnya di Rd
Kusuma Wardana, M.Sc.
81
Contoh: Tempatkan nilai alamat 0x55 ke R2 kemudian kirim nilai R2 ini ke PORTB. Nilai R2 selanjutnya diinvers dan kirim kembali ke PORTB Jawab: LDS R2, 0x55 OUT PORTB, R2 COM R2 OUT PORTB, R2
;R2 = 0x55 ;PORTB = 0x55 ;invers R2 ;PORTB = 0xAA Kusuma Wardana, M.Sc.
82
Contoh: Berdasarkan program sblmnya, tulislah program utk men-toggle nilai I/O register PORTB secara terus-menerus Jawab:
L1:
LDI OUT COM OUT JMP
R16, 0x55 PORTB, R16 R16 PORTB, R16 L1
;R16 = 0x55(01010101) ;PORTB = 0x55 ;invers R16 ;PORTB = 0xAA(10101010) Kusuma Wardana, M.Sc.
83
Sintaks yang melibatkan 2 GPR
Lihat penggunaan tiap instruksi pada datasheet “AVR Instruction Set”
Kusuma Wardana, M.Sc.
84
Sintaks yang melibatkan 1 GPR
Lihat penggunaan tiap instruksi pada datasheet “AVR Instruction Set” Kusuma Wardana, M.Sc.
85
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.
86