Anda di halaman 1dari 8

Laporan Akhir

Sistem Tertanam
Modul Praktikum
Pemrograman I/O (Input/Ouput) Mikrokontroler dengan Bahasa
Assembly

Nama : Andita Rizky Salsabila


NPM : 170697464
Hari : Senin
Tanggal : 23 Oktober 2019
Modul ke :1

Laboratorium Komputer - Departemen Fisika


Fakultas Matematika dan Ilmu Pengetahuan Alam
Universitas Indonesia
2019
1

MODUL 1
Pemrograman I/O (Input/Ouput) Mikrokontroler dengan
Bahasa Assembly

DATA PENGAMATAN
Percobaan 1 – Menentukan alamat RAMEND

Gambar 1.1. Hasil Percobaan Pertama

Hasil Percobaan 1
Instruksi .INCLUDE digunakan untuk import library pada percobaan kali ini
digunakan library "M128DEF.INC" sehingga dapat mengenali fungsi seperti port,
ddr, dan nomer nomer register yang dimiliki atmega128.
.ORG 0 digunakan untuk menuliskan awal alamat program, yaitu 0x0000. Hal ini
dimaksudkan agar program memory tidak tumpang tindih dengan data memory, 4
baris terakhir digunakan untuk menentukan isi stack pointer dengan alamat paling
akhir untuk HIGH dan alamat paling awal untuk LOW melalui register16 hal ini
diperlukan agar program nantinya tidak tumpeng tindah, dipilih register16 karena
Universitas Indonesia
2

register 1-15 sudah diisi program atmega128, agar tidak terjadi error dipilihlah
register16.

Percobaan 2

Universitas Indonesia
3

Gambar 1.2. Hasil Percobaan Kedua

Program Percobaan 2
.INCLUDE<M128DEF.INC>
.ORG 0
LDI R16, LOW(RAMEND)
OUT SPL, R16
LDI R16, HIGH(RAMEND)
OUT SPH, R16
LDI R16, 0XFF
OUT DDRD, R16
OUT DDRB, R16
LDI R16, 0x00
OUT DDRC, R16
MAIN:
IN R16, PINC
COM R16
OUT PORTB, R16
LDI R16, 0b11110000
OUT PORTD, R16

Universitas Indonesia
4

CALL DELAY
LDI R16, 0b00001111
OUT PORTD, R16
CALL DELAY
RJMP MAIN

DELAY:
LDI R18,8
OUTER_LOOP:
LDI R28, LOW(3027)
LDI R29, HIGH(3037)

DELAY_LOOP:
ADIW R28,1
BRNE DELAY_LOOP
DEC R18
BRNE OUTER_LOOP
RET

Hasil Percobaan 2
.INCLUDE<M128DEF.INC>
.ORG 0
LDI R16, LOW(RAMEND)
OUT SPL, R16
LDI R16, HIGH(RAMEND)
OUT SPH, R16
LDI R16, 0XFF
OUT DDRD, R16
OUT DDRB, R16
LDI R16, 0x00
OUT DDRC, R16

LDI R16, 0xFF diperlukan untuk mengisi R16 dengan 0xFF sehingga bisa
menginisiasi suatu DDR sebagai output, disini digunakan pull up yang berfungsi
mencegah pin dalam kondisi floating, kondisi floating dapat mengakibatkan

Universitas Indonesia
5

peningkatan konsumsi daya, dalam beberapa kasus dapat terjadi kerusakan perangkat
dan berfungsi agar input bernilai stabil tinggi. Pada percobaan kali ini pin B dan D
dibuat sebagai output hal ini ditandai dengan memasukkan nilai 0b11111111 pada
register 16. Jika bernilai 1 maka DDR sebagai output dan jika bernilai 0 maka DDR
sebagai input. Disini yang merupakan input ialah pin C.

MAIN:
IN R16, PINC
COM R16
OUT PORTB, R16
LDI R16, 0b11110000
OUT PORTD, R16
CALL DELAY
LDI R16, 0b00001111
OUT PORTD, R16
CALL DELAY
RJMP MAIN

Instruksi ini berfungi untuk mengisi register R16 karena mengingat lampu led
menyala selang seling per 4 bit maka bit yang dimasukan ke R16 nilai 0b11110000,
angka satu menunjukan LED menyala sedangkan angka 0 menunjukan LED mati,
lalu bit yang tersimpan dalam R16 dikeluarkan melalui Port D yang sebelumnya
sudah diinisialisasi sebagai output. Begitu juga R16 diisi dengan nilai 0b00001111
yang dikeluarkan melalui port D yang sudah diinisialisasi sebagai output. digunakan
COM R17 karena active low, bit yang berubah sesuai output PINC akan dikirim
kebali ke PORTD untuk menyalakan LED..

DELAY:
LDI R18,8
OUTER_LOOP:
LDI R28, LOW(3027)
LDI R29, HIGH(3037)

Universitas Indonesia
6

DELAY_LOOP:
ADIW R28,1
BRNE DELAY_LOOP
DEC R18
BRNE OUTER_LOOP
RET

Ini merupakan subroutine untuk delay, perubahan LED (on/off) kadang tidak terlihat
mata, maka perlu ditambahkan delay time, perhitungannya ldi 1 cycle, adiw 1 cycle,
brne 2 cycle jika terpenuhi, 1 cycle jika tidak terpenuhi, jadi total waktu untuk delay
loop 4*0xFF(looping) + 3(overflow)+2(ldi) = 262145 cycle, pada atmega128 memili
frekuensi clock 8 Mhz,sehingga agar waktu delaynya 0,25 hanya diperlukan
2Mhz/262145 = 7,63 disini dibulatkan menjadi 8, total waktu menjadi
(262145+1(dec)+2(brne))*8+1(ldi) = 2097185 cycle kelebihan 9185 cycle atau
12148 bit/outer loop atau sebesear 12148/4 = 3036.5 yang dibulatkan 3037 per delay
loop, yang akan menjadi faktor koreksi.

Percobaan 3 – Running LED


[TIDAK SELESAI]

Tugas Akhir – Variasi Running LED


[TERLAMPIR]

KESIMPULAN
Dari praktikum ini dapat disimpulkan:
 Diperlukan penentuan stack pointer agar program-program berikutnya tidak
saling tumpeng tindih.
 IN digunakan untuk memberikan bit pada suatu pin dan out digunakan untuk
mengeluarkan bit yang tersimpan pada suatu pin
 Diperlukan bit tinggi untuk menginisiasi output dan bit rendah untuk
menginisiasi input

Universitas Indonesia
7

REFERENSI
[1] Mazidi, M. Ali; Naimi, Samad; Naimi, Sepehr (2011). The AVR Microcontroller
and Embedded Systems using Assembly and C. Prentice Hall.

Universitas Indonesia

Anda mungkin juga menyukai