---
# System prepended metadata

title: CS2_MBD_DanishAlFayyadhSunarta_2406416951

---

# Case Study Sesi Pagi — Modul 2

> Pembuat soal: **AX**

```text
Nama : Danish Al Fayyadh Sunarta
NPM  : 2406416951
Anggota Kelompok : 
1. Muhamad Rifqi Fadil Itsnain
2. Haikal Gifari Inzaghi
3. Naziehan Labieb
```

---

## 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 protes kepada IDF. 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 PD2
2. Akan ada 2 LED dimana akan terhubung ke PD6 (anggap merah) dan PD7 (anggap hijau) masing - masing
3. Button akan bersifat pull down
4. Ketika tombol ditekan maka Lampu Hijau (PD7) menyala, ketika Tidak ditekan maka lampu merah (PD6) yang akan menyala

## Code

```avrasm
; Danish Al Fayyadh Sunarta - 2406416951

#define __SFR_OFFSET 0
#include <avr/io.h>

.global main

main:
  ; Konfigurasi Pin
  sbi DDRD, 6      ; Set PD6 (LED Merah) sebagai output
  sbi DDRD, 7      ; Set PD7 (LED Hijau) sebagai output
  cbi DDRD, 2      ; Set PD2 (Tombol) sebagai input
  cbi PORTD, 2     ; Nonaktifkan pull-up internal untuk PD2 (pull-down)

loop:
  sbis PIND, 2     ; Skip instruksi berikutnya jika pin PD2 HIGH.
  rjmp tombol_lepas; Jika tidak di-skip (PD2 LOW), lompat ke `tombol_lepas`.

tombol_ditekan:
  cbi PORTD, 6     ; Matikan LED Merah (PD6).
  sbi PORTD, 7     ; Nyalakan LED Hijau (PD7).
  rjmp loop        ; balik ke awal loop untuk cek ulang.

tombol_lepas:
  sbi PORTD, 6     ; Nyalakan LED Merah (PD6).
  cbi PORTD, 7     ; Matikan LED Hijau (PD7).
  rjmp loop        ; balik ke awal loop untuk cek ulang.
```

## Foto Rangkaian

![WhatsApp Image 2026-02-09 at 11.27.06](https://hackmd.io/_uploads/HyPDz1DP-g.jpg)

![WhatsApp Image 2026-02-09 at 11.27.04](https://hackmd.io/_uploads/rybOMJPDWe.jpg)

![WhatsApp Image 2026-02-09 at 11.27.02](https://hackmd.io/_uploads/Hkn_fJwPbe.jpg)


---

## Soal Teori

### Teori

**1.** Jelaskan perbedaan fungsi dari register **DDRx**, **PORTx**, dan **PINx** pada ATmega328P. Jika sebuah pin dikonfigurasi sebagai *input* dan bit PORTx-nya di-set menjadi `1`, apa yang terjadi pada pin tersebut?

Jawaban:

-   DDRx (Data Direction Register): Register ini digunakan untuk mengatur arah setiap pin pada sebuah port (misalnya, Port A, B, C, atau D). Jika bit pada register DDRx diatur ke 1, pin yang bersangkutan akan berfungsi sebagai output. Jika diatur ke 0, pin akan berfungsi sebagai input.
-   PORTx (Data Register): Fungsi register ini bergantung pada konfigurasi DDRx:
    -   Jika pin adalah output, menulis nilai ke bit PORTx akan mengontrol level tegangan pin tersebut. 1 akan menghasilkan tegangan HIGH, dan 0 akan menghasilkan tegangan LOW.
    -   Jika pin adalah input, menulis nilai 1 ke bit PORTx akan mengaktifkan resistor pull-up internal pada pin tersebut. Ini berguna untuk memastikan pin memiliki keadaan default HIGH jika tidak terhubung ke sinyal eksternal. Menulis 0 akan menonaktifkan resistor ini.
*   **PINx (Input Pins Address):** Register ini digunakan khusus untuk **membaca** status logika (HIGH atau LOW) dari setiap pin pada sebuah port. Register ini bersifat *read-only*.

Jadi, jika sebuah pin dikonfigurasi sebagai **input** (bit DDRx = `0`) dan bit PORTx-nya di-set menjadi `1`, maka **resistor pull-up internal pada pin tersebut akan diaktifkan**.

### Analisis

**2.** Pada sistem Musyaffa, tombol digunakan untuk mengontrol lampu merah dan hijau. Jelaskan bagaimana kode Assembly yang Anda buat mengonfigurasi pin tombol sebagai **input** dan pin LED sebagai **output**. Sebutkan register apa saja yang digunakan serta nilai yang di-set pada masing-masing register.


Jawaban:



**3.** Pada saat tombol ditekan dalam sistem Musyaffa, bagaimana program Assembly mendeteksi perubahan status tombol dan memutuskan LED mana yang harus menyala? Jelaskan alur logika instruksi yang digunakan (misalnya `SBIC`/`SBIS`, `RJMP`, `SBI`/`CBI`) beserta peran masing-masing instruksi dalam proses pengambilan keputusan tersebut.

Jawaban:

[jawab]