Mikroprosesor dan Mikrokontroler
CHAPTER 11 BASIC I/O INTERFACE
1. Pendahuluan [kembali]
Sebuah mikroprosesor sangat hebat dalam memecahkan masalah, tetapi jika tidak dapat berkomunikasi dengan dunia luar, maka nilainya akan sangat terbatas. Bab ini menjelaskan beberapa metode dasar komunikasi, baik secara serial maupun paralel, antara manusia atau mesin dengan mikroprosesor.
Dalam bab ini, pertama-tama kita akan memperkenalkan antarmuka I/O dasar dan membahas decoding untuk perangkat I/O. Selanjutnya, kita akan membahas secara rinci tentang interfacing paralel dan serial, yang keduanya memiliki beragam aplikasi. Untuk mempelajari aplikasinya, kita akan menghubungkan konverter analog-ke-digital (ADC) dan digital-ke-analog (DAC), serta motor DC dan stepper ke mikroprosesor.
2. Tujuan [kembali]
- Menjelaskan cara kerja antarmuka masukan dan keluaran dasar.
- Mendekode perangkat I/O 8-bit, 16-bit, dan 32-bit agar dapat digunakan di alamat port I/O mana pun.
- Mendefinisikan handshaking dan menjelaskan cara menggunakannya dengan perangkat I/O.
- Menghubungkan dan memprogram antarmuka paralel yang dapat diprogram, yaitu 82C55.
- Menghubungkan layar LCD, layar LED, keyboard, ADC, DAC, dan berbagai perangkat lain ke 82C55.
- Menghubungkan dan memprogram adaptor antarmuka komunikasi serial 16550.
- Menghubungkan dan memprogram pewaktu interval yang dapat diprogram, yaitu 8254.
- Menghubungkan konverter analog-ke-digital dan konverter digital-ke-analog ke mikroprosesor.
- Menghubungkan motor DC dan motor stepper ke mikroprosesor.
11–1
PENGANTAR ANTARMUKA I/O
Pada bagian ini dibahas instruksi I/O (IN, INS, OUT, dan OUTS) serta contoh penerapannya. Juga dijelaskan konsep I/O terisolasi (kadang disebut direct atau I/O mapped I/O) dan memory-mapped I/O, antarmuka input-output dasar, serta handshaking. Pengetahuan tentang topik-topik ini memudahkan dalam memahami koneksi dan operasi komponen antarmuka yang dapat diprogram serta teknik I/O yang dijelaskan pada bab ini.
Instruksi
I/O
Set instruksi memiliki satu jenis
instruksi yang mentransfer data ke perangkat I/O (OUT) dan satu lagi untuk
membaca data dari perangkat I/O (IN). Instruksi (INS dan OUTS, tersedia pada
semua versi kecuali 8086/8088) juga digunakan untuk mentransfer string data
antara memori dan perangkat I/O.
Instruksi yang mentransfer data
antara perangkat I/O dan akumulator prosesor (AL, AX, atau EAX) disebut IN
dan OUT. Alamat I/O disimpan pada register DX sebagai alamat I/O 16-bit
atau langsung dalam byte (p8) yang mengikuti opcode sebagai alamat I/O 8-bit.
- Alamat tetap (fixed address): 8-bit I/O address (p8), disimpan bersama instruksi, biasanya
di ROM.
- Alamat variabel (variable address): 16-bit I/O address, disimpan di DX dan digunakan untuk
mengakses perangkat I/O.
Instruksi lain yang memakai DX untuk
mengakses I/O adalah INS dan OUTS. Port I/O berukuran 8-bit,
sehingga jika port 16-bit diakses maka dua port 8-bit berturut-turut ikut
diakses. Misalnya, port 100H (word) berarti port 100H dan 101H ikut dipakai.
Port
Number
Saat data ditransfer dengan
instruksi IN atau OUT, alamat I/O (disebut port number) muncul pada
address bus. Antarmuka eksternal mendekode port number dengan cara yang sama
seperti mendekode alamat memori.
- Alamat 8-bit muncul pada jalur alamat A7–A0.
- Alamat 16-bit (DX) muncul pada jalur A15–A0.
256 port pertama (00H–FFH) dapat
diakses oleh instruksi alamat tetap maupun variabel. Namun port I/O dari 0100H
hingga FFFFH hanya dapat diakses oleh instruksi alamat variabel.
Instruksi
INS dan OUTS
Instruksi INS dan OUTS
mentransfer data antara memori dan perangkat I/O (menggunakan register DX untuk
alamat).
- INS:
mentransfer dari port yang dialamatkan DX ke memori yang dialamatkan DI.
- OUTS:
mentransfer dari memori (alamat SI) ke port yang dialamatkan DX.
Instruksi ini sering dipakai dengan awalan REP untuk memungkinkan transfer string data dalam jumlah besar.
I/O
Terisolasi dan Memory-Mapped I/O
Ada dua metode untuk menghubungkan
I/O dengan prosesor:
- Isolated I/O
- Instruksi IN, INS, OUT, OUTS digunakan.
- Lokasi I/O terpisah dari sistem memori.
- Menggunakan ruang alamat terpisah untuk port I/O.
- Sinyal kontrol khusus digunakan: I/O Read (IORC),
I/O Write (IOWC).
- Kelemahan: hanya bisa diakses dengan instruksi I/O
khusus.
- Memory-Mapped I/O
- Instruksi transfer data biasa digunakan, karena
perangkat I/O diperlakukan seperti lokasi memori.
- Keuntungan: perangkat I/O dapat memakai instruksi
memori biasa, tidak perlu instruksi I/O khusus.
- Kekurangan: mengurangi ruang alamat yang tersedia
untuk memori utama.
PC berbasis Intel umumnya
menggunakan Isolated I/O, bukan memory-mapped I/O.
Tabel
Instruksi Input/Output
|
Instruksi |
Lebar Data |
Fungsi |
|
IN AL, p8 |
8 |
Sebuah byte dimasukkan ke dalam AL
dari port p8 |
|
IN AX, p8 |
16 |
Sebuah word dimasukkan ke dalam AX
dari port p8 |
|
IN EAX, p8 |
32 |
Sebuah doubleword dimasukkan ke
dalam EAX dari port p8 |
|
IN AL, DX |
8 |
Sebuah byte dimasukkan ke dalam AL
dari port yang dialamati oleh DX |
|
IN AX, DX |
16 |
Sebuah word dimasukkan ke dalam AX
dari port yang dialamati oleh DX |
|
IN EAX, DX |
32 |
Sebuah doubleword dimasukkan ke
dalam EAX dari port yang dialamati oleh DX |
|
INSB |
8 |
Sebuah byte dimasukkan dari port
yang dialamati oleh DI dan disimpan ke lokasi memori segmen ekstra yang
dialamati oleh DI, lalu DI = DI ± 1 |
|
INSW |
16 |
Sebuah word dimasukkan dari port
yang dialamati oleh DI dan disimpan ke lokasi memori segmen ekstra yang
dialamati oleh DI, lalu DI = DI ± 2 |
|
INSD |
32 |
Sebuah doubleword dimasukkan dari
port yang dialamati oleh DI dan disimpan ke lokasi memori segmen ekstra yang
dialamati oleh DI, lalu DI = DI ± 4 |
|
OUT p8, AL |
8 |
Sebuah byte dikeluarkan dari AL ke
port p8 |
|
OUT p8, AX |
16 |
Sebuah word dikeluarkan dari AX ke
port p8 |
|
OUT p8, EAX |
32 |
Sebuah doubleword dikeluarkan dari
EAX ke port p8 |
|
OUT DX, AL |
8 |
Sebuah byte dikeluarkan dari AL ke
port yang dialamati oleh DX |
|
OUT DX, AX |
16 |
Sebuah word dikeluarkan dari AX ke
port yang dialamati oleh DX |
|
OUT DX, EAX |
32 |
Sebuah doubleword dikeluarkan dari
EAX ke port yang dialamati oleh DX |
|
OUTSB |
8 |
Sebuah byte dikeluarkan dari
lokasi memori segmen data yang dialamati oleh SI ke port yang dialamati oleh
DX, lalu SI = SI ± 1 |
|
OUTSW |
16 |
Sebuah word dikeluarkan dari
lokasi memori segmen data yang dialamati oleh SI ke port yang dialamati oleh
DX, lalu SI = SI ± 2 |
|
OUTSD |
32 |
Sebuah doubleword dikeluarkan dari
lokasi memori segmen data yang dialamati oleh SI ke port yang dialamati oleh
DX, lalu SI = SI ± 4 |
Isolated dan Memory-Mapped I/O
Ada dua metode berbeda untuk menghubungkan I/O ke mikroprosesor: isolated I/O dan memory-mapped I/O. Pada skema isolated I/O, instruksi IN, INS, OUT, dan OUTS mentransfer data antara akumulator atau memori mikroprosesor dengan perangkat I/O. Pada skema memory-mapped I/O, instruksi apa pun yang mereferensikan memori dapat melakukan transfer tersebut. Baik isolated maupun memory-mapped I/O digunakan, sehingga keduanya dibahas dalam teks ini. PC tidak menggunakan memory-mapped I/O.
Isolated I/O.
Teknik transfer I/O yang paling umum digunakan pada sistem berbasis mikroprosesor Intel adalah isolated I/O. Istilah isolated menggambarkan bagaimana lokasi I/O diisolasi dari sistem memori dalam ruang alamat I/O yang terpisah. (Gambar 11–1 menggambarkan baik ruang alamat isolated maupun memory-mapped untuk setiap mikroprosesor Intel 80X86 atau Pentium–Core2). Alamat untuk perangkat isolated I/O, yang disebut port, terpisah dari memori. Karena port terpisah, pengguna dapat memperluas memori hingga ukuran penuhnya tanpa harus menggunakan ruang memori untuk perangkat I/O.
Salah satu kelemahan dari isolated I/O adalah data yang ditransfer antara I/O dan mikroprosesor harus diakses melalui instruksi IN, INS, OUT, dan OUTS. Sinyal kontrol terpisah untuk ruang I/O dikembangkan, yang menunjukkan operasi I/O read atau I/O write. Sinyal-sinyal ini menunjukkan bahwa alamat port I/O, yang muncul pada address bus, digunakan untuk memilih perangkat I/O. Pada komputer pribadi, port isolated I/O digunakan untuk mengendalikan perangkat periferal. Sebuah alamat port 8-bit digunakan untuk mengakses perangkat yang terletak pada papan sistem, seperti timer dan antarmuka keyboard, sedangkan port 16-bit digunakan untuk mengakses port serial dan paralel serta sistem video dan drive disk.
Memory-Mapped I/O
Berbeda dengan isolated I/O, memory-mapped I/O tidak menggunakan instruksi IN, INS, OUT, atau OUTS. Sebaliknya, ia menggunakan instruksi apa pun yang mentransfer data antara mikroprosesor dan memori. Perangkat memory-mapped I/O diperlakukan sebagai lokasi memori dalam peta memori.
Keuntungan utama dari memory-mapped I/O adalah bahwa instruksi transfer memori apa pun dapat digunakan untuk mengakses perangkat I/O. Kelemahan utamanya adalah sebagian dari sistem memori digunakan sebagai peta I/O. Hal ini mengurangi jumlah memori yang tersedia untuk aplikasi. Keuntungan lain adalah bahwa sinyal I/O read/write tidak memiliki fungsi dalam sistem memory-mapped I/O sehingga dapat mengurangi jumlah rangkaian yang diperlukan untuk decoding.
(a) Isolated I/O
-
Di sebelah kiri: Memory punya ruang alamat sendiri (1M × 8).
-
Di sebelah kanan: I/O juga punya ruang alamat terpisah (64K × 8).
-
Artinya: memori dan I/O dipisahkan, sehingga alamat untuk perangkat I/O (port) tidak mengurangi kapasitas memori.
-
Akses I/O dilakukan dengan instruksi khusus (
IN,OUT, dll).
Contoh: Port keyboard, port timer, port serial/parallel → semua pakai alamat I/O sendiri, bukan memori.
(b) Memory-Mapped I/O
-
Hanya ada satu ruang alamat.
-
Memori dan I/O digabung dalam satu peta alamat.
-
Sebagian alamat dipakai untuk memori, sebagian lagi dipakai untuk perangkat I/O.
-
Karena itu, kapasitas memori efektif untuk program/aplikasi berkurang, tapi akses I/O jadi lebih fleksibel karena bisa pakai instruksi memori biasa.
Contoh: Banyak mikrokontroler modern (seperti ARM, AVR, atau Arduino) menggunakan memory-mapped I/O, di mana port I/O dianggap sebagai alamat memori khusus.
Personal Computer I/O Map
Komputer pribadi menggunakan sebagian ruang I/O untuk fungsi-fungsi khusus.
· Ruang
I/O antara 0000H sampai 03FFH
biasanya disediakan untuk sistem komputer dan bus ISA.
· Ruang
I/O antara 0400H sampai FFFFH
umumnya tersedia untuk aplikasi pengguna, fungsi-fungsi mainboard, dan bus PCI.
· 80287
arithmetic coprocessor memakai port I/O 0F8H–0FFH
untuk komunikasi.
· 80386–Core2
menggunakan port I/O 800000F8H–800000FFH untuk
komunikasi dengan coprocessornya.
Port I/O antara 0000H dan 00FFH diakses dengan instruksi alamat tetap, sedangkan port di atas 00FFH diakses dengan instruksi alamat variabel.
· Input
Dasar → berupa rangkaian buffer tiga-keadaan (three-state
buffer).
· Output
Dasar → berupa latch (penyimpan data sementara).
Instruksi IN → membaca data dari
perangkat I/O ke mikroprosesor.
Instruksi OUT → mengirim data dari
mikroprosesor ke perangkat I/O.
Basic Input and Output Interfaces
Penjelasan bagian-bagiannya:
-
0000 – 000F : DMA controller
Digunakan untuk Direct Memory Access, memungkinkan transfer data langsung antara memori dan perangkat I/O tanpa campur tangan CPU. -
0020 – 0021 : Interrupt controller
Mengatur interupsi dari perangkat eksternal agar CPU bisa merespons kejadian tertentu. -
0040 – 0043 : Timer
Biasanya untuk fungsi pewaktuan sistem, menghasilkan delay, atau pembangkit clock. -
0060 – 006F : 8255 (PPI)
Programmable Peripheral Interface, dipakai untuk komunikasi paralel sederhana (misalnya keyboard). -
02F8 – 02FF : COM 2
Port komunikasi serial kedua. -
0320 – 032F : Hard disk
Alamat I/O khusus untuk mengakses hard disk. -
0378 – 037F : LPT 1
Port paralel pertama, sering digunakan untuk printer. -
03C0 – 03DF : CGA adapter
Alamat I/O untuk Color Graphics Adapter (display kartu grafis awal). -
03F0 – 03F7 : Floppy disk
Kontroler floppy disk. -
03F8 – 03FF : COM 1
Port komunikasi serial pertama. -
0400 ke atas : I/O Expansion Area
Area alamat yang disediakan untuk ekspansi perangkat I/O tambahan.
The Basic Output Interface
· Data
dari mikroprosesor ditransfer ke latch 8-bit
(penyimpan sementara) agar data bisa dipertahankan.
· Jika
tidak memakai latch, data hanya ada di bus untuk waktu yang sangat singkat
(< 1 µs).
· Latch
memastikan data tetap stabil agar bisa digunakan untuk mengendalikan perangkat
(misalnya LED).
Gambar Figure 11–4 → menunjukkan delapan LED
dihubungkan ke mikroprosesor melalui IC latch 74ALS374.
· Input
latch (D0–D7) menerima data dari bus.
· Saat
sinyal CLK aktif, data dari bus
disimpan ke latch dan dikeluarkan ke LED.
· LED akan menyala atau mati sesuai logika data yang dikirim.
Handshaking (Sinkronisasi
I/O)
Banyak perangkat I/O bekerja lebih lambat daripada mikroprosesor.
Contoh: printer yang hanya bisa mencetak beberapa ratus karakter per detik.
Untuk itu digunakan metode handshaking (polling)
agar transfer data sinkron.
· Data
ASCII yang akan dicetak dikirim ke bus data D7–D0.
· Sinyal
STB (strobe) dipakai untuk mengirimkan data ke
printer.
· Printer
kemudian mengeluarkan sinyal BUSY → menunjukkan apakah
printer sedang sibuk atau siap menerima data berikutnya.
Contoh Program Assembly (Example 11–1):
Program membaca flag BUSY → jika printer
sibuk, mikroprosesor menunggu; jika tidak sibuk, data berikutnya dikirim.
Konektor I/O (DB25 dan
Centronics 36-Pin)
Figure 11–5 menunjukkan konektor paralel
printer:
· DB25
(25 pin) → biasa ditemukan di komputer lama.
· Centronics
36 pin (CENT36) → biasa ditemukan di printer.
Pin dihubungkan satu sama lain untuk transfer data, sinyal kendali, dan
status (misalnya Paper Empty, Select, Error, Reset, Busy).
Penjelasan Rangkaian
1. Figure
11–3 (Input Interface):
o
Delapan switch (saklar) dihubungkan ke buffer
tiga-keadaan IC 74ALS244.
o
Sinyal SEL
mengaktifkan buffer agar data switch masuk ke bus data mikroprosesor.
o
Digunakan untuk input sederhana, misalnya tombol
kontrol.
2. Figure
11–4 (Output Interface):
o
Delapan LED dihubungkan ke latch IC 74ALS374.
o
Mikroprosesor mengirim data melalui bus, lalu
latch menyimpannya.
o
LED menyala sesuai data (bisa membentuk pola
biner).
3. Figure
11–5 (Printer Connector):
o
Menjelaskan pin pada konektor DB25 di komputer
dan konektor Centronics 36 pin di printer.
o
Fungsi tiap pin meliputi jalur data (D0–D7),
sinyal kontrol (Strobe, Ack, Busy), dan status printer.
Switch Debouncing
Kontak mekanik pada saklar (switch) akan memantul (bounce)
ketika ditutup, yang bisa menimbulkan masalah jika digunakan sebagai sinyal
clock untuk rangkaian digital. Untuk mencegah efek bounce, digunakan rangkaian debouncer.
· Gambar
11–7(a) → adalah rangkaian klasik debouncer menggunakan NAND
gate.
· Gambar
11–7(b) → adalah versi praktis menggunakan inverter
(NOT gate), lebih murah karena tidak perlu resistor pull-up.
Kedua rangkaian bekerja sebagai RS flip-flop asinkron,
yang mengingat keadaan terakhir saklar. Jadi meskipun switch bergetar (bounce),
output tetap stabil.
Output Devices (Perangkat Keluaran)
Output device (LED, motor, relay, dll.) sering bervariasi dan harus
disesuaikan dengan sinyal TTL.
· Level
tegangan TTL:
o
Logic 0 = 0 – 0.4 V
o
Logic 1 = 2.4 – 5.0 V
· Arus
TTL standar:
o
Input mikroprosesor < 400 µA
o
Output TTL standar bisa 0.4 mA hingga 16 mA
Karena LED dan motor butuh arus lebih besar, maka diperlukan transistor atau
rangkaian driver.
Interfacing LED
Datasheet LED menyatakan tegangan jatuh (Vf) sekitar 1.5
– 2.0 V, rata-rata 1.65 V.
· Rangkaian
11–8(a) → LED dihubungkan melalui transistor
NPN 2N2222.
o
Resistor 330 Ω membatasi arus LED sekitar 10 mA.
o
Resistor basis 18 kΩ membatasi arus masuk
transistor.
· Rangkaian
11–8(b) → LED dikendalikan melalui inverter
7404.
o
Maksimal arus dari inverter hanya 16 mA,
sehingga hati-hati agar tidak terbakar.
Interfacing Motor DC
Motor DC memerlukan arus yang jauh lebih besar (misalnya 1A).
· Tidak
bisa langsung menggunakan inverter TTL.
· Tidak
bisa pakai transistor kecil (2N2222) karena arusnya kecil.
· Solusi
→ gunakan Darlington Pair (contoh
TIP120).
o
Memiliki penguatan arus besar (gain 7000).
o
Bisa mengendalikan motor sampai 4A.
o
Resistor 6.2 kΩ dipakai di basis.
o
Dioda flyback harus dipasang paralel dengan
motor, untuk mencegah kerusakan akibat tegangan balik saat motor berhenti.
Penjelasan Rangkaian
1. Gambar
11–7(a) & (b): Debouncing
o
(a) Dua gerbang NAND membentuk RS flip-flop.
Saklar menghasilkan input S/R, sehingga output Q tetap stabil meski ada
bouncing.
o
(b) Versi lebih sederhana, pakai dua inverter
(NOT gate). Logika tetap disimpan dengan cara serupa.
2. Gambar
11–8(a): LED dengan Transistor
o
Input logika dari TTL masuk ke basis transistor
melalui resistor 18k.
o
Jika input = HIGH → transistor ON → LED menyala.
o
Jika input = LOW → transistor OFF → LED mati.
3. Gambar
11–8(b): LED dengan Inverter
o
Input logika dikirim ke inverter 7404.
o
Output inverter langsung menggerakkan LED dengan
resistor 330 Ω.
o
Cocok untuk arus kecil saja.
4. Gambar
11–9: Motor dengan Darlington Pair
o
Input TTL dikirim ke basis transistor Darlington
TIP120.
o
Arus kecil dari basis diperkuat ribuan kali,
sehingga motor bisa digerakkan.
o
Dioda dipasang paralel motor sebagai proteksi.
Baik,
saya akan terjemahkan materi yang Anda berikan. Dokumen-dokumen ini membahas
tentang antarmuka (interface) I/O dasar, termasuk bagaimana
sakelar dihubungkan ke perangkat digital, dan bagaimana port I/O dihubungkan ke
mikroprosesor.
Antarmuka I/O
Dasar (BASIC I/O INTERFACE)
Sakelar dan
Debouncing
· Gambar 11-6: Sakelar tunggal (single-pole, single-throw) yang
dihubungkan ke perangkat TTL.
o Rangkaian ini menunjukkan
cara menghubungkan sakelar mekanis ke input logika TTL.
o Saat sakelar terbuka,
resistor pull-up 2.2K Ω menarik tegangan
ke VCC (logika HIGH).
o Saat sakelar ditutup,
tegangan turun ke ground (logika LOW).
·
Gambar 11-7: Debouncing kontak sakelar.
o Masalah bounce (pemantulan): Kontak sakelar mekanis memantul
saat ditekan, menciptakan sinyal yang tidak stabil.
o Rangkaian (a) dan (b)
menggunakan latches (menggunakan gerbang NAND 74LS00 atau inverter 74LS04) untuk
mengatasi masalah ini.
o Rangkaian ini menjaga
output tetap stabil pada logika terakhir, mengabaikan pemantulan, sehingga
hanya ada satu transisi logika per penekanan.
Port I/O dan Penguraian Alamat (I/O Port Address Decoding)
Bagian
ini menjelaskan bagaimana mikroprosesor, seperti 80486DX dan Pentium, berkomunikasi dengan perangkat eksternal
melalui port I/O.
·
Penguraian Alamat Port I/O (I/O Port Address Decoding)
o Ini mirip dengan
penguraian alamat memori. Tujuannya adalah untuk mengaktifkan perangkat I/O
tertentu saat mikroprosesor mengeluarkan alamat port yang sesuai.
o Perbedaan utama adalah
penggunaan sinyal kontrol seperti I/ORC (I/O Read Command)
dan I/OWC (I/O Write Command), bukan sinyal baca/tulis
memori.
Port I/O 8-Bit
·
Gambar Figure 11–10: Port Decoder 8-bit I/O
-
Rangkaian ini menggunakan IC 74LS138 (3-to-8 decoder) dan gerbang NAND 74LS10.
-
Input yang digunakan adalah A0 – A7 (alamat I/O).
-
Outputnya berupa sinyal aktif low (rendah = aktif) untuk alamat port F0H sampai F7H.
-
Cara kerjanya:
-
74LS138 menerima 3 input address (A0–A2) dan menghasilkan 8 output (Y0–Y7).
-
Output ini mewakili alamat lebih rendah (bit paling kecil).
-
Bagian enable (A3, A4, A5, A6, A7) dikombinasikan dengan gerbang NAND agar decoder hanya aktif pada rentang alamat tertentu (F0H–F7H).
Gambar Figure 11–11: PLD (Programmable Logic Device)
-
Digunakan GAL22V10 (sebuah PLD).
-
PLD ini menghasilkan sinyal chip-select untuk alamat port F0H–F7H.
-
Pada gambar terlihat pin address A0–A7 masuk ke PLD, outputnya berupa D0–D7.
-
Setiap output (D0–D7) mewakili alamat port berbeda, misalnya:
-
D0 → F0H
-
D1 → F1H
-
D2 → F2H
-
dst sampai D7 → F7H
-
Kode logika Boolean (di bawah gambar) menjelaskan bagaimana PLD menghasilkan output tersebut:
Decoding 16-Bit I/O Port Addresses
-
Sistem komputer biasanya pakai alamat I/O 16-bit, bukan hanya 8-bit.
-
Perbedaan utamanya:
-
8-bit I/O address: hanya butuh 8 bit (A0–A7).
-
16-bit I/O address: butuh tambahan bit alamat A8–A15.
-
-
Jadi, jika ingin mendekode alamat 16-bit, kita harus mempertimbangkan bit tambahan itu.
Figure 11–12 (dijelaskan di teks, meski tidak muncul di gambar) menunjukkan kombinasi PLD + gerbang NAND untuk mendekode alamat EFF8H – EFFFH.
-
Gerbang NAND dipakai karena PLD tidak punya cukup input untuk semua bit address.
-
Output NAND masuk ke PLD untuk menghasilkan strobe I/O yang tepat.
Contoh Kode VHDL (EXAMPLE 11–3)
Kode ini adalah implementasi logika decoder menggunakan bahasa VHDL.
Penjelasan:
-
library ieee;→ Mengimpor library standar IEEE. -
use ieee.std_logic_1164.all;→ Menggunakan tipe data logika digital standar (sepertistd_logicdanstd_logic_vector).
Kode selanjutnya (tidak ditampilkan penuh di gambar) biasanya berisi:
-
Entity (mendefinisikan input/output decoder).
-
Architecture (mendefinisikan logika pengalamatan sesuai kondisi alamat).
8- and 16-Bit Wide I/O Ports
Penjelasan Konsep
-
Alamat port I/O (I/O port addresses) lebih mudah didekode dibanding alamat memori, karena jumlah bit lebih sedikit.
-
Sistem mikroprosesor bisa menggunakan perangkat I/O dengan lebar data 8-bit atau 16-bit.
-
Pada prosesor 16-bit (contoh: 80386SX), perangkat 8-bit tetap bisa digunakan.
-
Masalahnya:
-
Ada 64K alamat port 8-bit (0–FFFFH).
-
Tetapi hanya ada 32K port 16-bit, karena satu port 16-bit memerlukan dua port 8-bit (low byte + high byte).
-
Maka sistem 16-bit dibagi menjadi 2 bank memori/port I/O:
-
High bank → bit data D15–D8.
-
Low bank → bit data D7–D0.
Gambar Figure 11–13
The I/O banks found in the 8086, 80186, 80286, and 80386SX
-
Gambar menunjukkan pemisahan bank I/O:
-
High bank (kiri): berisi data bit D15–D8.
-
Dikendalikan oleh sinyal BHE (Bus High Enable).
-
Alamat terakhir:
FFFFH, FFFD, FFFB, ... , 0001.
-
-
Low bank (kanan): berisi data bit D7–D0.
-
Dikendalikan oleh sinyal A0 (Address line 0).
-
Alamat terakhir:
FFFEH, FFFCH, FFFAH, ... , 0000.
-
-
Jadi, alamat ganjil diarahkan ke bank tinggi, dan alamat genap diarahkan ke bank rendah.
32-Bit-Wide I/O Ports
Penjelasan Konsep
-
Port I/O 32-bit tidak terlalu umum, tetapi mungkin menjadi kebutuhan karena adanya bus komputer baru yang mendukung transfer data 32-bit.
-
Contoh bus komputer yang dulu menjanjikan dukungan 32-bit adalah EISA system bus, VESA local bus, dan PCI bus.
-
Namun, perangkat I/O yang benar-benar 32-bit masih jarang. Kebanyakan perangkat I/O masih 8-bit atau 16-bit.
Figure 11–16: Port 32-bit yang didekode pada 70H sampai 73H untuk 80486DX
Tujuan Rangkaian
-
Rangkaian ini membentuk port input 32-bit yang dapat diakses oleh prosesor 80486DX.
-
Karena prosesor 32-bit bekerja dengan data selebar 32-bit, maka dibutuhkan 4 buah port 8-bit (masing-masing 1 byte) → yaitu port 70H, 71H, 72H, dan 73H.
-
Dengan begitu, ketika prosesor membaca
IN EAX, 70H, data 32-bit penuh bisa diambil sekaligus.
Komponen Rangkaian
-
74HCT244 (U2, U3, U4, U5)
-
Masing-masing adalah buffer tri-state 8-bit.
-
Berfungsi untuk menghubungkan data bus I/O (masuk dari perangkat luar) dengan data bus prosesor.
-
Keempat buffer inilah yang menyusun port 70H–73H:
-
U2 → port 70H (D0–D7)
-
U3 → port 71H (D8–D15)
-
U4 → port 72H (D16–D23)
-
U5 → port 73H (D24–D31)
-
-
Setiap buffer punya 2 enable (1OE dan 2OE) agar hanya aktif jika alamat port sesuai hasil decoder.
-
-
PLD (U1 – GAL16LV8C)
-
Bertugas sebagai decoder alamat.
-
Input: sinyal alamat dari prosesor A2–A7 dan sinyal kontrol IORC (I/O Read Control).
-
Output: sinyal enable (aktif rendah) untuk masing-masing buffer (U2–U5).
-
Jadi, PLD memastikan hanya buffer yang sesuai dengan alamat port (70H–73H) yang diaktifkan.
Cara Kerja Rangkaian
-
Prosesor memberikan alamat pada bus alamat (contohnya 70H).
-
PLD (U1) mengecek bit-bit alamat (A2–A7) dan sinyal kontrol IORC.
-
Jika sesuai dengan range 70H–73H → salah satu output PLD akan aktif.
-
Output PLD ini mengaktifkan OE (Output Enable) pada buffer 74HCT244 yang terkait.
-
-
Buffer yang aktif menghubungkan data byte dari perangkat luar ke data bus prosesor.
-
Jika alamat 70H → U2 aktif (D0–D7 masuk ke prosesor).
-
Jika alamat 71H → U3 aktif (D8–D15 masuk ke prosesor).
-
Dan seterusnya.
-
-
Jika prosesor membaca dengan instruksi
IN EAX, 70H, maka semua 4 buffer diaktifkan sehingga data 32-bit penuh (D0–D31) ditransfer sekaligus.
Penjelasan:
-
Entity
-
Input:
-
IORC→ sinyal kontrol baca I/O. -
A7–A2→ potongan alamat yang digunakan untuk decoding.
-
-
Output:
-
D0→ sinyal chip-select (aktif low) untuk port I/O tertentu.
-
-
-
Architecture
-
Baris
D0 <= IORC or A7 or not A6 ...adalah persamaan logika untuk menentukan kapan port 70H–73H dipilih. -
Jika kondisi alamat cocok, maka
D0akan bernilai 0 (aktif), sehingga buffer terkait diaktifkan.
1. Gambaran Umum
Gambar 11–17 menunjukkan bagaimana sebuah Pentium 4 dihubungkan dengan sebuah port I/O 16-bit pada alamat port 2000H dan 2001H. Karena prosesor Pentium memiliki bus data yang 64-bit, maka akses ke port I/O dapat dilakukan pada berbagai ukuran (8, 16, 32, atau 64 bit). Di sini, rangkaian memperlihatkan bagaimana cara mengakses port 16-bit (lebar 2 byte) yang terdiri dari:
-
Port 2000H → untuk byte rendah (low byte).
-
Port 2001H → untuk byte tinggi (high byte).
2. Bagian-Bagian Rangkaian
Mari kita uraikan tiap blok:
(a) U1 – GAL26CV12C
-
Ini adalah Programmable Logic Device (PLD) yang digunakan untuk dekoder alamat.
-
Masukan utamanya adalah A3–A15 (sebagian alamat bus), sinyal kontrol M/IO, W/ R, BE0, BE1.
-
Output PLD menghasilkan sinyal clock enable untuk mengaktifkan latch data (U2 & U3).
Fungsinya: menentukan kapan port 2000H atau 2001H aktif, sesuai alamat yang diakses.
(b) U2 – 74HCT374
-
Ini adalah octal D-type latch (8-bit).
-
Terhubung ke D0–D7 (byte rendah dari bus data).
-
Saat sinyal clock dari PLD aktif, data dari D0–D7 akan disimpan ke dalam latch.
-
Outputnya adalah Port 2000H.
(c) U3 – 74HCT374
-
Sama dengan U2, tetapi menerima data dari D8–D15 (byte tinggi).
-
Menyimpan byte tinggi untuk Port 2001H.
(d) Jalur Data & Alamat
-
D0–D15 = 16-bit data bus.
-
A3–A15 = sebagian alamat digunakan untuk decoding.
-
BE0 dan BE1 = Byte Enable, menunjukkan byte mana yang aktif dalam transfer.
-
M/IO dan W/R = sinyal kontrol dari prosesor, menentukan apakah operasi itu I/O Read atau Write.
3. Cara Kerja Rangkaian
-
Prosesor memberikan alamat I/O, misalnya 2000H atau 2001H.
-
PLD (U1) mendekode alamat tersebut:
-
Jika alamat 2000H, maka enable clock untuk U2.
-
Jika alamat 2001H, maka enable clock untuk U3.
-
-
Data yang dikirim prosesor lewat bus data (D0–D15):
-
D0–D7 masuk ke latch U2 (low byte).
-
D8–D15 masuk ke latch U3 (high byte).
-
-
Dengan demikian, port I/O dapat menyimpan 16-bit data penuh yang tersebar di dua alamat (2000H dan 2001H).
4. Kode PLD (PALASM / VHDL-like)
Potongan kode pada buku menjelaskan logika dekoder:
Logikanya kira-kira begini:
-
Jika M/IO = 0 (akses I/O),
-
Jika alamat cocok 2000H, maka aktifkan latch untuk U2.
-
Jika alamat cocok 2001H, maka aktifkan latch untuk U3.
-
Jika operasi Write, maka data dari bus masuk ke latch.
Secara sederhana, PLD mengatur kapan U2 dan U3 boleh menerima data.
11–3 THE PROGRAMMABLE PERIPHERAL INTERFACE
Chip 82C55 atau yang disebut juga Programmable Peripheral Interface (PPI) adalah komponen antarmuka input/output yang banyak digunakan untuk menghubungkan mikroprosesor dengan perangkat eksternal. Chip ini memiliki 24 pin I/O yang dapat diprogram dan dibagi ke dalam tiga port, yaitu port A, port B, dan port C. Port A dan port B masing-masing terdiri dari 8 bit penuh, sedangkan port C terdiri dari dua bagian, yaitu bagian atas (PC7–PC4) dan bagian bawah (PC3–PC0). Dengan konfigurasi ini, 82C55 memungkinkan berbagai kombinasi pengaturan input maupun output sesuai kebutuhan sistem.
Fungsi utama dari 82C55 adalah sebagai penghubung antara mikroprosesor dan perangkat I/O yang kompatibel dengan TTL, misalnya keyboard dan printer paralel. Pada komputer lama, chip ini sering digunakan secara langsung, sedangkan pada komputer modern fungsinya sudah terintegrasi dalam chipset, sehingga tidak lagi muncul sebagai chip terpisah. Walaupun begitu, peran 82C55 tetap penting karena digunakan untuk mengontrol transfer data, membaca input dari perangkat, maupun mengatur timer pada beberapa sistem.
Versi CMOS dari 82C55 dapat bekerja dengan kecepatan tinggi, tetapi jika mikroprosesor menggunakan clock di atas 8 MHz, maka dibutuhkan tambahan wait state agar komunikasi tetap stabil. Setiap pin output chip ini mampu memberikan arus sekitar 2,5 mA dengan maksimum 4 mA. Karena sebagian besar perangkat I/O bekerja lebih lambat dibanding prosesor, penggunaan wait state biasanya tidak menjadi masalah serius.
Dalam penggunaannya, chip 82C55 diprogram melalui alamat port tertentu yang diakses oleh mikroprosesor. Pemrograman bisa dilakukan dengan bahasa assembly atau bahasa tingkat tinggi seperti C. Untuk keperluan pembelajaran, tersedia juga board eksperimen murah yang bisa dihubungkan ke port paralel PC, sehingga pengguna dapat berlatih mengakses dan memprogram 8255 secara langsung.
Programming the 82C55
Chip 82C55 diprogram menggunakan dua command register internal. Pemilihan register ditentukan oleh bit ke-7 pada command byte:
-
Jika bit 7 = 1, maka yang diatur adalah Command Byte A, yaitu fungsi dari Group A dan Group B.
-
Jika bit 7 = 0, maka yang diatur adalah Command Byte B, yaitu khusus untuk set/reset bit port C (berfungsi hanya jika chip bekerja pada mode 1 atau 2).
Group B (Port B + bagian bawah Port C) bisa diprogram sebagai input atau output, dengan dua mode operasi:
-
Mode 0 → mode dasar, digunakan untuk input sederhana atau output latched (data ditahan di port).
-
Mode 1 → mode strobed (menggunakan sinyal handshake melalui port C agar transfer data lebih teratur).
Group A (Port A + bagian atas Port C) juga bisa diprogram sebagai input atau output, dengan tiga mode operasi:
-
Mode 0 → input/output sederhana.
-
Mode 1 → strobed, sama seperti group B.
-
Mode 2 → bidirectional mode, artinya port A bisa digunakan untuk input dan output secara dua arah.
Selain itu, jika Command Byte B digunakan, kita bisa mengatur (set = 1) atau mereset (reset = 0) bit tertentu pada port C tanpa memengaruhi bit lain. Fungsi ini sangat berguna pada sistem kontrol, misalnya untuk menyalakan atau mematikan satu sinyal kontrol tertentu.
Mode 0
Mode 0 adalah mode paling dasar pada 82C55, di mana:
-
Port bisa difungsikan sebagai input buffered (data masuk ditahan/buffered) atau sebagai output latched (data keluar ditahan/latch).
-
Cara kerjanya sama seperti rangkaian input-output sederhana yang sudah dijelaskan sebelumnya.
Pada contoh rangkaian (Gambar 11–21):
-
Port A diprogram sebagai output untuk mengirim data segmen ke display (menyalakan bagian tertentu dari angka pada seven-segment LED).
-
Port B diprogram sebagai output untuk memilih posisi display (dipakai dalam teknik multiplexing agar beberapa seven-segment bisa digunakan secara bergantian dengan cepat).
-
82C55 dihubungkan dengan mikroprosesor 8088 melalui PLD (Programmable Logic Device). PLD ini bertugas mendekode alamat I/O (0700H–0703H) dan menghasilkan sinyal write strobe untuk mengendalikan pin 82C55.
An LCD Display Interfaced to the 82C55
LCD (Liquid Crystal Display) banyak digunakan menggantikan LED display karena lebih mudah dilihat di berbagai kondisi cahaya. LED masih dipakai terbatas, misalnya di alat medis. Jika harga OLED makin murah, LCD juga kemungkinan akan tergantikan.
Pada contoh Gambar 11–22, LCD Optrex DMC-20481 (4 baris × 20 karakter) dihubungkan ke port A dari 82C55. LCD ini menerima kode ASCII sebagai data tampilan, dan juga menerima instruksi (command) untuk inisialisasi maupun pengendalian.
-
Interface 8-bit: semua pin data D0–D7 digunakan.
-
Interface 4-bit: hanya pin D4–D7 yang dipakai, data dikirim dua kali (nibble tinggi lalu nibble rendah).
-
Beberapa OLED modern bahkan punya interface serial dengan hanya satu pin data.
Pin kontrol LCD:
-
VEE → untuk mengatur kontras layar (biasanya pakai potensiometer 10 KΩ).
-
RS (Register Select) → pilih data (RS=1) atau instruksi/command (RS=0).
-
R/W (Read/Write) → pilih operasi baca atau tulis.
-
E (Enable) → berfungsi sebagai sinyal clock; harus dipulse (diberi logika 1 sebentar) agar LCD menerima data/command.
Selain itu ada pin LEDA (anoda) dan LEDK (katoda) untuk lampu backlight.
Langkah inisialisasi LCD (umum untuk driver HD44780 dan sejenisnya):
-
Tunggu minimal 15 ms setelah VCC naik ke 5V.
-
Kirim perintah function set 30H, tunggu 4,1 ms.
-
Kirim lagi perintah function set 30H, tunggu 100 µs.
-
Kirim lagi perintah function set 30H, tunggu 40 µs.
-
Kirim perintah function set 38H untuk mengatur mode operasi LCD (8-bit, 2 line, 5×8 dots).
- Kirim 08H → untuk menonaktifkan display sementara, tunggu minimal 40 µs.
-
Kirim 01H → untuk menghapus (clear) tampilan dan mengembalikan kursor ke posisi awal (home), tunggu 1,64 ms.
-
Kirim 0CH → untuk mengaktifkan display, cursor off (tidak terlihat), tunggu 40 µs.
-
Kirim 06H → untuk mengatur auto-increment (kursor otomatis bergeser ke kanan setelah menulis data), tunggu 40 µs.
Stepper motor adalah motor digital yang bergerak dalam langkah-langkah diskrit saat berputar 360°. Misalnya, ada stepper motor yang bisa bergerak 15° per langkah, atau bahkan 1° per langkah pada motor presisi tinggi. Pergerakan ini terjadi karena kumparan (coil) di dalam motor diberi arus secara bergantian sehingga rotor (magnet permanen) berputar ke posisi tertentu.
Gambar di atas menunjukkan stepper motor dengan empat kumparan dan satu rotor magnet. Rotor dapat berhenti di empat posisi berbeda sesuai dengan kumparan mana yang diberi arus. Setiap kali dua kumparan diberi arus, rotor akan bergeser ke posisi berikutnya, misalnya 45°, 135°, 225°, hingga 315°. Proses ini disebut full stepping, di mana motor bergerak langkah penuh dari satu posisi ke posisi berikutnya.
Untuk menggerakkan stepper motor, digunakan rangkaian penguat seperti NPN Darlington transistor, karena kumparan membutuhkan arus cukup besar. IC 82C55 berfungsi memberikan sinyal kontrol ke kumparan melalui transistor, sehingga rotor bisa diputar ke kanan atau ke kiri sesuai urutan pemberian arus.
Key Matrix Interface
Key Matrix Interface adalah metode menghubungkan papan tombol (keyboard) ke mikrokontroler atau mikroprosesor menggunakan susunan baris dan kolom. Keyboard, baik yang besar (seperti keyboard komputer 101 tombol) maupun kecil (4–16 tombol), biasanya menggunakan teknik ini untuk menghemat jumlah pin yang dibutuhkan.
Contoh pada gambar menunjukkan key matrix 4×4 (16 tombol) yang dihubungkan ke port A dan port B dari IC 82C55. Tombol-tombol disusun dalam bentuk 4 baris (ROW0–ROW3) dan 4 kolom (COL0–COL3). Cara kerjanya adalah dengan memberikan logika tertentu pada baris, lalu membaca sinyal pada kolom untuk mengetahui tombol mana yang ditekan.
Dengan metode ini, jumlah pin yang digunakan lebih sedikit. Misalnya, untuk 16 tombol cukup membutuhkan 8 pin (4 pin baris + 4 pin kolom), bukan 16 pin. Prinsip yang sama juga bisa dipakai untuk susunan lain seperti 2×8 atau ukuran lain sesuai kebutuhan.
Pada key matrix 4×4, ada 4 baris (ROW0–ROW3) dan 4 kolom (COL0–COL3). Setiap baris dihubungkan ke tegangan 5V melalui resistor 10 KΩ pull-up, tujuannya supaya kondisi baris tetap logika tinggi (1) jika tidak ada tombol yang ditekan.
IC 82C55 di sini diprogram dengan alamat I/O 50H–53H untuk prosesor 8088. Port A digunakan sebagai input untuk membaca baris, sedangkan Port B digunakan sebagai output untuk memilih kolom.
Contohnya:
-
Jika nilai 1110 dikirim ke Port B (PB3–PB0), maka kolom 0 dipilih. Pada saat itu, tombol-tombol di kolom 0 bisa terbaca di Port A. Jadi hanya tombol 0–3 yang dapat memberi sinyal logika 0 ke Port A jika ditekan.
-
Jika nilai 1101 dikirim, maka kolom 1 yang dipilih, sehingga tombol 4–7 bisa dibaca, dan seterusnya.
Agar tombol terbaca dengan benar, digunakan proses scanning: kolom diaktifkan satu per satu, lalu baris dibaca untuk mendeteksi tombol mana yang ditekan.
Selain itu, ada juga proses yang disebut debouncing. Ini diperlukan karena saat tombol ditekan atau dilepas, kontak mekanis bisa menyebabkan sinyal “bergetar” (naik turun cepat) dalam waktu singkat. Untuk menghindari kesalahan baca, software memberikan delay 10–20 ms.
- Mulai (KEY) : Proses dimulai untuk mengecek apakah ada tombol yang ditekan di keyboard matriks.
- Scan keys : Proses membaca baris dan kolom keyboard untuk melihat kondisi tombol (apakah ada yang ditekan).
- Time delay for de-bounce : Jika ada tombol yang terdeteksi, sistem menunggu sebentar (10–20 ms) untuk menghindari efek bouncing (getaran sinyal saat tombol ditekan).
- Scan keys lagi : Setelah delay, tombol dicek lagi untuk memastikan kondisinya stabil.
- Check keys (jika key closed) : Jika tombol memang benar ditekan (closed), maka masuk ke langkah berikutnya. Kalau tidak, kembali ke awal menunggu lagi.
- Scan keys : Tombol tetap dipantau sampai dilepaskan.
- Time delay for de-bounce : Setelah tombol dilepas, lagi-lagi ada delay singkat untuk menghindari bouncing.
- Scan keys lagi : Mengecek ulang apakah tombol benar-benar sudah dilepas.
- Check keys (jika key open) : Jika tombol sudah dilepas (open), lanjut ke proses berikutnya.
- Calculate key code : Sistem menghitung/menentukan kode tombol yang ditekan berdasarkan posisi baris dan kolom.
- Return : Proses selesai, kembali untuk siap membaca tombol berikutnya.
- OBF (Output Buffer Full) → Menunjukkan bahwa data sudah ada di port. Nilai 0 berarti buffer penuh (ada data), dan akan kembali ke 1 setelah perangkat eksternal mengambil data.
- ACK (Acknowledge) → Sinyal dari perangkat eksternal yang memberi tanda bahwa data sudah diterima. Saat ACK diterima, OBF kembali ke logika 1.
- INTR (Interrupt Request) → Sinyal yang bisa menginterupsi mikroprosesor ketika perangkat eksternal sudah menerima data. Fungsinya memberi tahu prosesor bahwa proses pengiriman selesai.
- INTE (Interrupt Enable) → Bit internal untuk mengaktifkan atau menonaktifkan fungsi INTR. Diatur lewat port C (PC6 untuk port A, PC2 untuk port B)
Pada contoh ini, 82C55 digunakan untuk menghubungkan mikroprosesor dengan printer paralel. Port B dipakai untuk mengirimkan data dalam bentuk kode ASCII ke printer. Printer akan menerima data setelah mendapat sinyal strobe, lalu memberikan sinyal balasan (acknowledge) sebagai tanda bahwa data sudah diterima.
Karena 82C55 tidak otomatis menghasilkan sinyal strobe untuk printer, maka pin PC4 digunakan, dan sinyal strobe ini dikendalikan oleh perangkat lunak. Jadi, alurnya adalah:
-
Program mengecek dulu apakah printer sudah mengambil data sebelumnya (buffer kosong).
-
Kalau buffer masih penuh, program menunggu sampai printer memberi tanda siap.
-
Jika printer siap, data dari register AH dikirim ke port B (ke printer).
-
Program juga mengirimkan sinyal strobe melalui PC4 agar printer tahu ada data baru.
-
Printer kemudian memberi sinyal balasan (ACK) ke 82C55 untuk konfirmasi bahwa data berhasil diterima.
Dengan cara ini, pengiriman data ke printer berjalan sinkron dan tidak ada data yang hilang atau bertumpuk.
Mode 2 Bidirectional Operation
Mode 2 pada 82C55 adalah mode khusus yang hanya bisa digunakan oleh Group A. Dalam mode ini, Port A berfungsi sebagai port bidirectional, artinya bisa dipakai untuk mengirim (output) maupun menerima (input) data melalui jalur kabel yang sama (8 bit).
Fungsi ini sangat bermanfaat untuk komunikasi dua arah, misalnya saat dua komputer saling bertukar data atau pada standar IEEE-488 (GPIB) yang digunakan dalam perangkat instrumen berkecepatan tinggi.
Agar komunikasi dua arah berjalan lancar, Port C digunakan sebagai jalur kontrol (handshaking). Sinyal-sinyal kontrol ini memastikan bahwa saat satu perangkat sedang mengirim data, perangkat lain tidak mengirim di waktu yang sama, sehingga tidak terjadi tabrakan data.
Singkatnya, Mode 2 memungkinkan pertukaran data dua arah dengan kontrol otomatis sehingga cocok untuk aplikasi komunikasi antarperangkat dengan kecepatan tinggi.
Signal Definitions for Bidirectional Mode 2
- INTR
(Interrupt Request) → Sinyal keluaran untuk meminta
interupsi ke mikroprosesor, baik saat input maupun output.
- OBF
(Output Buffer Full) → Sinyal keluaran yang menunjukkan
bahwa buffer output sudah berisi data siap dikirim.
- ACK
(Acknowledge) → Sinyal masukan untuk mengaktifkan
buffer tiga-keadaan (three-state). Jika ACK = 1, maka port A dalam keadaan
impedansi tinggi (tidak aktif).
-
PC4 → SCL (clock), diprogram sebagai output untuk menghasilkan sinyal clock.
-
PC0 → SDA (data), diprogram sebagai output saat mengirim data, dan sebagai input saat menerima data dari EEPROM.
Alamat port I/O yang dipakai:
-
0x1203 → command register
-
0x1202 → port C register
Untuk komunikasi, software harus mengikuti format data (lihat pada Figure 10–24 dan Example 11–22).
-
Penulisan data memerlukan delay waktu 1,25 µs agar kecepatan data 400 kHz.
-
Setelah instruksi tulis, software menunggu sinyal ACK (acknowledge) dari EEPROM menggunakan while loop.
8254 Programmable Interval Timer adalah chip yang memiliki tiga counter 16-bit independen (timer) yang bisa bekerja dalam mode biner atau BCD. Frekuensi input maksimum tiap counter adalah 10 MHz.
Fungsi utama 8254 adalah membantu mikroprosesor mengatur peristiwa real-time, contohnya:
-
Real-time clock,
-
Penghitung kejadian (event counter),
-
Pengendali kecepatan dan arah motor.
Dalam komputer pribadi, timer ini dipetakan ke port 40H–43H, dan digunakan untuk:
-
Menghasilkan interrupt timer sekitar 18,2 Hz,
-
Menyegarkan DRAM,
-
Memberi sumber timing untuk speaker internal dan perangkat lain.
8254 adalah versi kecepatan lebih tinggi dari 8253.
-
Tiap timer/counter memiliki:
-
CLK (Clock input) → memberikan frekuensi kerja dasar.
-
GATE → mengontrol operasi timer pada mode tertentu.
-
OUT → pin keluaran hasil hitungan timer.
-
-
Koneksi ke mikroprosesor:
-
D7–D0 (data bus) → untuk baca/tulis data.
-
A1 dan A0 (address input) → memilih salah satu dari 4 register internal (untuk program, baca, atau tulis counter).
-
Penggunaan di PC (port 40H–43H):
-
Timer 0 → menghasilkan sinyal 18,2 Hz untuk interrupt clock (interrupt vektor 8), dipakai sebagai clock tick untuk waktu program & event di DOS.
-
Timer 1 → diatur 15 µs, digunakan untuk permintaan DMA refresh pada DRAM.
-
Timer 2 → menghasilkan nada untuk speaker PC.
Fungsi Pin 8254:
-
A0, A1 → Memilih register internal (counter atau control word).
-
CLK → Sinyal clock untuk menghitung.
-
CS → Chip select, mengaktifkan 8254.
-
G → Gate, mengontrol operasi counter.
-
GND → Ground.
-
OUT → Keluaran gelombang dari counter.
-
RD → Membaca data dari 8254.
-
Vcc → Sumber daya +5V.
-
WR → Menulis data ke 8254.
Pada pemrograman 8254, pengaturan dilakukan melalui control word yang menentukan cara kerja tiap counter. Bit BCD digunakan untuk memilih jenis hitungan, apakah dalam bentuk BCD (BCD=1) atau biner (BCD=0). Tiga bit berikutnya (M2, M1, M0) dipakai untuk memilih salah satu dari enam mode operasi counter (000–101). Bit RW1 dan RW0 menentukan cara data dibaca atau ditulis ke counter, sedangkan bit SC1 dan SC0 digunakan untuk memilih counter tertentu atau mengaktifkan read-back mode. Pada penggunaannya, terdapat batasan jumlah hitungan minimum, yaitu 1 untuk semua mode, kecuali mode 2 dan 3 yang memiliki hitungan minimum 2.
Di dalam komputer pribadi, Timer 0 umumnya digunakan sebagai pembagi frekuensi (divide-by count) sebesar 64K (FFFFH) sehingga menghasilkan frekuensi interupsi sekitar 18,2 Hz. Timer 0 ini memiliki input clock sebesar 1,1925 MHz, yang berasal dari pembagian frekuensi dasar 4,77 MHz.
Setiap counter diprogram dengan urutan tertentu. Jika dua byte data diprogram, byte pertama (LSB) akan menghentikan hitungan, sedangkan byte kedua (MSB) akan memulai kembali counter dengan nilai baru. Urutan pemrograman ini sangat penting, meskipun pemrograman counter yang berbeda bisa dilakukan secara bergantian (interleaved) untuk efisiensi. Misalnya, programmer dapat terlebih dahulu mengirim control word ke beberapa counter, lalu menuliskan nilai hitungan (LSB dan MSB) untuk masing-masing counter. Dengan cara ini, beberapa counter dapat diatur sekaligus sesuai kebutuhan aplikasi.
Modes of Operation
Enam mode operasi (mode 0–mode 5) tersedia untuk setiap counter pada 8254. Gambar 11–35 menunjukkan bagaimana masing-masing mode ini bekerja dengan sinyal input CLK, sinyal kontrol gate (G), dan sinyal keluaran OUT. Uraian dari setiap mode dijelaskan sebagai berikut:
1. Mode
0 – Interrupt on Terminal Count
Output (OUT) rendah
saat menghitung.
Menjadi tinggi ketika
hitungan mencapai nol → biasanya digunakan untuk interupsi.
2. Mode
1 – Hardware Retriggerable One-Shot
Gate berfungsi sebagai
pemicu (trigger).
Setiap kali gate diaktifkan,
counter menghasilkan pulsa tunggal.
3. Mode
2 – Rate Generator
Bekerja sebagai
pembagi frekuensi.
Menghasilkan pulsa
periodik dengan periode yang stabil.
4. Mode
3 – Square Wave Generator
Mirip mode 2, tapi
menghasilkan gelombang kotak dengan duty cycle mendekati 50%.
Banyak digunakan untuk
clock sistem.
5. Mode
4 – Software Triggered Strobe
Hitungan dimulai oleh
software.
Ketika hitungan
selesai, output memberikan pulsa pendek (strobe).
6. Mode
5 – Hardware Triggered Strobe
Hitungan dimulai oleh
sinyal gate.
Setelah mencapai nol,
output menghasilkan pulsa strobe.
Gambar 11–36 menunjukkan sebuah 8254 yang dihubungkan untuk berfungsi pada port I/O 0700H, 0702H, 0704H, dan 0706H dari mikroprosesor 80386SX. Alamat-alamat tersebut didekode menggunakan sebuah PLD yang juga menghasilkan sinyal write strobe untuk 8254, yang dihubungkan ke jalur data orde rendah. PLD tersebut juga menghasilkan sinyal wait untuk mikroprosesor yang menyebabkan terjadinya dua wait state ketika 8254 diakses. Generator wait state yang terhubung ke mikroprosesor sebenarnya mengendalikan jumlah wait state yang dimasukkan ke dalam waktu kerja. Program untuk PLD tidak ditunjukkan di sini karena sama seperti banyak contoh sebelumnya.
Setiap counter di dalam 8254 memiliki latch internal yang dapat dibaca menggunakan operasi read counter port. Secara normal, latch ini selalu mengikuti nilai hitungan counter. Jika diperlukan untuk menyimpan nilai tertentu, maka dapat digunakan counter latch control word yang akan “mengunci” nilai counter ke dalam latch sampai nilai tersebut dibaca. Setelah perintah pembacaan dilakukan, latch kembali mengikuti nilai counter secara normal.
Apabila dibutuhkan pembacaan isi dari lebih dari satu counter pada saat yang sama, maka digunakan read-back control word. Dengan read-back control word, bit kontrol diatur ke logika 0 untuk memilih counter mana yang akan dilatch (CNT0, CNT1, CNT2). Selain isi counter, status register juga bisa dilatch dengan mengatur bit tertentu ke logika 0. Status register ini menunjukkan kondisi dari pin output, apakah counter sedang berada pada keadaan nol (null state), serta bagaimana counter tersebut sedang diprogram.
Salah satu aplikasi 8254 adalah untuk mengatur kecepatan dan arah putaran motor DC. Rangkaian menggunakan flip-flop dan transistor sebagai driver. Jika keluaran flip-flop (Q) bernilai logika 1, motor berputar maju, sedangkan jika Q = 0, motor berputar mundur. Dengan mengubah-ubah logika keluaran Q, arah motor dapat dibalik.
Selain arah, kecepatan motor diatur menggunakan PWM (Pulse Width Modulation), yaitu dengan mengubah lebar pulsa (duty cycle) pada output Q. Jika duty cycle 50%, motor tidak berputar tetapi tetap menahan torsi karena masih ada arus yang mengalir. Variasi duty cycle inilah yang menentukan cepat atau lambatnya motor berputar.
Bagian Utama Rangkaian:
-
8254 Timer (U2)
-
Digunakan untuk menghasilkan pulsa dengan lebar tertentu (PWM – Pulse Width Modulation).
-
Pulsa ini mengatur kecepatan motor DC dengan cara mengubah duty cycle sinyal.
-
-
Flip-Flop JK (74ALS112 – U3A)
-
Menerima sinyal dari output counter 8254.
-
Flip-flop ini menghasilkan sinyal Q yang akan mengontrol arah putaran motor.
-
Jika Q = 1, motor berputar maju, jika Q = 0, motor berputar mundur.
-
-
Driver Transistor (Q1, Q2, Q3, Q4) dengan Inverter 7406 (U4A–U4D)
-
Tersusun dalam bentuk H-Bridge.
-
Mengatur polaritas tegangan ke motor.
-
Kombinasi Q1–Q4 yang aktif menentukan arah arus melalui motor → sehingga motor bisa berputar ke arah maju atau mundur.
-
-
Sumber Daya (+12V)
-
Memberikan tegangan utama untuk menggerakkan motor DC.
-
Sedangkan 8254 dan IC logika bekerja dengan Vcc +5V.
-
-
PLD (U1 – 16L8)
-
Berfungsi sebagai decoder alamat untuk menghubungkan mikroprosesor (80386SX) dengan 8254.
-
Juga menghasilkan sinyal kendali seperti chip select (CS), wait state, dan strobe (RD, WR).
-
Cara Kerja:
-
Kecepatan Motor: ditentukan oleh duty cycle sinyal PWM yang dihasilkan 8254. Semakin besar duty cycle, semakin cepat motor berputar.
-
Arah Motor: dikendalikan oleh keluaran Q dari flip-flop. Jika Q tinggi (1), motor berputar maju; jika rendah (0), motor berputar mundur.
-
Pengendalian Lengkap: dengan memprogram 8254 melalui mikroprosesor, kita bisa mengatur baik kecepatan maupun arah motor DC secara fleksibel.
Chip PC16550D dari National Semiconductor adalah sebuah UART (Universal Asynchronous Receiver/Transmitter) yang bisa diprogram untuk berkomunikasi dengan hampir semua jenis antarmuka serial dan sepenuhnya kompatibel dengan mikroprosesor Intel.
16550 mampu beroperasi pada kecepatan 0–1,5 M baud (baud rate = jumlah bit yang ditransfer per detik, termasuk bit start, stop, data, dan paritas). Selain itu, chip ini dilengkapi baud rate generator yang bisa diprogram serta FIFO terpisah untuk data input dan output, masing-masing berkapasitas 16 byte.
Dengan adanya FIFO ini, beban kerja mikroprosesor menjadi lebih ringan karena tidak harus selalu melayani transfer data byte per byte. Itulah sebabnya 16550 menjadi antarmuka komunikasi serial yang paling umum digunakan dalam perangkat berbasis mikroprosesor, termasuk komputer pribadi dan modem.
Asynchronous Serial Data
Pada komunikasi serial asinkron, data dikirim dan diterima tanpa sinyal clock. Sebagai gantinya, sinkronisasi dilakukan menggunakan bit awal (start bit) dan bit akhir (stop bit) di setiap frame data.
Satu frame umumnya berisi:
-
1 start bit
-
7 atau 8 data bit (misalnya untuk karakter ASCII)
-
Opsional: 1 parity bit (untuk pengecekan kesalahan)
-
1 stop bit
Contohnya, sistem lama seperti CompuServe, Prodigy, dan AOL menggunakan format 10 bit/frame: 1 start + 7 data + 1 parity + 1 stop, dengan parity even. Sementara layanan Internet dan bulletin board modern biasanya tetap memakai 10 bit, tetapi tanpa parity → diganti dengan 8 data bit, sehingga lebih mudah untuk mentransfer data non-ASCII (misalnya file biner).
16550 Functional Description
Chip 16550 UART tersedia dalam kemasan 40-pin DIP atau 44-pin PLCC. Di dalamnya terdapat dua bagian utama yang terpisah, yaitu receiver (penerima data) dan transmitter (pengirim data). Karena keduanya bekerja secara independen, 16550 dapat beroperasi dalam mode simplex, half-duplex, maupun full-duplex.
Salah satu fitur utama 16550 adalah adanya FIFO (First-In, First-Out) internal baik di sisi receiver maupun transmitter, masing-masing berkapasitas 16 byte. Dengan FIFO ini, prosesor tidak perlu terlalu sering melayani UART, karena data bisa dikumpulkan hingga 16 byte sebelum diproses. Hal ini membuat 16550 cocok untuk sistem berkecepatan tinggi.
A0, A1, A2: Pin input alamat untuk memilih register internal pada chip.
ADS: Pin strobe alamat digunakan untuk menangkap baris alamat dan chip select, biasanya dihubungkan ke ground jika tidak dipakai.
BAUDOUT: Pin keluaran clock baud, digunakan untuk menghasilkan sinyal clock bagi komunikasi serial.
CS0, CS1, CS2: Pin chip select, semuanya harus aktif agar chip 16550 UART bisa bekerja.
CTS: Pin clear-to-send, menandakan apakah perangkat siap untuk bertukar data, sering digunakan dalam komunikasi setengah-duplex.

Comments
Post a Comment