Programmable Peripheral Interface (PPI) 8255
PPI 8255 PPI adalah modul IO paralel yang dapat digunakan untuk operasi IO dengan teknik Programmed IO dan Interrupt driven IO.
Blok diagram PPI 8255
PPI 8255 Bagian sebelah kanan dari blok di atas adalah interface eksternal ke peripheral (saluran PA7-PA0, PB7-PB0, dan PC7-PC0), sedangkan bagian sebelah kiri adalah interface internal ke mikroprosesor. PPI memiliki 3 buah port, yaitu Port A, Port B, dan Port C. Selain itu PPI juga memiliki sebuah Control Register. Masing-masing port dan Control Register membutuhkan satu alamat, sehingga PPI membutuhkan 4 buah alamat. Saluran masukan A1 dan A0 (pada bagian kiri blok) digunakan untuk memilih salah satu alamat.
PPI 8255 Port A dan Port B adalah port 8 bit, artinya dapat digunakan untuk input output data 8 bit. Sedangkan Port C, selain dapat digunakan sebagai port 8 bit juga dapat digunakan sebagai 2 buah port 4 bit (Port C upper dan Port C lower).
Tabel Kebenaran PPI 8255
Metode transfer data paralel Terdapat 4 metode transfer data paralel, yaitu: Simple Input and Output Simple Strobe I/O Single handshake I/O Double handshake I/O
Simple Input and Output Metode transfer ini digunakan untuk operasi input atau output pada peralatan yang selalu berada dalam keadaan siap (ready) seperti sensor dan LED.
Simple Strobe I/O Pada periperal tertentu, data hanya tersedia pada waktu tertentu saja. Untuk memperoleh data yang valid, pembacaan harus dilakukan pada saat tersebut. Contoh peralatan yang menggunakan metode ini adalah keyboard. Data dari keyboard ada hanya pada saat-saat tertentu, yaitu pada saat tombol ditekan dan pada saat tersebut data valid. Untuk memberitahu komponen lain bahwa ada data valid, keyboard menghasilkan sinyal strobe.
Single handshake I/O Metode transfer Simple Strobe I/O cocok digunakan untuk transfer data dengan kecepatan rendah. Jika komponen pengirim dapat mengirimkan data dengan kecepatan yang lebih tinggi dibanding yang dapat diterima oleh komponen penerima, maka metode tersebut tidak cocok digunakan. Untuk itu harus digunakan "handshaking" atau tanya jawab antar kedua komponen.
Double handshake I/O Jika koordinasi yang lebih baik diperlukan, maka digunakan 2 buah "handshaking“. Pada double handshake tiap tepi sinyal memiliki arti. Sebelum mengirimkan data pengirim terlebih dahulu menanyakan kesiapan penerima dengan menurunkan sinyal Strobe. Jika siap, penerima akan memberitahu pengirim dengan cara menaikkan sinyal Acknowledge. Selanjutnya pengirim mengirimkan data, dan memberitahu penerima bahwa data telah dikirim dengan cara menaikkan sinyal Strobe. Dan apabila data tersebut telah diterima, penerima menurunkan sinyal Acknowledge dan ini sekaligus berarti meminta pengirim mengirim data berikutnya.
Double handshake I/O
Mode Operasi PPI 8255 Mode 0 Mode 1 Mode 2
Mode Operasi PPI 8255 Mode O Operasi I/O dengan simple input output tanpa menggunakan sinyal handshaking. Jika port A dan port B diinisialisasi pada mode 0, maka port C dapat digunakan sebagai port 8 bit atau sebagai 2 buah port 4 bit (C upper dan C lower) yang berdiri sendiri.
Mode Operasi PPI 8255 Mode 1 Jika proses transfer data membutuhkan sinyal handshaking, maka PPI diinisialisasi pada mode 1. Jika port B diinisialisasi pada mode 1, maka saluran PC0, PC1, PC2 akan berfungsi sebagai saluran handshake untuk port B. Jika port A diinisialisasi pada mode 1 sebagai port input, maka saluran PC3, PC4, PC5 akan berfungsi sebagai sinyal handshake untuk port A. Sedangkan saluran PC6 dan PC7 dapat digunakan sebagai saluran input atau saluran output. Jika port A diinisialisasi pada mode 1 sebagai port output, maka saluran PC3, PC6, PC7 akan berfungsi sebagai sinyal handshake untuk port A. Sedangkan port PC4 dan PC5 dapat digunakan sebagai saluran input atau output.
Mode Operasi PPI 8255 Mode 2 Hanya port A yang dapat diiinisialisasi pada mode 2. Pada mode 2, port A dapat digunakan untuk transfer data 2 arah (port A berfungsi sebagai port input sekaligus port output) dan menggunakan sinyal-sinyal handshaking. Biasanya digunakan untuk memperpanjang bus system ke mikroprosesor slave.
Insialisasi PPI Sebelum dapat digunakan sebagai port input atau port output PPI terlebih dahulu harus diinisialisasi. Berikut ini dijelaskan cara mengiinisialisasi PPI. Tentukan Control Word atau data pengontrolan berdasarkan sifat port-port yang telah ditentukan sebelumnya. Untuk menentukan nilai tiap bit pada Control Word, ikuti aturan pada tabel di halaman berikutnya. Setelah Control Word ditentukan, isikan Control Word tersebut ke Control Register.
Tabel untuk penentuan Control Word
Contoh 1: Misalkan PPI akan diprogram agar berfungsi sebagai berikut: Port B : sebagai port input pada mode 1. Port A : sebagai port output pada mode 0. Port C upper sebagai port input Bit PC3 (Port C Lower) sebagai output. Misalkan alamat dari Control Register adalah 303 H.
Control Wordnya:
Program inisialisasinya : MOV DX, 303 H MOV AL, 10001110 B OUT DX, AL
Contoh 2: Semua port diinisialisasi sebagai port output pada mode 0 Control Wordnya adalah sebagai berikut:
Program inisialisasinya : MOV DX, 303 H MOV AL, 10000000 B OUT DX, AL Program output data (port A): MOV DX, 300 H MOV AL, 00001111 B
Contoh 3: Dengan menggunakan address decoder seperti pada gambar di atas, tentukanlah alamat Port A,B,C dan Control Register. Tentukanlah Control Word, diasumsikan port A dan C diset sebagai port input. Tuliskan program untuk menginisialisasi PPI. Tuliskan program untuk menyalakan/mematikan LED-LED seperti pada gambar di atas.
Contoh 4: Program ini membaca data dari saklar yang terhubung ke port 300 H. Jika saklar off (0) maka lampu-lampu yang terhubung ke port 301 H akan padam. Jika saklar on (1) maka lampu-lampu yang terhubung ke port 301 H akan menyala. Kedua port tersebut adalah port 8-bit.
Segmen Programnya: MOV DX, 300 H IN AL,DX AND AL,01 H ; periksa saklar, apakah on atau off JNZ On Off: MOV DX,301 H MOV AL,00 H ; u/ mematikan lampu OUT DX,AL ……… On: MOV DX,301 H MOV AL,FF H ; u/ menyalakan lampu ……….
Contoh 5: Program ini membaca data dari sebuah sensor suhu. Jika suhu lebih atau sama dengan 27 derajat, heater akan dimatikan. Sebaliknya jika suhu kurang dari 27 derajat, maka heater akan dinyalakan. Dimisalkan sensor suhu terhubung ke port dengan alamat FFFB H, sedangkan heater terhubung ke port dengan alamat FFFA H. Untuk menghidupkan heater pada port FFFA H dikirimkan data 80 H, sedangkan untuk mematikan heater pada port FFFA H dikirimkan data 00 H.
CODE_HERE SEGMEN 'CODE' ASSUME CS:CODE_HERE TEMP_IN: MOV DX,FFFB H ; baca data dari sensor IN AL,DX CMP AL,27 ; uji dengan bilangan 27 JB HEATER_ON ; jika di bawah 27 JMP HEATER_OFF ; jika di atas/sama dengan 27 HEATER_ON: MOV AL,80 H MOV DX,FFFA H OUT DX,AL ; hidupkan heater JMP TEMP_IN ; baca lagi data dari sensor HEATER_OFF: MOV AL,00 H OUT DX,AL CODE_HERE ENDS
Men-set/reset bit-bit port C Selain digunakan untuk menentukan konfigurasi port-port, control word juga digunakan untuk men-set/reset bit-bit port C (PC0 .. PC7). Apabila sebelumnya pada saat control word digunakan untuk menentukan konfigurasi port, bit D7 diisi dengan 1, pada saat control word digunakan untuk men-set/reset nilai bit-bit port C, nilai D7 haruslah diisi dengan 0.
Contoh: Nilai bit PC3 akan diset. Untuk itu ditentukan control wordnya sebagai berikut:
Contoh: Nilai bit PC5 akan direset. Untuk itu ditentukan control wordnya sebagai berikut:
Sama seperti control word untuk mengkonfigurasi port, control word ini juga harus dikirimkan ke control register. Jika alamat control register adalah 303 H, maka program inisialisasinya adalah: MOV DX, 303 H MOV AL, 00000111 B OUT DX, AL
PPI 8255 pada mode 1 digunakan sebagai port input Ada 2 sinyal handshaking yang digunakan, yaitu : strobe dan IBF (input buffer full). Sinyal strobe dihasilkan oleh peripheral pengirim, sedangkan IBF dihasilkan oleh PPI.
PPI 8255 pada mode 1 digunakan sebagai port output Ada 2 sinyal handshaking yang digunakan, yaitu: OBF (output buffer full) dan Acknowledge. Sinyal OBF dihasilkan oleh PPI, sedangkan sinyal acknowledge dihasilkan oleh peripheral penerima.
Contoh Aplikasi PPI: Pengontrolan mesin bubut oleh mikrokomputer Pada sistem ini operasi sebuah mesin bubut akan dikontrol oleh mikrokomputer. Mesin bubut digunakan untuk membuat berbagai jenis baut dari batang stainless steel. Data-data pemotongan untuk tiap baut tersimpan pada sebuah metal tape.. Tape reader berfungsi membaca data-data yang tersimpan pada metal tape. Mikrokomputer akan membaca data tersebut dari tape reader. Mikrokomputer juga akan selalu memantau kondisi mesin bubut untuk memastikan bahwa mesin bubut tidak kehabisan bahan, minyak pelumasnya tidak habis, dan juga memastikan mesin bubut tidak macet oleh berbagai sebab yang lain.
Pada aplikasi ini PPI terlebih dahulu diinisialisasi dengan konfigurasi berikut: Port A harus diinisialisasi sebagai port input pada mode 1 karena pembacaan data dari tape reader membutuhkan sinkronisasi (menggunakan sinyal-sinyal handshaking). Port B digunakan untuk mengoutputkan data pengontrolan berupa sinyal on/off ke mesin bubut dan operasi tersebut tidak membutuhkan sinyal-sinyal handshaking. Untuk itu Port B diinisialisasi sebagai port output pada mode 0. Bit PC0, PC1, PC2 digunakan untuk menginputkan data sensor dari mesin bubut dan operasi ini pun tidak membutuhkan sinyal handshaking sehingga port C lower diinisialisasi pada mode 0 sebagai port input.
Bit PC3, PC4, PC5 berfungsi sebagai sinyal-sinyal handshaking yang digunakan pada proses transfer data dari tape reader ke port A. Bit PC6 digunakan untuk menghasilkan sinyal GO/STOP untuk menghidupkan/mematikan tape reader. Untuk itu port C upper diinisialisasi sebagai port output. Bit PC7 tidak digunakan.
Untuk konfigurasi tersebut control word-nya adalah sebagai berikut :
Cara Kerja Sistem : PPI diinisialisasi Sistem akan membaca port C bit PC0, PC1, PC2 untuk mengecek apakah mesin bubut siap untuk beroperasi. Pembacaan port C dilakukan dengan melakukan input dari alamat port C. Jika mesin bubut siap, maka mikrokomputer akan mengeluarkan perintah START (GO) berupa sinyal "low" melalui bit PC6. Hal ini dilakukan dengan menggunakan perintah set/reset command. Karena sinyal ini berupa sinyal low, berarti bit PC6 harus direset. Control word yang digunakan untuk mereset PC6: 00001100 .
Cara Kerja Sistem : Setelah tape reader menerima perintah START (GO), tape reader akan mulai membaca data dan mengirimkan datanya dalam bentuk data 8-bit melalui saluran R0 sampai R7 ke port A. Proses transfer data ini menggunakan sinyal-sinyal handshaking untuk sinkronisasi sehingga tape reader hanya akan mengirimkan data berikutnya jika ada konfirmasi dari penerima bahwa data telah berhasil diterima.
Proses transfer datanya adalah sebagai berikut: Tape reader mengirim data melalui bit R0 sampai R7. Tape reader kemudian menurunkan level sinyal strobe pada PC4 ke "low" sebagai tanda bahwa data telah dikirim. Sebagai balasannya PPI akan menaikkan sinyal IBF (input buffer full) pada PC5 ke "high" sebagai tanda bahwa PPI siap menerima data. Pada saat mendeteksi perubahan level IBF ke "high", tape reader akan kembali menaikkan level sinyal strobe ke "high".
Perubahan level sinyal strobe dari "low" ke "high" memberikan 2 efek pada PPI. Yang pertama, PPI akan mengambil data dari saluran (PA0..PA7) dan menyimpannya pada buffer di port A. Yang kedua, perubahan tersebut akan menyebabkan PPI mengirimkan sinyal interupsi ke mikrokomputer melalui saluran PC3. Pada saat menerima sinyal interupsi, prosesor akan mengerjakan suatu rutin interupsi yang akan membaca data dari port A. Pada saat membaca data, mikrokomputer akan mengirimkan sinyal RD. Pada saat sinyal ini berubah ke "low" , PPI akan menghentikan pengiriman sinyal interupsi. Pada saat sinyal RD berubah menjadi "high", PPI akan menurunkan level sinyal IBF ke "low". Sinyal IBF berubah ke "low" merupakan tanda bagi tape reader bahwa proses transfer data telah selesai dan bahwa tape reader boleh mengirimkan data berikutnya.
Diagram waktu proses transfer data
Data yang dibaca dari tape reader dieksekusi di prosesor Data yang dibaca dari tape reader dieksekusi di prosesor. Dan sebagai hasilnya mikrokomputer akan mengoutputkan data-data pengontrolan melalui port B ke mesin bubut.
Catatan: Instruksi AND Penulisan: AND destination, source Fungsi : Membentuk perkalian logika Instruksi AND digunakan untuk mengclear bit bilangan biner, seperti contoh berikut. Nilai bit yang di-AND-kan dengan 1 tidak berubah, sedangkan nilai bit yang di-AND-kan dengan 0 berubah menjadi 0.
Contoh: MOV AL, 9D H (1001 1101 B) AND AL, 3C H (0011 1100 B) Hasilnya, isi AL = 1C H (0001 1100 B
Instruksi TEST Penulisan : TEST destination, source Fungsi instruksi ini ialah membentuk operasi yang hampir sama dengan AND. Perbedaannya, instruksi AND mengubah operand tujuan, sedangkan instruksi TEST tidak. Instruksi TEST hanya mempengaruhi isi register flag. Instruksi TEST memiliki fungsi yang sama dengan instruksi CMP. Perbedaannya adalah bahwa instruksi TEST biasanya mengetes bit tungggal (atau bit ganda), sedangkan instruksi CMP mengetes seluruh data byte atau word. Biasanya instruksi TEST diikuti oleh instruksi JZ(Jump if Zero) atau JNZ (Jump if Not Zero).
Contoh program: Berikut adalah sekumpulan instruksi untuk mengetes bit paling kiri dan paling kanan dari register AL. Di sini , 1 (1 H) dipilih untuk mengetes bit paling kanan dan 128 (80 H) untuk mengetes bit paling kiri. TEST AL,1 H ; tes bit paling kanan JNZ RIGHT ; jika bit paling kanan (bit 0) =1, jump ke label RIGHT ………….. TEST AL, 80 H ; test bit paling kiri JNZ LEFT ; jika bit paling kiri (bit 7) =1, jump ke label LEFT
Instruksi IN Penulisan : IN akumulator,port Fungsi : Menginputkan data dari port ke akumulator (register AL atau register AX). Port adalah sebuah komponen tempat peralatan input output terhubung. Contoh port adalah port serial COM1, COM2 yang biasa dihubungkan dengan mouse atau keyboard; port printer LPT1, atau port PPI yang biasa digunakan untuk eksperimen.
Instruksi OUT Penulisan : OUT port,akumulator Fungsi : Menyalin (mengoutputkan) data dari akumulator (Register AL atau Register AX) ke port.
Instruksi CMP Penulisan : CMP destination,source Fungsi : Membandingkan data pada destination dengan data pada source. Instruksi perbandingan (CMP) adalah bentuk pengurangan yang hanya mengubah bit-bit flag, sedangkan operand destination tidak berubah.
Jump Istilah lebih besar (greater) dan lebih kecil (less) mengacu ke bilangan bertanda, sedangkan di atas (above) dan di bawah (below) mengacu ke bilangan tak bertanda.