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]
Memahami arsitektur dasar dan fungsi dari mikroprosesor 8086 dan IC 8255A PPI.
Mempelajari cara antarmuka (interfacing) antara 8086 dengan 8255A, termasuk konsep demultiplexing bus alamat/data.
Memahami cara memprogram 8255A PPI dengan mengirimkan Control Word untuk mengkonfigurasi mode port.
Merancang dan mengimplementasikan program bahasa assembly sederhana untuk 8086.
Mengendalikan perangkat output eksternal (LED) melalui sistem mikroprosesor.
3. Alat dan Bahan [kembali]
IC 8255 PPI (Programmable Peripheral Interface)
IC 74HC373(Latch Alamat/Data)
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
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:
Bit | D7 | D6, D5 | D4 | D3 | D2 | D1 | D0 |
Fungsi | Mode Set Flag | Mode Grup A | Port A | Port C (Atas) | Mode Grup B | Port B | Port C (Bawah) |
Nilai | 1 | 00 | 1 =Input, 0 =Output | 1 =Input, 0 =Output | 0 | 1 =Input, 0 =Output | 1 =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 /OE | Input LE | Input D | Output Q | Mode Operasi |
L | H | H / L | H / L | Transparan (Output mengikuti Input) |
L | L | X | Q₀ | Latch (Output menahan data terakhir) |
H | X | X | Z | Output 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]
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.
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.
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.
Menjalankan Simulasi
Di Proteus, klik tombol "Play" (biasanya ikon segitiga) di pojok kiri bawah untuk memulai simulasi rangkaian.
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.
CPU Mempersiapkan Perintah Konfigurasi:
Mikroprosesor 8086 mulai mengeksekusi kode dari baris
START:
.Ia mengambil alamat Control Register dari 8255A (yaitu
06H
) dan memasukkannya ke registerDX
.Ia mengambil nilai Control Word (
10000000B
atau80H
) dan memasukkannya ke registerAL
. Perintah biner ini artinya: "Hai 8255A, aku ingin Port A-mu berfungsi sebagai OUTPUT".
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.
Mematikan LED:
8086 mengeksekusi
MOV AL, 00H
danOUT 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.
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.
Menyalakan LED:
8086 mengeksekusi
MOV AL, 0FFH
danOUT 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.
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.
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
danMOV DS, AX
adalah prosedur standar untuk menginisialisasi Data Segment Register (DS
) agar program bisa mengakses alamat-alamat yang sudah didefinisikan diDATA SEGMENT
.Baris 17-19: Ini adalah bagian paling krusial dari inisialisasi.
MOV DX, PORT_CON
: Alamat Control Register (06H
) dimasukkan ke registerDX
.MOV AL, 10000000B
: Nilai biner10000000
(atau80H
dalam heksadesimal) dimasukkan ke registerAL
. 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
: PerintahOUT
mengirimkan Control Word dari registerAL
ke alamat port yang ada diDX
. 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
: Nilai0
dimasukkan keAL
.OUT DX, AL
: Nilai0
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 registerCX
.loop loopy1
: Perintahloop
akan mengurangi nilaiCX
sebanyak 1 dan melompat kembali ke labelloopy1
sampaiCX
menjadi nol. Ini menciptakan jeda waktu agar LED tetap mati selama beberapa saat.
Baris 29-31 (Menyalakan LED):
MOV AL, 0FFH
: NilaiFFH
(biner11111111
) dimasukkan keAL
.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. PerintahJMP
(jump) ini menciptakan sebuah loop tak terbatas yang menghasilkan efek LED berkedip secara terus-menerus.
6. Download File [kembali]
- Download Rangkaian [klik disini]
Download Emu8086 [klik disini]
Download Emu8086asm [klik disini]
Download Emu8086asm txt [klik disini]
Download Datasheet IC 8255A [klik disini]
Download Datasheet IC 8086 [klik disini]
Download Datasheet IC 74HC373 [klik disini]
Komentar
Posting Komentar