Sistem Tertanam
Modul Praktikum
Pemrograman I/O (Input/Ouput) Mikrokontroler dengan Bahasa
Assembly
MODUL 1
Pemrograman I/O (Input/Ouput) Mikrokontroler dengan
Bahasa Assembly
DATA PENGAMATAN
Percobaan 1 – Menentukan alamat RAMEND
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
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.
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