PRAKTIKUM VII
AVR INSTRUCTION
1. Percobaan 0
Source Code
Hasil Program :
Analisa
:
Pada program diatas digunakan untuk menentukan STACK POINTER agar berada
dalam alamat RAM terakhir. Pada ATmega128 alamat RAM terakhir adalah 0x10FF.
Dimana Low Byte adalah 0xFF dan High Byte adalah 0x10. Sehingga dalam
melakukan operasi pasa R0 sampai dengan R15 tidak terganggu oleh STACK.
2. Percobaan 1
Source Code
Hasil Program :
Analisa
:
Pada percobaan 1 mahasiswa diminta untuk memindahkan GPR ke RAM dengan
menggunakan indirect. Dengan menggunakan perintah BRNE, perintah ini akan
terus melakukan Brench / Percabangan jika status Zero Flag adalah 0. Jika status
zero flag sama dengan 1 maka BRNE akan berhenti melakukan percabangan. Perlu
Hasil Program :
PENGISIAN R24 s.d. R31
Hasil Program :
RAM 190 s.d 197
REGISTER DATA
Analisa
:
Pada percobaan ini dilakukan pemindahan nilai pada alamat yang sesuai dengan
soal yang dimaksud. Dengan menggunakan perulangan maka dipindah data 0
sampai dengan 7 ke alamat 0x197 sampai dengan alamat 0x190. Kemudian dengan
memanfaatkan register indirect addressing yang sebelumnya maka dipindahkan
data dari 0x190 sampai dengan 0x197 ke alamat R16 sampai dengan R23. DImana
alamt R16 adalah 0x10.
5. Percobaan 4
Source Code
Hasil Program :
PORTA
PORTB
Analisa
:
Pada percobaan diatas dilakukan output nilai pada PORTA dan PORTB. Untuk
membuat PORT menjadi output maka nilai DDR harus diubah menjadi 1. Sehingga
nilai PORT dapat menjadi output dengan bantuan perintah OUT maka dapat
dimasukkan nilai sesuai dengan yang diinginkan oleh soal dimana nilai di PORTA
adalah 0x55 dan di PORTB adalah 0xAA.
6. Percobaan 5
Source Code
Hasil Program :
INPUT
OUTPUT
Analisa
:
Pada percobaan ini dilakukan percobaan untuk membaca nilai dari PORTC . Agar
nilai PORT dapat digunakan sebagai input maka nilai pada DDR harus diubah
menjadi 0 dapat dibaca. Dengan menggunakan perintah IN maka dapat dibaca nilai
PORTC ke register (GPR). Sehingga didapatkan nilai yang ada di PORTC.
7. Percobaan 6
Source Code
Hasil Program :
KONDISI 1
KONDISI 2
Analisa
:
Pada percobaan ini mahasiswa diminta untuk melakukan pengubahan output yang
ada pada PORTA dimana masing masing nilai diubah dari 0x55 menjadi 0xAA dan
sebalikya dengan mengggunakan delay. Delay dibuat dengan memanfaatkan cycle
tiap instruksi (non timer).
8. Percobaan 7
Source Code
Hasil Program :
SREG
HASIL
Analisa
:
Pada percobaan diatas dilakukan instruksi penjumlahan antara 0x38 dan 0x2F. Pada
percobaan ini R17 digunakan sebagai Low Byte dan R18 sebagai High Byte. Untuk
mengatisipasi adanya carry maka digunakan instruksi BRCC dimana apabila carry
flag = 0 maka akan loncat ke label. Jika Carry Flag =1 maka akan ke instruksi di
bawahnya. Pada percobaan ini Pada Status register untuk Half Flag menjai 1 karena
ada loncatan nilai dari Bit 3 ke Bit 4.
9. Percobaan 8
Source Code
Hasil Program :
SREG
HASIL
Analisa
:
Pada percobaan diatas dilakukan instruksi penjumlahan antara 0x9C dan 0x64. Pada
percobaan ini R17 digunakan sebagai Low Byte dan R18 sebagai High Byte. Untuk
mengatisipasi adanya carry maka digunakan instruksi BRCC dimana apabila carry
flag = 0 maka akan loncat ke label. Jika Carry Flag =1 maka akan ke instruksi di
bawahnya. Pada percobaan ini Pada Status register untuk Half Flag menjai 1 karena
ada loncatan nilai dari Bit 3 ke Bit 4. Dan pada Carry Flag bernilai 1 karena ada nilai
lebih dari penjumlahan ini dan nilai Carry tersebut ditampung pada R18.
10. Percobaan 9
Source Code
Hasil Program :
SREG
HASIL
Analisa
:
Pada percobaan diatas dilakukan instruksi penjumlahan antara 0x9C dan 0x64. Pada
percobaan ini R17 digunakan sebagai Low Byte dan R18 sebagai High Byte. Untuk
mengatisipasi adanya carry maka digunakan instruksi BRCC dimana apabila carry
flag = 0 maka akan loncat ke label. Jika Carry Flag =1 maka akan ke instruksi di
bawahnya. Dan pada Carry Flag bernilai 1 karena ada nilai lebih dari penjumlahan ini
dan nilai Carry tersebut ditampung pada R18.
11. Percobaan 10
Source Code :
Hasil Program :
SREG (Saat 0x80 + 0x80)
HASIL
Analisa
:
Pada percobaan ini dilakukan penjumlahan 0x80 dan 0x80. Dari hasil tersebut
didapatkan nilai 0x0 100 yang ditampung di register 16 (R16). Karena R16
merupakan register 8 bit maka nilai yang ada di R16 adalah 0x00. Kemudaian nilai
carry hasil penjumlahan di jumlahkan dengan 0x02. DImana nilai carry sebelumnya
adalah 1 maka jika dijumlahkan dengan 0x02 maka hasil di R16 adalah 0x03.