oleh button# Case Study Sesi Siang — Modul 2
> Pembuat soal: **AX**
```text
Nama : Ahmad Malik Prasetyo
NPM : 2406416270
Anggota Kelompok :
1. David Alexander
2. Sabbia Meilandri
3.
```
---
## Soal
Mosheva, seorang mantan prajurit IDF yang merasa dikhianati, telah mengubah dirinya menjadi aktivis anti-Israel yang radikal. Dengan rasa dendam yang membara, dia memutuskan untuk menciptakan alat untuk melawan IDF, tapi ada satu masalah — dia tidak paham teknologi AVR.
Berganti jadi Musyaffa, ia memandang sekeliling ruangannya, mencari solusi. Lalu, dia melihat laptopnya dan memutuskan untuk meminta bantuan kepada seorang ahli.
> *"Hai, aku butuh bantuanmu,"* tulisnya di forum online. *"Aku ingin membuat sistem sederhana yang bisa mengontrol lampu merah dan hijau dengan tombol. Aku ingin mengirim sinyal darurat kepada sekutu. Ada yang bisa membantu?"* 🔴
**Apakah Anda bisa membantu Musyaffa menciptakan sistem yang dia inginkan?**
---
## Penjelasan Kriteria
1. Kode akan memiliki 1 tombol input yang terhubung ke pin PD3
2. Akan ada 2 LED dimana akan terhubung ke PD4 (anggap merah) dan PD5 (anggap hijau) masing - masing
3. Button akan bersifat pull up
4. Ketika tombol ditekan maka Lampu Merah (PD4) menyala, ketika Tidak ditekan maka lampu Hijau (PD5) yang akan menyala
## Code
```avrasm
#define __SFR_OFFSET 0x00
#include "avr/io.h"
.global main
main:
SBI DDRD, 5
SBI DDRD, 4
CBI DDRD, 3
SBI PORTD, 3
SBI PORTD, 5
CBI PORTD, 4
CLR R20
loop:
SBIC PIND, 3
RJMP turn_off
turn_on:
SBI PORTD, 5
CBI PORTD, 4
LDI R20, 1
RJMP loop
turn_off:
CBI PORTD, 5
SBI PORTD, 4
CLR R20
RJMP loop
d_outer:
LDI R24, lo8(10000)
LDI R25, hi8(10000)
d_inner:
SBIW R24, 1
BRNE d_inner
DEC R18
BRNE d_outer
RET
```
## Foto Rangkaian


---
## Soal Teori
### Teori
**1.** Jelaskan apa yang dimaksud dengan konfigurasi *pull-up* pada pin input ATmega328P. Bagaimana cara mengaktifkan internal pull-up resistor melalui register, dan apa pengaruhnya terhadap pembacaan nilai logika pada pin tersebut saat tombol ditekan maupun tidak ditekan?
Jawaban:
Konfigurasi pull-up pada pin input ATmega328P cukup dapat dilakukan dengan memberikan sinyal high kepada port yang diinginkan. Pin input button akan dibaca sebagai pull-up registor dengan line `SBI PORTD, 3` dimana akan dinyalakan fungsi pull-up oleh button.
---
### Analisis
**2.** Pada sistem Musyaffa, tombol dan LED menggunakan pin pada PORTD. Jelaskan bagaimana kode Assembly yang Anda buat mengonfigurasi pin PD3 sebagai **input** dengan pull-up dan pin PD4 serta PD5 sebagai **output**. Sebutkan register apa saja yang digunakan serta nilai yang di-set pada masing-masing register.
Jawaban:
Untuk menentukan pin PD3 sebagai input, kita dapat meng-initialize PD# dengan `CBI DDRD, 3` dimana kode ini akan menyatakan bahwa arah ke pin PD 3 adalah sebuah input (CBI).
Lalu untuk pin PD4 dan PD5 cukup disamakan dengan starting init `SBI DDRD, 4/5` untuk dinyatakan sebagai output.
Sebelum memulai, kita mengawali dengan memberikan input high kepada PD5 dengan `SBI PORTD, 5` dan low kepada PD4 `CBI PORTD, 4`.
---
**3.** Pada sistem Musyaffa, ketika tombol ditekan, lampu merah menyala dan lampu hijau mati. Jelaskan bagaimana program Assembly membedakan kondisi tombol ditekan dan tidak ditekan menggunakan instruksi seperti `SBIC`/`SBIS`, serta bagaimana instruksi `SBI`, `CBI`, dan `RJMP` digunakan untuk mengontrol kedua LED secara bergantian.
Jawaban:
Dengan bagian `loop`, terdapat register `SBIC` dimana akan melompat/skip arahan berikut ketika button/pin yang terhubung dipencet/mengirim input high. Setelah loop ini, program akan lanjut ke `turn_on` dimana lampu merah akan dimatikan `CBI PORTD, 4` dan lampu hijau akan dinyalakan `SBI PORTD, 5`. Setelah itu akan di lempar kembali ke `loop`.
Jika button di press, maka register `SBIC` akan melanjutkan kode ke bagian `turn_off` dimana kebalikan yang terjadi. Ini akan terus kembali ke `loop` hingga tidak ada power source.