Selasa, 04 Oktober 2011

DONY HENDRA

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 &ltstdio.h>
#include &ltdos.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&lt3; 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<&lt1) & (~0x01) ) ^ 0x0b) & 0x0f);

   /* bring WR back high */
   outportb(CONTROL,
(( (0x00) | (a1a0<&lt1) | (0x01)) ^ 0x0b) & 0x0f);
}

void reset(void)
{
   /* bring reset high */
   outportb(CONTROL, 0x08^0x0b); [4]


timing diagram






Sumber

2 komentar:

  1. Nice to see my blog post in the list..Thank you. And obviously thats a very useful post that you have posted.

    BalasHapus