PPI 8255
Definisi:
Adalah suatu komponen Paralel Input atau Paralel Output Port dalam
suatu chip serbaguna yang dapat diprogram fungsi input / outputnya. PPI 8255
dibuat oleh Intel Co untuk digunakan bersama mikroprosesor buatan Intel. Tetapi
karena komponen ini standard, kompatible dengan IC TTL, maka dapat dimanfaatkan
oleh prosesor yang lain. Aplikasi dari 8255 adalah untuk perangkat keyboard, joystick,
mouse, printer, LED. [1]
Konsep
PPI 8255
Blok diagram PPI 8255
Konfigurasi pin 8255
Perangkat
Interface
Berikut penjelasan masing-masing pin :
PA0-PA07
Ini ialah port A yang terdiri dari
8 bit , dapat diprogram sebagai input atau output dengan mode bi-directional input/output.
PB0-PB7
Port B ini dapat diprogram sebagai input /output, tetapi tidak dapat
digunakan sebagai port bi-directional.
PC0-PC7
Port C ini dapat diprogram sebagaiinput/output. Bahkan dapat dipecah
menjadi 2 yaitu CU( bit PC4-PC7) dan CL (bit PC0-PC3) yang dapat diprogram
sebagai input/output .
RD dan WR
Sinyal control aktif rendah ini dihubungkan ke 8255.
Jika 8255 menggunakan desain peripheral I/O, IOR adan IOW dari system
bus dihubungkan ke kedua pin ini.
RESET
Pin aktif tinggi ini digunakan untuk membersihkan control
register. Ketika RESET diaktifkan,
seluruh port diinisialisasi sebagai port input. [2]
Deskripsi fungsi 8255
A. Data bus buffer
Buffer bidirectional theree state ini digunakan untuk antar muka 8255
ke sistem bus data,data dikirim dan diterima oleh buffer berdasarkan eksekusi
input atau output dari CPU. Kata kontrol dan status informasi juga dikirimkan
melalui buffer data bus.
B. Read/Write dan kontrol
logic.
Fungsi dari blok ini adalah untuk mengatur semua pengiriman baik
internal maupun eksternal dari data dan kata kontrol. Blok ini menerima input
dari alamat CPU dan bus kontrol dan selanjutnya blok ini mengirimkan perintah
ke kedua group kontrol.
C. Chip Select
Chip Select, logika low pada pin input ini maka komunikasi antara 8255
dan CPU akan enable.
D. Read
Read,logika low pada pin input ini maka 8255 akan mengirimkan data atau
status informasi ke CPU pada bus data.
E. Write
Logika low pada pin input ini maka CPU dapat menulis data atau kata
kontrol ke 8255
F. A0 dan A1
Port select 0 dan port select 1,sinyal input ini berhubungan dengan
input RD dan WR, mengontrol pemilihan satu dari tiga port atau register kontrol
pin tersebut umumnya dihubungkan ke least significant bus dari bus addres (A0
dan A1).
G. Port A,B dan C
8255 terdiri dari tiga buah port 8 bit (A,B dan C). semuanya dapat
dikonfigurasikan dalam berbagai variasi fungsi bergantung pada sistem software
yang diberikan.
Port A. 8 bit data Output latch buffer dan 8 bit data input latch.
Port B. 8 bit data Output latch buffer dan 8 bit data input latch.
Port C. 8 bit data Output latch buffer dan 8 bit data input latch.
Tiap 4 bit port terdiri dari 4 bit latch dan dapat digunakan untuk
sinyal output kontrol dan sinyal input status.
Pada saat CS memilih chip, A0 dan A1 yang memilih port tertentu. 3 pin
ini digunakan untuk mengakses port A, B atau C, atau control register sesuai
Tabel
Konfigurasi dari 24 jalur I/O ini bisa digunakan untuk masukan,
keluaran, ataupun biderectional ( dua arah ). Pada I/O yang dikontrol secara
software akan lebih mudah bila dibandingkan dengan pengontrolan secara
hardware. Untuk memilih port 8255 digunakan dua buah address pin, yaitu A1 dan
A0, dengan kombinasi sebagai berikut :
A1
|
A2
|
Register
|
0
|
0
|
Port A
|
0
|
1
|
Port B
|
1
|
0
|
Port C
|
1
|
1
|
Control Word
|
Sedangkan untuk operasinya:
A1
|
A0
|
RD
|
WR
|
CS
|
Keterangan
|
0
|
0
|
0
|
1
|
0
|
Data masuk ke bus data Port A
|
0
|
1
|
0
|
1
|
0
|
Data masuk ke bus data Port B
|
1
|
0
|
0
|
1
|
0
|
Data masuk ke bus data Port C
|
0
|
0
|
1
|
0
|
0
|
Data keluar ke bus data Port A
|
0
|
1
|
1
|
0
|
0
|
Data keluar ke bus data Port B
|
1
|
0
|
1
|
0
|
0
|
Data keluar ke bus data Port B
|
1
|
1
|
1
|
0
|
0
|
Memilih Control Word
|
X
|
X
|
1
|
8255 tidak dipilih
|
CS harus dibuat rendah pada saat pembacaan atau penulisan pada PPI ini.
Sinyal reset bila aktif akan membersihkan seluruh register internal PPI dan
membuat PPI berfungsi dalam mode masukan
Metode
Pengiriman
Ada tiga mode operasi yang dapat dipilih olehsistem perangkat lunak
untuk mengoperasikan PPI 8255 yaitu:
1. Mode 0 – Basic Input/Output
Mode ini digunakan untuk input/output sederhana langsung ke port
I/O.Peralatan luar yang dihubungkan selalu siap untuk mengirimkan/menerima
data, sehingga mode ini tidak tergantung pada waktu.
Semua port A, B dan C bisa bekerja pada mode ini. Port-port PPI hanya
bisa digunakan sebagai port input atau port output dari sistem mikroprosesor.
Port A dan port B masing-masing dapat digunakan sebagai 8 bit masukan saja atau
8 bit keluaran saja. Sedangkan port C dapat digunakan sebagai empat (4) bit
masukan atau empat (4) bit keluaran seperti port A dan port B.
2. Mode 1 – Strobe Input/Output
Mode ini digunakan untuk peralatan luar yang mempunyai data valid pada
saat – saat tertentu, sehingga diperlukan sinyal-sinyal pemicu (strobe) pada
I/O agar data segera dapat dikirim, sehingga mode ini tergantung pada waktu.
Pada mode ini port A dan port B bisa ditentukan sebagai port masukan
atau keluaran data, sedangkan port C berfungsi sebagai pembawa sinyal
status.Transfer data mode ini merupakan sinyal terprogram bersyarat.
3. Mode 2 – Bidirectional Bus
Mode ini mampu mengrim/menerima data dalam dua arah (bidirectional
handshake data transfer).
Mode ini menyebabkan port A bisa berfungsi sebagai masukan sekaligus
keluaran yang dilengkapi dengan sinyal jabat tangan 5 bit dari port C sebagai
kontrol port A. Mode ini tidak tersedia untuk port B.
Kata Kendali (Control Word) merupakan pendefinisian mode dan port yang
akan digunakan dan prosesnya dilakukan oleh perangkat lunak yang ditunjukkan
dalam Gambar [3]
Contoh Penggunaan Interface
Misalkan jika kita ingin memprogram 8255 dengan
ketentuan sebagai berikut:
Port A Ã input
Port B Ã output
Port C (upper) Ã output
Port C (lower) Ã input
Grup B mode 0
Grup A mode 0
Maka caranya adalah:
A1 A2 Ã 1
D0 Ã 1
D1 Ã 0
D2 Ã 0
D3 Ã 0
D4 Ã 1
D5 D6 Ã 0
D7 Ã 1
Contoh Program dengan bahasa assembly
Memprogram
port A sebagai input data dan mengeluarkannya ke port B dan C
MOV AL, 90H control
byte
MOV DX, 313H load control
register address
OUT DX AL send
it to control register
MOV DX, 310H load PA
address
IN AL, DX get
the data from PA
MOV DX, 311H load PB
address
OUT DX, AL send it
to PB
MOV DX, 312H load PC address
OUT DX, AL send it
to PC
Ket:
90H Ã control byte
310H Ã
Port A
311H Ã
Port B
312H Ã
Port C
313H Ã
Control Word
Inisialisasi
IC 8255
• Pemakai dapat menentukan mode PPI sekaligus fungsi
dari tiap
port, apakah sebagai input atau output.
• Contoh program untuk inisialisasi IC 8255
• Connector PPI :
• Port
A 300h
• Port
B 301h
• Port
C 302h
• Port
CW 303h
• berfungsi sebagai mode 0, dengan port A dan Port C
sebagai
input serta Port B sebagai output. Disini dipakai
connector
PPI.
• Control Word yang harus dikirim supaya IC 8255
dapat
berfungsi
• Port
A 300h
• Port
B 301h
• Port
C 302h
• Port
CW 303h
• Sehingga program untuk melakukan inisialisasi :
• MOV AL, 10011001b
• MOV DX, 303h
•OUT DX, AL
•Kemudian program dapat dilanjutkan dengan melakukan
pembacaan
pada port A, misalnya. Atau bisa juga
memberikan
output ke port B. Berikut ini contoh untuk
melakukan
pembacaan input dari port A.
• MOV DX, 301h
• IN AL, DX
• Didalam program tersebut terlihat
instruksi-instruksi IN
dan OUT
yang memegang peranan penting dalam
pengiriman
data ke dalam dan ke luar sistem komputer.
Instruksi
OUT DX,AL berarti mengirimkan data yang
berada di
AL ke alamat port yang tersimpan di DX.
Sedangkan
IN AL,DX berarti membaca data dari port
yang
alamatnya tersimpan di DX kemudian menyimpan
data
tersebut di AL.
Contoh
–contoh instruksi I/O
1.
Assembler
• Output :
• mov
dx, 300h
• mov
al, 45h
• out
dx, al
• Input
• mov
dx,301h
• in
al,dx
2. Pascal
• Output :
•
Port[$301]:=$50; {kirim data 50h ke port
B}
• Input :
•C:=Port[$302];
{baca data dari port C}
3. C
• Output :
Outportb(0x0300,0x025); {kirim data 25h ke port A}
• Input :
D:=inportb(0x0302);
{baca data dari port C}
4. Basic
• Output :
Out
0x0378,D; {kirim data di variabel D ke
port
paralel
(DP)
• Input :
B:=inp(0x0379); {baca data dari port paralel
(PS)
Contoh Program dalam
Borland
uses crt, dos;
label
comeback;
var
I:
integer;
data:
byte;
tanya:
Char;
Begin
comeback:
port[$303]:=$80;
port[$301]:=0;
port[$302]:=0;
port[$300]:=0;
data:=1;
for i:=1 to 8 do
begin
port[$300]:=data;
data:=data shl 1;
delay (1000);
end;
port[$300]:=0;
data:=1;
for i:=1 to 8 do
begin
port[$301]:=data;
data:=data shl 1;
delay (1000);
end;
port[$301]:=0;
data:=1;
for i:=1 to 8
do
begin
port[$302]:=data;
data:=data shl 1;
delay (1000);
end;
port[$302]:=0;
Writeln (‘you comeback again (Y/N)?);
Readln (tanya);
If upcase (tanya)=‘Y’ then goto
comeback;
Readln;
End.
Contoh Program
dalam bahasa C
/*
** 8255.c
**
** Illustrates how 8255 may be configured for
outputs on 8255 Ports
** A, B and C.
**
** 8255 is first setup with control word 0x80
** Mode set
flag active - bit 7 = 1
** Mode
selection 0 - bits 6 5 = 0 0
** Port A
output - bit 4 = 0
** Port C
(upper) output - bit 3 = 0
** Mode
selection 0 - bit 2 = 0
** Port B
output - bit 1 = 0
** Port C
(lower) output - bit 0 = 0
**
** Data may then be output by calling out_data
(port, data) where
** Port A -
0
** Port B -
1
** Port C -
2
**
** P. H. Anderson, Morgan State Univeristy, June 20,
'96
**
*/
#include <stdio.h>
#include <dos.h>
#define DATA 0x03bc
/* set for your machine */
#define STATUS DATA+1
#define CONTROL DATA+2
void reset(void);
void write_clock(int a1a0);
void set_control_word(void);
void out_data(int port, int data);
void main(void)
{
int port;
reset();
set_control_word();
/* now we
are ready to go */
/* each
port exercised with 0x00, 0xaa, 0x55 and 0xff */
for (port =
0; port<3; port++)
{
out_data(port, 0x00);
delay(1000);
out_data(port, 0xaa);
delay(1000);
out_data(port, 0x55);
delay(1000);
out_data(port, 0xff);
delay(1000);
}
}
void set_control_word(void)
{
int a1a0 =
0x03;
outportb(DATA, 0x80); /* out control word on data leads */
/* bring a1
a0 to 1 1, WR to 1 */
outportb(CONTROL,
(
((0x00) | (a1a0 << 1) | 0x01) ^ 0x0b)
& 0x0f);
/* now wink
WR low and high */
write_clock(a1a0);
}
void out_data(int port, int data)
{
int a1a0 =
port;
outportb(DATA, data); /* put data on data leads */
/* set a1
and a0 to 0 0, 0 1 or 1 0, WR to 1 */
outportb(CONTROL,
(
((0x00) | (a1a0 << 1) | 0x01) ^ 0x0b) & 0x0f);
/* now wink
WR low and high */
write_clock(a1a0);
}
void write_clock(int a1a0)
{
/* bring WR
low */
outportb(CONTROL,
(((0x00) | (a1a0<<1) & (~0x01) ) ^
0x0b) & 0x0f);
/* bring WR
back high */
outportb(CONTROL,
(( (0x00) | (a1a0<<1) | (0x01)) ^ 0x0b)
& 0x0f);
}
void reset(void)
{
/* bring
reset high */
outportb(CONTROL, 0x08^0x0b); [4]
timing diagram
Sumber
3. http://blog.ub.ac.id/prastise/2011/03/20/fungsi-dan-operasional-ppi-8255-dengan-mikrokontroler-8051/
Nice to see my blog post in the list..Thank you. And obviously thats a very useful post that you have posted.
BalasHapusyou're welcome,,,
BalasHapus