8255 PPI Explanation & LED Blinking Circuit Complete Explanation



1. Pendahuluan [kembali]

Dalam dunia elektronika digital dan sistem tertanam, kemampuan untuk menghubungkan mikroprosesor dengan perangkat periferal (luar) adalah sebuah konsep fundamental. Salah satu contoh paling klasik dan mendasar untuk mempelajari konsep ini adalah dengan membuat sebuah LED berkedip. Proyek ini, meskipun sederhana, secara efektif mendemonstrasikan seluruh alur kerja dari sebuah sistem mikroprosesor: mulai dari eksekusi program oleh CPU, pengiriman perintah melalui bus, hingga kontrol langsung pada komponen fisik.

Pada praktikum ini, kita akan membangun sebuah sistem berbasis mikroprosesor legendaris Intel 8086. Untuk menjembatani komunikasi antara 8086 dengan komponen output (LED), kita akan menggunakan IC antarmuka yang sangat serbaguna, yaitu 8255A Programmable Peripheral Interface (PPI). Rangkaian ini akan menjadi landasan untuk memahami bagaimana sebuah program dalam bahasa assembly dapat memberikan perintah kepada perangkat keras secara nyata.

   

2. Tujuan [kembali]

  1. Memahami arsitektur dasar dan fungsi dari mikroprosesor 8086 dan IC 8255A PPI.

  2. Mempelajari cara antarmuka (interfacing) antara 8086 dengan 8255A, termasuk konsep demultiplexing bus alamat/data.

  3. Memahami cara memprogram 8255A PPI dengan mengirimkan Control Word untuk mengkonfigurasi mode port.

  4. Merancang dan mengimplementasikan program bahasa assembly sederhana untuk 8086.

  5. Mengendalikan perangkat output eksternal (LED) melalui sistem mikroprosesor.


3. Alat dan Bahan [kembali]

IC 8086 (mikroprosesor).
    Mikroprosesor 8086 adalah pusat pengendali utama sistem. Fungsinya mirip otak: menerima instruksi dari program, mengatur alur kerja perangkat lain, serta mengolah data hasil konversi dari ADC0804. Karena 8086 menggunakan bus data dan alamat yang multiplexed, maka ia membutuhkan latch (74HC373) untuk memisahkan alamat rendah dan data agar dapat diakses oleh perangkat eksternal.


IC 8255 PPI (Programmable Peripheral Interface)


    IC ini berfungsi sebagai penghubung antara mikroprosesor 8086 dan perangkat luar, dalam hal ini ADC0804. 8255 memiliki tiga port paralel (A, B, dan C) yang bisa dikonfigurasi sebagai input maupun output. Dalam rangkaian ini, port A biasanya digunakan untuk membaca data digital hasil konversi ADC, sedangkan port C digunakan untuk memberikan sinyal kontrol seperti WR (Write), RD (Read), dan membaca status INTR dari ADC.


IC 74HC373(Latch Alamat/Data)

    Karena 8086 menggunakan bus alamat dan data yang sama pada pin AD0–AD7, maka dibutuhkan latch untuk mengunci alamat rendah agar tidak hilang ketika bus dipakai untuk transfer data. 74HC373 menerima sinyal ALE (Address Latch Enable) dari 8086 untuk mengunci nilai alamat sehingga perangkat eksternal seperti 8255 atau ADC dapat diakses dengan benar.


Power Supply +5V dan Ground





        Semua IC dalam rangkaian ini bekerja pada tegangan 5V. Oleh karena itu, sumber tegangan DC +5V dibutuhkan untuk memberi catu daya pada 8086, 8255, 74HC373, dan ADC0804. Jalur ground berfungsi sebagai referensi tegangan dan jalur balik arus agar sistem bekerja stabil.


LED / logic probe



    LED/logic probe digunakan sebagai indikator untuk menampilkan data digital hasil konversi. Misalnya, jika input 2.5V menghasilkan data 01111111, maka pola LED/logic probe juga akan merepresentasikan biner tersebut. Voltmeter dipakai untuk memantau tegangan analog yang masuk ke ADC dari potensiometer, sehingga kita bisa membandingkan nilai tegangan analog dengan hasil digital yang keluar.


Logic State

     






LED

                         


4. Dasar Teori [kembali]

1. Mikroprosesor Intel 8086

Intel 8086 adalah CPU 16-bit yang menjadi fondasi arsitektur x86. Konsep teoretis utamanya adalah pengalamatan memori tersegmentasi dan bus yang di-multiplex.

### Rumus Pengalamatan Fisik

8086 dapat mengakses memori hingga 1MB (2²⁰ byte) menggunakan bus alamat 20-bit. Namun, registernya hanya 16-bit. Untuk menghasilkan alamat 20-bit, 8086 menggunakan dua register 16-bit: Register Segmen (CS, DS, SS, ES) dan Register Offset (IP, BX, SI, DI, dll.).

Rumus untuk menghitung alamat fisik 20-bit adalah:

Alamat Fisik = (Nilai Segmen × 10H) + Nilai Offset

Secara efektif, nilai segmen digeser ke kiri sebanyak 4 bit (setara dengan dikali 16 atau 10H) lalu dijumlahkan dengan offset.

Contoh:

  • Jika Register Segmen (DS) = 2000H

  • Dan Register Offset (SI) = 0450H

  • Maka, Alamat Fisik = (2000H × 10H) + 0450H = 20000H + 0450H = 20450H.

### Konsep Bus Multiplex

8086 menggabungkan bus alamat (A0-A15) dan bus data (D0-D15) menjadi bus AD0-AD15. Sinyal ALE (Address Latch Enable) digunakan untuk membedakannya. Saat ALE berlogika HIGH, bus AD0-AD15 sedang membawa alamat. Saat ALE berlogika LOW, bus tersebut berfungsi sebagai bus data.


## 2. 8255A Programmable Peripheral Interface (PPI)

8255A adalah IC antarmuka I/O yang konfigurasinya sepenuhnya diatur oleh sebuah Control Word (Kata Kendali) 8-bit. Menguasai format Control Word adalah kunci untuk menggunakan 8255A.

### Rumus (Struktur) Control Word Mode 0

Untuk mode I/O dasar (Mode 0), format Control Word untuk mengatur arah port adalah sebagai berikut:

BitD7D6, D5D4D3D2D1D0
FungsiMode Set FlagMode Grup APort APort C (Atas)Mode Grup BPort BPort C (Bawah)
Nilai1001=Input, 0=Output1=Input, 0=Output01=Input, 0=Output1=Input, 0=Output

Contoh Kalkulasi:

Misalkan kita ingin mengatur Port A sebagai OUTPUT, Port B sebagai INPUT, dan Port C sebagai OUTPUT.

  • D7 = 1 (Wajib untuk mode set)

  • D6, D5 = 00 (Grup A di Mode 0)

  • D4 (Port A) = 0 (Output)

  • D3 (Port C Atas) = 0 (Output)

  • D2 = 0 (Grup B di Mode 0)

  • D1 (Port B) = 1 (Input)

  • D0 (Port C Bawah) = 0 (Output)

Maka, Control Word yang harus dikirim ke 8255A adalah 10000100 dalam biner, atau 84H dalam heksadesimal.


## 3. 74HC373 Octal Latch

74HC373 adalah IC latch (pengunci) transparan 8-bit. Fungsinya dalam rangkaian ini adalah untuk memisahkan (demultiplex) bus AD0-AD7 dari 8086. Prinsip kerjanya diatur oleh dua pin kontrol utama: LE (Latch Enable) dan /OE (Output Enable).

### Rumus Logika (Tabel Kebenaran)

Perilaku 74HC373 dapat direpresentasikan dalam tabel kebenaran berikut:

Input /OEInput LEInput DOutput QMode Operasi
LHH / LH / LTransparan (Output mengikuti Input)
LLXQ₀Latch (Output menahan data terakhir)
HXXZOutput High-Impedance (terputus)

(L = LOW, H = HIGH, X = Tidak peduli, Z = High-Impedance, Q₀ = Nilai Q sebelumnya)

Dalam rangkaian ini, pin /OE biasanya di-ground-kan (selalu LOW) agar output selalu aktif. Pin LE dihubungkan ke sinyal ALE dari 8086.

  • Saat ALE HIGH, LE juga HIGH. Latch berada dalam mode transparan, dan sinyal alamat dari 8086 langsung lewat ke 8255A.

  • Saat ALE berubah dari HIGH ke LOW, LE juga menjadi LOW. Latch akan mengunci nilai alamat terakhir yang ada di bus, menyediakannya secara stabil untuk 8255A.


5. Percobaan [kembali]

a. Prosedur Percobaan [kembali]

  1. Merancang Skematik Rangkaian

    • Buka software Proteus.

    • Cari dan letakkan semua komponen yang dibutuhkan ke dalam lembar kerja: IC 8086, IC 74HC373, IC 8255A, LED, dan Resistor (misalnya 220Ω atau 330Ω).

    • Hubungkan semua komponen sesuai dengan gambar skematik yang Anda berikan. Pastikan semua koneksi bus (AD0-AD7), pin kontrol (ALE, /WR), alamat (A0-A1), dan pin I/O (PA0 ke LED) sudah benar. Jangan lupa menghubungkan pin power (VCC) dan ground (GND) pada setiap IC.

  2. Menulis dan Meng-compile Kode Assembly

    • Buka software Emu8086.

    • Ketik ulang atau salin kode assembly yang Anda berikan ke dalam editor Emu8086.

    • Klik tombol "Compile" untuk merakit kode tersebut. Emu8086 akan menghasilkan beberapa file, yang terpenting adalah file dengan ekstensi .bin atau .hex. Simpan file ini di lokasi yang mudah Anda ingat.

  3. Memuat Program ke Mikroprosesor

    • Kembali ke jendela Proteus.

    • Klik kanan pada komponen IC 8086 (U1) dan pilih "Edit Properties", atau cukup klik dua kali pada komponen tersebut.

    • Di jendela properties, cari opsi "Program File". Klik ikon folder di sebelahnya dan cari file .hex atau .bin yang telah Anda buat pada langkah 2.

    • Klik "OK" untuk menyimpan perubahan.

  4. Menjalankan Simulasi

    • Di Proteus, klik tombol "Play" (biasanya ikon segitiga) di pojok kiri bawah untuk memulai simulasi rangkaian.

  5. Mengamati Hasil

    • Jika semua langkah dilakukan dengan benar, LED (D1) pada rangkaian akan mulai berkedip—menyala selama sesaat, lalu mati, dan terus berulang. Ini menandakan bahwa mikroprosesor 8086 berhasil mengeksekusi kode dan berkomunikasi dengan 8255A untuk mengontrol LED.

b. Gambar Rangkaian dan Prinsip Kerja [kembali]




Prinsip kerjanya adalah mikroprosesor 8086 (CPU) sebagai otak, menjalankan serangkaian perintah (kode assembly) untuk berkomunikasi dengan IC 8255A PPI sebagai asisten I/O, yang kemudian secara fisik menyalakan dan mematikan LED.

Berikut adalah alur kerjanya langkah demi langkah:


## Tahap 1: Inisialisasi dan Konfigurasi (Setup Awal)

Ini terjadi hanya sekali saat program pertama kali dijalankan. Tujuannya adalah memberitahu IC 8255A bagaimana ia harus bekerja.

  1. CPU Mempersiapkan Perintah Konfigurasi:

    • Mikroprosesor 8086 mulai mengeksekusi kode dari baris START:.

    • Ia mengambil alamat Control Register dari 8255A (yaitu 06H) dan memasukkannya ke register DX.

    • Ia mengambil nilai Control Word (10000000B atau 80H) dan memasukkannya ke register AL. Perintah biner ini artinya: "Hai 8255A, aku ingin Port A-mu berfungsi sebagai OUTPUT".

  2. CPU Mengirim Perintah ke 8255A:

    • 8086 mengeksekusi perintah OUT DX, AL.

    • Secara fisik, 8086 menaruh alamat 06H di bus AD0-AD7, lalu mengaktifkan sinyal ALE (Address Latch Enable). Sinyal ini memberitahu IC 74HC373 untuk "menangkap dan mengingat" alamat tersebut.

    • Setelah itu, 8086 menaruh data Control Word (80H) di bus AD0-AD7 dan mengaktifkan sinyal /WR (Write).

    • IC 8255A yang alamatnya sudah terpilih akan membaca data 80H ini dan langsung mengkonfigurasi dirinya sendiri. Sekarang, Port A sudah siap bekerja sebagai port output.


## Tahap 2: Loop Utama (Proses Berkedip)

Setelah 8255A siap, 8086 masuk ke dalam loop tak terbatas yang ditandai oleh label XX:. Proses ini akan terus berulang.

  1. Mematikan LED:

    • 8086 mengeksekusi MOV AL, 00H dan OUT DX, PORTA.

    • Ia mengirimkan nilai 0 ke Port A. Akibatnya, tegangan pada pin PA0 (yang terhubung ke LED) menjadi LOW (0 Volt).

    • Arus listrik berhenti mengalir, dan LED pun MATI.

  2. Jeda Waktu (Delay):

    • 8086 menjalankan loop tunda (loop loopy1).

    • Selama proses ini, CPU sibuk menghitung mundur di dalam dirinya sendiri. Tidak ada perintah baru yang dikirim ke 8255A.

    • Akibatnya, keadaan pin PA0 tetap LOW, dan LED tetap MATI selama beberapa saat.

  3. Menyalakan LED:

    • 8086 mengeksekusi MOV AL, 0FFH dan OUT DX, PORTA.

    • Ia mengirimkan nilai FFH (semua bit 1) ke Port A. Ini membuat tegangan pada pin PA0 menjadi HIGH (+5 Volt).

    • Arus listrik kini dapat mengalir dari pin PA0, melalui LED dan resistor, ke ground. LED pun MENYALA.

  4. Jeda Waktu (Delay) Lagi:

    • 8086 kembali menjalankan loop tunda (loop loopy2).

    • Selama jeda ini, keadaan pin PA0 tetap HIGH, dan LED tetap MENYALA selama beberapa saat.

  5. Kembali ke Awal Loop:

    • 8086 mengeksekusi perintah JMP XX, yang menyuruhnya untuk kembali ke langkah nomor 3.

    • Seluruh siklus mematikan-menunggu-menyalakan-menunggu ini terus berulang tanpa henti, sehingga secara visual kita melihat lampu LED yang berkedip-kedip.



Kode ini adalah program bahasa assembly untuk mikroprosesor 8086 yang bertujuan untuk mengendalikan IC 8255A PPI agar sebuah LED berkedip. Kode ini adalah "otak" atau software yang berjalan pada mikroprosesor 8086 untuk menjalankan rangkaian yang Anda tunjukkan sebelumnya.

Secara ringkas, program ini pertama-tama mengkonfigurasi 8255A, kemudian masuk ke dalam sebuah loop tak terbatas untuk menyalakan LED, menunggu sejenak, mematikan LED, menunggu sejenak, dan terus mengulanginya.


## Penjelasan per Bagian Kode

Mari kita bedah kode ini menjadi tiga bagian utama: definisi data, inisialisasi, dan loop utama.

### 1. Segmen Data (Baris 04-09)

Bagian ini menggunakan perintah EQU (equate) untuk memberikan nama yang mudah dibaca pada alamat-alamat port dari IC 8255A. Ini membuat kode lebih mudah dipahami daripada hanya menggunakan angka heksadesimal.

  • PORTA EQU 00H: Menetapkan bahwa Port A dari 8255A berada di alamat I/O 00H.

  • PORTB EQU 02H: Menetapkan Port B di alamat 02H.

  • PORTC EQU 04H: Menetapkan Port C di alamat 04H.

  • PORT_CON EQU 06H: Menetapkan Control Register (Register Kendali) di alamat 06H. Register ini digunakan untuk mengatur mode kerja dari Port A, B, dan C.


### 2. Inisialisasi (Baris 10-19)

Bagian ini melakukan persiapan awal sebelum program utama berjalan.

  • Baris 11-12: Perintah MOV AX, DATA dan MOV DS, AX adalah prosedur standar untuk menginisialisasi Data Segment Register (DS) agar program bisa mengakses alamat-alamat yang sudah didefinisikan di DATA SEGMENT.

  • Baris 17-19: Ini adalah bagian paling krusial dari inisialisasi.

    • MOV DX, PORT_CON: Alamat Control Register (06H) dimasukkan ke register DX.

    • MOV AL, 10000000B: Nilai biner 10000000 (atau 80H dalam heksadesimal) dimasukkan ke register AL. Nilai ini disebut Control Word dan berfungsi untuk mengkonfigurasi 8255A. Berdasarkan nilai ini, Port A diatur sebagai OUTPUT (untuk mengirim sinyal ke LED) dan Port B sebagai INPUT.

    • OUT DX, AL: Perintah OUT mengirimkan Control Word dari register AL ke alamat port yang ada di DX. Setelah baris ini dieksekusi, 8255A siap digunakan dengan Port A sebagai output.


### 3. Loop Utama untuk Berkedip (Baris 23-34)

Ini adalah inti dari program yang akan berjalan terus-menerus.

  • XX:: Ini adalah label, titik awal dari loop tak terbatas.

  • Baris 24-26 (Mematikan LED):

    • MOV AL, 0000H: Nilai 0 dimasukkan ke AL.

    • OUT DX, AL: Nilai 0 dikirim ke Port A. Ini membuat semua pin di Port A, termasuk PA0 yang terhubung ke LED, menjadi berlogika RENDAH (LOW). Akibatnya, LED akan MATI.

  • Baris 27-28 (Delay 1):

    • MOV CX, 0BDF36H: Sebuah nilai heksadesimal yang sangat besar dimasukkan ke register CX.

    • loop loopy1: Perintah loop akan mengurangi nilai CX sebanyak 1 dan melompat kembali ke label loopy1 sampai CX menjadi nol. Ini menciptakan jeda waktu agar LED tetap mati selama beberapa saat.

  • Baris 29-31 (Menyalakan LED):

    • MOV AL, 0FFH: Nilai FFH (biner 11111111) dimasukkan ke AL.

    • OUT DX, AL: Nilai ini dikirim ke Port A. Ini membuat semua pin di Port A, termasuk PA0, menjadi berlogika TINGGI (HIGH). Akibatnya, LED akan MENYALA.

  • Baris 32-33 (Delay 2):

    • Proses jeda waktu yang sama seperti sebelumnya diulang untuk membuat LED tetap menyala selama beberapa saat.

  • Baris 34 (JMP XX):

    • Setelah jeda kedua, program melompat kembali ke label XX: untuk mengulangi seluruh proses. Perintah JMP (jump) ini menciptakan sebuah loop tak terbatas yang menghasilkan efek LED berkedip secara terus-menerus.

c. Vidio [kembali]




6. Download File [kembali]





Komentar

Postingan Populer