Anda di halaman 1dari 18

Laporan Akhir

Praktikum Sistem Tertanam


Modul Praktikum
Akses I/O dan Software Delay
Nama : Sarah Suwarno
Hari : Rabu
Tanggal : 20 September 2023
Modul ke :1

Laboratorium Interface - Departemen Fisika


Fakultas Matematika dan Ilmu Pengetahuan Alam
Universitas Indonesia
2023
MODUL 1
Akses I/O dan Software Delay
Flowchart
Percobaan 1

Gambar 1. Flowchart percobaan 1

Pada percobaan pertama, praktikan diminta untuk membuat LED pada suatu port
mikrokontroller AVR ATmega128 menyala secara bergantian setiap beberapa waktu.
Flowchart pada Gambar 1 menjelaskan gambaran besar mengenai program yang mengatur
nyala LED tersebut.
Pada percobaan ini, praktikan memilih PORT E untuk dijadikan output yang akan
membuat LED tersebut menyala.
Karena LED pada PORT E mewakili 8 bit data pada register, maka praktikan meng-input
8 bit data pada register. Karena pembacaan 8 bit pada AVR mengikuti aturan LSB (Least
Significant Bit), maka praktikan meng-input data berbentuk biner 0B00000001 (desimal 1)
sebagai data yang di-input paling awal.
Kemudian, untuk membuat LED menyala secara bergantian, praktikan meng-input nilai
biner 0B00000010 (desimal 2) yang merupakan kelipatan 2 dari 1, lalu 0B00000100 (decimal
4) yang merupakan kelipatan 2 dari 2, dan seterusnya hingga nilai biner mencapai 0B10000000
(decimal 128). Setelah nilai biner mencapai 0B10000000, praktikan kembali meng-input nilai
0B01000000, dan seterusnya hingga nilai biner kembali ke 0B00000001. Data 8 bit ini lah
yang kemudian akan di-output dari register menuju PORT E yang kemudian akan di-display
oleh LED pada PORT E.
Supaya LED seakan menyala secara bergantian, praktikan menambah delay setelah LED
menyala. Delay yang diberikan sekitar sebesar 0,25 sekon.

Percobaan 2

Gambar 2. Flowchart percobaan 2


Pada percobaan kedua, praktikan juga membuat LED menyala secara bergantian. Hanya
saja, praktikan menambahkan fungsi tombol, yang dimana ketika tombol tersebut ditekan maka
LED yang sedang menyala akan tetap menyala.

Pada percobaan ini, praktikan memilih PORT B untuk dijadikan output yang akan
membuat LED menyala. Kemudian praktikan memilih PORT A untuk dijadikan input dari
tombol.
Seperti percobaan pertama, praktikan meng-input data berbentuk biner 0B00000001
(desimal 1) sebagai data yang di-input paling awal. Data tersebut akan di-output dari register
menuju PORT B yang kemudian akan di-display oleh LED.
Setelah LED menyala, program akan memeriksa apakah input di PORT A bernilai 0 yaitu
jika tombol ditekan, atau bernilai 1 yaitu ketika tombol tidak ditekan. Jika input bernilai 0,
maka program akan kembali mengeksekusi perintah sebelumnya, yaitu meng-input data biner
0B00000001, meng-output data dari register menuju PORT B, dan meng-display output. Jika
input bernilai 1, maka program akan mengeksekusi perintah setelahnya, yaitu meng-input data
biner 0B00000010, meng-output data dari register menuju PORT B, dan meng-display output.
Hal ini berlaku untuk seterusnya hingga nilai biner mencapai 0B10000000, yang dimana jika
input bernilai 0, maka program akan kembali mengeksekusi perintah sebelumnya, sedangkan
jika input bernilai 1, maka program akan mengeksekusi perintah setelahnya yaitu meng-input
data biner 0B00000001 dan meng-display data tersebut sebagai output di PORT B.
Supaya LED seakan menyala secara bergantian, praktikan menambah delay setelah LED
menyala. Delay yang diberikan sekitar sebesar 0,25 sekon.
HASIL
Percobaan 1

0B00000001 0B00000010

0B00000100 0B00001000

0B00010000 0B00100000
0B01000000 0B10000000
Tabel 1. Hasil percobaan 1 pada proteus
Pada percobaan pertama, terlihat bahwa LED menyala dari PORT E secara bergantian
dari 0B00000001 hingga 0B10000000. Kemudian, LED akan kembali menyala dengan
konfigurasi 0B01000000 hingga kembali lagi ke 0B00000001.

Percobaan 2

0B00000100 0B00010000
Keadaan tombol tidak ditekan Keadaan tombol ditekan
Tabel 2. Hasil percobaan 2 pada proteus
Pada percobaan kedua, terlihat bahwa LED terus menyala ketika tombol ditekan. Terlihat
juga bahwa LED bergantian menyala ketika tombol tidak ditekan.
PROGRAM
Percobaan 1
.INCLUDE "M128DEF.INC"

.ORG 0

LDI R16, HIGH(RAMEND)

OUT SPH, R16

LDI R16, LOW(RAMEND)

OUT SPL, R16

LDI R16, 0XFF

OUT DDRE, R16

MAIN: LDI R16, 0B00000001

OUT PORTE, R16

CALL DELAY

LDI R16, 0B00000010

OUT PORTE, R16

CALL DELAY

LDI R16, 0B00000100

OUT PORTE, R16

CALL DELAY

LDI R16, 0B00001000

OUT PORTE, R16

CALL DELAY

LDI R16, 0B00010000

OUT PORTE, R16

CALL DELAY

LDI R16, 0B00100000

OUT PORTE, R16

CALL DELAY

LDI R16, 0B01000000

OUT PORTE, R16

CALL DELAY

LDI R16, 0B10000000


OUT PORTE, R16

CALL DELAY

LDI R16, 0B01000000

OUT PORTE, R16

CALL DELAY

LDI R16, 0B00100000

OUT PORTE, R16

CALL DELAY

LDI R16, 0B00010000

OUT PORTE, R16

CALL DELAY

LDI R16, 0B00001000

OUT PORTE, R16

CALL DELAY

LDI R16, 0B00000100

OUT PORTE, R16

CALL DELAY

LDI R16, 0B00000010

OUT PORTE, R16

CALL DELAY

RJMP MAIN

.ORG 0X900

DELAY: LDI R18,10

OUTER_LOOP: LDI R28, LOW(3037)

LDI R29, HIGH(3037)

DELAY_LOOP: ADIW R28,1

BRNE DELAY_LOOP

DEC R18

BRNE OUTER_LOOP

RET
Percobaan 2
.INCLUDE "M128DEF.INC"

.ORG 0

LDI R16, HIGH(RAMEND)

OUT SPH, R16

LDI R16, LOW(RAMEND)

OUT SPL, R16

LDI R16, 0XFF

OUT DDRB, R16

LDI R16, 0x0

OUT DDRA, R16

MAIN1: LDI R16, 0B00000001

OUT PORTB, R16

CALL DELAY

SBIC PINA,0

RJMP MAIN2

RJMP MAIN1

MAIN2: LDI R16, 0B00000010

OUT PORTB, R16

CALL DELAY

SBIC PINA,0

RJMP MAIN3

RJMP MAIN2

MAIN3: LDI R16, 0B00000100

OUT PORTB, R16

CALL DELAY

SBIC PINA,0

RJMP MAIN4

RJMP MAIN3
MAIN4: LDI R16, 0B00001000

OUT PORTB, R16

CALL DELAY

SBIC PINA,0

RJMP MAIN5

RJMP MAIN4

MAIN5: LDI R16, 0B00010000

OUT PORTB, R16

CALL DELAY

SBIC PINA,0

RJMP MAIN6

RJMP MAIN5

MAIN6: LDI R16, 0B00100000

OUT PORTB, R16

CALL DELAY

SBIC PINA,0

RJMP MAIN7

RJMP MAIN6

MAIN7: LDI R16, 0B01000000

OUT PORTB, R16

CALL DELAY

SBIC PINA,0

RJMP MAIN8

RJMP MAIN7

MAIN8: LDI R16, 0B10000000

OUT PORTB, R16

CALL DELAY

SBIC PINA,0
RJMP MAIN1

RJMP MAIN8

.ORG 0X900

DELAY: LDI R18,10

OUTER_LOOP: LDI R28, LOW(3038)

LDI R29, HIGH(3038)

DELAY_LOOP: ADIW R28,1

BRNE DELAY_LOOP

DEC R18

BRNE OUTER_LOOP

RET
ANALISIS
Percobaan 1

Kode di atas adalah yang paling awal dituliskan pada program percobaan 1 dan
percobaan 2. .Include adalah directive. Directive berfungsi untuk memberikan informasi
kepada assembler terkait external source code, penyimpanan memori, dan sebagainya. .Include
adalah directive yang berfungsi untuk menentukan external source code file yang akan kita
pakai. Karena kita memakai mikrokontroler AVR ATmega128 maka file yang harus dipakai
adalah m128def.inc. Sedangkan .ORG adalah directive yang berfungsi untuk menentukan
lokasi program pada memori.
LDI (load immediately) adalah instruksi yang digunakan untuk meng-input data pada
register.
SPH (stack pointer high) dan SPL (stack pointer low) adalah register untuk mengatur
stack. Stack adalah storage dari RAM yang digunakan sementara untuk menyimpan data atau
address dari CPU. Stack digunakan karena jumlah register yang terbatas. SPH dan SPL
merupakan bagian dari stack pointer yang merupakan register 16 bit. SPH menyimpan 8 bit
tertinggi pada stack pointer sedangkan SPL menyimpan 8 bit terendah.

Kode di atas digunakan untuk menjadikan Port E sebagai output, yaitu dengan meng-
input data 0xFF pada (DDR) data direction register.
Kode di atas merupakan subroutine MAIN pada program. Kode ini merupakan
implementasi dari flowchart yang sebelumnya sudah dijelaskan. LDI R16 digunakan untuk
meng-input data biner 8 bit ke register. Pada percobaan ini praktikan menggunakan register
16. OUT PORTE digunakan untuk meng-output data dari register ke PORTE. Sedangkan
CALL DELAY digunakan untuk memanggil subroutine DELAY yang akan dijelaskan setelah
ini. Subroutine DELAY digunakan untuk menciptakan selang waktu tertentu setelah LED
menyala.

Kode di atas merupakan subroutine DELAY yang berisikan subroutine OUTER_LOOP


dan DELAY_LOOP pada program. Subroutine ini digunakan juga pada percobaan kedua.
Address untuk subroutine ini diubah dari bagian program lainnya menggunakan directive
.ORG. Hal ini dilakukan untuk memudahkan mikrokontroler mengambil data di memori.
Pada percobaan ini praktikan diminta untuk mengatur selang waktu selama 0,25 sekon.
Kita dapat mengatur selang waktu dengan mengatur lamanya kode tereksekusi pada subroutine
DELAY.
Frekuensi clock pada mikrokontroler AVR sebesar 10MHz. Subroutine DELAY_LOOP
terdiri atas 262,145 siklus. Oleh karena itu dibutuhkan sekitar 9,53⁓10 kali pengulangan agar
selang waktu dapat mencapai 0,25 sekon. Perhitungan ini memiliki error yaitu sekitar 3038
siklus setiap delay.
Pada kode di atas, LDI R18,10 dan DEC R18 digunakan untuk mengatur pengulangan.
DEC adalah instruksi decrement yang melakukan operasi (data pada Rn)-1 dan membuat
program melakukan pemograman selama (data pada Rn) ≠ 0. BRNE adalah instruksi yang
digunakan untuk merujuk pada subroutine yang akan dieksekusi setiap pengulangan.
Sedangkan ADIW adalah instruksi untuk meng-input data 8 bit pada gabungan dua register
(gabungan dua register memiliki data 16 bit).

Percobaan 2

Sama seperti percobaan 1, terdapat directive .INCLUDE dan .ORG serta stack pointer
SPH dan SPL yang sudah dijelaskan sebelumnya. Pada percobaan 2, praktikan memilih PORT
B untuk dijadikan output dan PORT A untuk dijadikan input. Dengan demikian diperlukan data
0XFF untuk diinput ke register DDRB dan data 0X0 untuk diinput ke register DDRA.
Kode di atas merupakan bagian utama dari program. Program terbagi menjad 8
subroutine yaitu MAIN1 sampai MAIN8. Pada tiap subroutine MAIN terdapat instruction
yang sama. Instruction LDI dan OUT PORTB untuk menampilkan output pada LED. CALL
DELAY digunakan untuk memanggil subroutine DELAY.
PINA digunakan untuk memeriksa nilai input pada PORTA. SBIC digunakan untuk
mengambil keputusan. Jika PINA clear (bernilai 0), maka program melewatkan perintah
selanjutnya untuk dieksekusi. Jika PINA set (bernilai 1), maka program mengeksekusi perintah
selanjutnya. Pada percobaan ini, perintah setelah SBIC adalah RJMP. RJMP digunakan untuk
mengeksekusi subroutine yang dirujuk. Setelah SBIC subroutine yang dirujuk adalah
subroutine setelahnya. Barulah setelah itu RJMP merujuk pada subroutine yang sedang
berlaku.
PINA akan bernilai clear setelah tombol ditekan dan bernilai 1 jika tombol dibiarkan. Hal
ini dikarenakan adanya pull-up resistor pada tiap pin AVR.
Gambar 3. Pull-up resistor pada tiap pin AVR
[Mazidi, M. Ali; Naimi, Samad; Naimi, Sepehr (2011). The AVR Microcontroller and
Embedded Systems using Assembly and C. Prentice Hall]

Jika kita memberikan input 1, maka switch akan tertutup. Jika kita memberikan input 0,
maka switch akan terbuka. Tombol yang ditekan memberikan input 0.

Karena pada percobaan 2 diminta untuk memberikan selang waktu antara subroutine
MAIN sebesar 0,25 sekon, maka subroutine DELAY memiliki kode yang sama seperti
percobaan 1.
KESIMPULAN
1. Pada percobaan MODUL1: Akses I/O dan Software Delay kali ini praktikan
mempelajari tentang pemrograman bahasa Assembly untuk menyusun sistem
mikrokontroler ATmega128. Praktikan mempelajari struktur dari program yang
menggunakan bahasa Assembly seperti instruction, subroutine, directives, dan lain-
lain.
2. Mikrokontroler AVR ATMega128 memiliki akses Input/Output pada PORT nya.
Untuk membuat suatu PORTn menjadi output kita perlu menginput nilai 0xFF pada
register DDRn nya. Sedangkan untuk membuat suatu PORTn menjadi input kita perlu
menginput nilai 0x0 pada register DDRn nya. Pada tiap PORT di mikrokontroler AVR
ATMega128 terdapat pull-up resistor.
3. Pada bahasa Assembly, kita dapat mengatur software delay dengan mengatur lamanya
kode tereksekusi pada subroutine DELAY.

REFERENSI
[1] Mazidi, M. Ali; Naimi, Samad; Naimi, Sepehr (2011). The AVR Microcontroller and
Embedded Systems using Assembly and C. Prentice Hall
[2] ATmega128L 8-bit Atmel Microcontroller with 128KBytes In-System Programmable
Flash. (2022). Retrieved September 20, 2023, from Components101 website:
https://components101.com/microcontrollers/atmega128-8-bit-microcontroller
[3] (N.d.). 8-Bit Atmel Microcontroller with 128KBytes In-System Programmable Flash.
https://www.microchip.com/

LINK VIDEO PERCOBAAN


https://drive.google.com/drive/folders/16xRuKOMDqCd5g0qRRjNKxR_ghUQlG1r2?usp=dr
ive_link

Anda mungkin juga menyukai