Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko BAB III PERLUASAN MASUKAN/KELUARAN PARALLEL Mikrokontroler AT89C51/52 mempunyai port masukan dan keluaran parallel yang terbatas. Bahkan beberapa port masukan/keluaran parallel digunakan secara bersama untuk dua fungsi atau lebih. Hanya port 1 saja yang digunakan untuk fungsi masukan/keluaran , sedangkan Port 0, 2, dan 3 digunakan untuk lebih dari satu fungsi. Beberapa aplikasi membutuhkan port masukan/keluaran yang lebih banyak dari yang tersedia pada mikrokontroler, dengan demikian perlu dilakukan perluasan port masukan/keluaran. Perluasan masukan/keluaran dapat dilakukan dengan menambahkan komponen yang dapat digunakan sebagai port masukan/keluaran, seperti latch, buffer, dan driver yang bersifat satu arah saja (masukan atau keluaran saja) maupun dua arah (sebagai masukan dan keluaran secara multipleks), atau komponen yang dikhususkan untuk fungsi masukan/keluaran. Pada bab ini akan dibahas penggunaan komponen khusus untuk masukan/keluaran dengan seri PPI 8255 (Programmable Peripheral Interface). Catatan: Beberapa versi mikrokontroler 8051/52 menggunakan Port 1 untuk fungsi selain I/O parallel. III.1 Programmable Peripheral Interface 8255 (PPI 8255) PPI8255 merupakan port masukan/keluaran yang dapat diprogram dan umum digunakan untuk aplikasi port masukan/keluaran maupun perluasan port masukan/keluaran. PPI 8255 terdiri atas 24 jalur masukan/keluaran yang diorganisasikan menjadi tiga buah port masing- masing 8 bit, yang dapat diprogram untuk fungsi masukan atau keluaran. Ketiga port tersebut dikelompokkan ke dalam dua group, yaitu group A dan B. Pada PPI 8255 port masukan/keluaran diberi nama masing-masing Port A, Port B, dan Port C, blok diagram dan susunan kaki chip diperlihatkan pada gambar 1 dan 2. Gambar III.9 Diagram Blok Internal PPI8255 TRIFAMEDIA 1
Penjelasan teknik menghubungkan peripheral I/O (8255) dengan mikrokontroler AT8951 dengan bahasa pemrograman C (SDCC)
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
BAB III
PERLUASAN MASUKAN/KELUARAN PARALLEL
Mikrokontroler AT89C51/52 mempunyai port masukan dan keluaran parallel yang terbatas. Bahkan beberapa port masukan/keluaran parallel digunakan secara bersama untuk dua fungsi atau lebih. Hanya port 1 saja yang digunakan untuk fungsi masukan/keluaran , sedangkan Port 0, 2, dan 3 digunakan untuk lebih dari satu fungsi. Beberapa aplikasi membutuhkan port masukan/keluaran yang lebih banyak dari yang tersedia pada mikrokontroler, dengan demikian perlu dilakukan perluasan port masukan/keluaran.
Perluasan masukan/keluaran dapat dilakukan dengan menambahkan komponen yang dapat digunakan sebagai port masukan/keluaran, seperti latch, buffer, dan driver yang bersifat satu arah saja (masukan atau keluaran saja) maupun dua arah (sebagai masukan dan keluaran secara multipleks), atau komponen yang dikhususkan untuk fungsi masukan/keluaran. Pada bab ini akan dibahas penggunaan komponen khusus untuk masukan/keluaran dengan seri PPI 8255 (Programmable Peripheral Interface).
Catatan:Beberapa versi mikrokontroler 8051/52 menggunakan Port 1 untuk fungsi selain I/O parallel.
PPI8255 merupakan port masukan/keluaran yang dapat diprogram dan umum digunakan untuk aplikasi port masukan/keluaran maupun perluasan port masukan/keluaran. PPI 8255 terdiri atas 24 jalur masukan/keluaran yang diorganisasikan menjadi tiga buah port masing-masing 8 bit, yang dapat diprogram untuk fungsi masukan atau keluaran. Ketiga port tersebut dikelompokkan ke dalam dua group, yaitu group A dan B. Pada PPI 8255 port masukan/keluaran diberi nama masing-masing Port A, Port B, dan Port C, blok diagram dan susunan kaki chip diperlihatkan pada gambar 1 dan 2.
Gambar III.9 Diagram Blok Internal PPI8255
TRIFAMEDIA 1
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
Gambar III.9 Susunan Kaki Chip PPI 8255
III.2 Fungsi Masing-masing Kaki Chip PPI 82C55
Fungsi masing-masing kaki chip PPI 8255 terangkum pada tabel
Tabel III.6 Fungsi kaki chip PPI 8255
Nama Fungsi
PA0 s/d PA7 (Port A)port masukan/keluaran yang dapat diprogram menjadi masukan atau keluaran.
PB0 s/d PB7 (Port B)port masukan/keluaran yang dapat diprogram menjadi masukan atau keluaran.
PC0 s/d PC7 (Port C)port masukan/keluaran yang dapat diprogram menjadi masukan atau keluaran.
D0 s/d D7 ( Bus Data)jalur data yang terhubung dengan bus data atau port masukan/keluaran pada sistem mikroprosesor.
A0 dan A1masukan alamat yang terhubung dengan bus alamat pada sistem mikroprosesor.
RDjalur signal baca (read) aktif rendah, bersama-sama dengan jalur signal pemilih chip (CS) digunakan untuk mengendalikan proses baca (membaca data masukan).
WRsignal tulis (write) aktif rendah , bersama-sama dengan jalur signal pemilih chip (CS) digunakan untuk mengendalikan proses tulis (menulis data keluaran)
CSjalur signal pemilih chip (chip select) aktif rendah, yang digunakan untuk mengaktifkan atau menonaktifkan chip.
RESET jalur yang digunakan untuk mengaktifkan reset.VCC jalur catu daya positif ( +5V).GND jalur ground
III.3 Register PPI 8255
PPI 8255 mempunyai empat buah register, tiga diantaranya digunakan untuk penyangga ( buffer) port dan satu digunakan sebagai register konfigurasi. Alamat masing-masing register seperti pada tabel 3.1.
Tabel III.6 Alamat Register PPI 8255
A1 A0 Alamat Hex Nama Register Sifat0 0 0x00 Register Port A Baca/tulis
TRIFAMEDIA 2
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
0 1 0x01 Register Port B Baca/tulis1 0 0x02 Register Port C Baca/tulis1 1 0x03 Register Control tulis
Catatan:Alamat port PPI8255 yang sebenarnya tergantung pada pemetaan PPI8255 pada ruang memori atau masukan/keluaran.
III.4 Mode Operasi
PPI 8255 mempunyai tiga buah mode operasi, yaitu:Mode 0: masukan/keluaran biasaMode 1: masukan/keluaran dengan strobe (handshaking)Mode 2: bus dua arah.
Dari ketiga mode operasi di atas hanya mode 0 saja yang akan dibahas pada bab ini. Bagi pembaca yang ingin mempelajari mode 1 dan mode 2 dapat merujuk pada datasheet PPI 8255 (lihat di CD).
Pada Mode 0 seluruh port PPI 8255 digunakan sebagai port masukan/keluaran sebagaimana pada gambar 3.3. Definisi rinci pada mode 0 adalah sebagai berikut :
1.dua buah port 8 bit ( Port A dan Port B) dan dua buah port 4 bit (Port C),2.semua port dapat digunakan sebagai masukan atau keluaran,3.keluaran di-latch,4.masukan tidak di-latch.
Gambar III.9 Fungsi Port PPI 8255 Pada Mode 0
III.5 Siklus Pembacaan (masukan)
Bentuk gelombang siklus pembacaan (masukan) seperti pada gambar 3.4. Signal kendali untuk siklus pembacaan adalah signal RD dengan lebar pulsa minimal sebesar tRR (lihat datasheet untuk nilai angkanya). Data masukan harus ada sebelum RD rendah minimal sebesar tIR dan sesudah RD tinggi minimal sebesar tHR. Data alamat A1 dan A0 serta CS harus stabil sebelum RD rendah sebesar tAR dan harus tetap ada sesudah RD tinggi minimal sebesar tRA. Data berada di bus data selama tRD ditambah dengan tDF.
TRIFAMEDIA 3
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
Gambar III.9 Bentuk Gelombang Pada Siklus Pembacaan (masukan) PPI 8255
III.6 Siklus Penulisan (keluaran)
Bentuk gelombang pada siklus penulisan (keluaran) diperlihatkan pada gambar 3.5. Signal kendali untuk siklus penulisan adalah signal WR dengan lebar pulsa minimal sebesar tWW. Data alamat A1 dan A0 serta signal CS harus stabil sebelum WR rendah minimal sebesar tAW dan harus tetap ada setelah WR tinggi minimal sebesar tWA. Data yang akan dituliskan harus sudah ada sebelum WR tinggi minimal sebesar tDW dan harus tetap ada setelah WR tinggi minimal sebesar tWD. Data akan dikeluarkan maksimal setelah waktu tWB dari saat signal WR berlogika tinggi.
Gambar III.9 Bentuk Gelombang Pada Siklus Penulisan (keluaran) PPI 8255
Secara sederhana kombinasi bit CS, WR, dan RD untuk melakukan penulisan, pembacaan , standby, atau aktif dapat dilhat pada tabel
Tabel III.6 Kombinasi sinyal CS, WR, dan RD
CS WR RD status1 X X standby0 1 0 baca0 0 1 tulis0 1 1 Chip aktif
III.7 Menjadikan PPI 8255 Bekerja Pada Mode 0
Agar PPI 8255 bekerja pada mode 0 maka register control perlu diberi data konfigurasi yang menjadikan PPI 8255 bekerja pada mode 0. Secara umum format data register control diperlihatkan pada Gambar III.9.
TRIFAMEDIA 4
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
D7 D6 D5 D4 D3 D2 D1 D0
Port C (bawah)1 = masukan0 = keluaran
Port B1 = masukan0 = keluaran
Mode kelompok B0 = mode 01 = mode 1
Port C (atas)1 = masukan0 = keluaran
Port A1 = masukan0 = keluaran
Mode kelompok A00 = mode 001 = mode 11X = mode 2
Pengaktifan Mode 1 = aktif 0 = tidak aktif
Kelompok B
Kelompok A
Gambar III.9 Format data register kontrol.
Berdasarkan Gambar III.9 di atas, agar PPI 8255 bekerja pada mode 0, maka data register control adalah 100X3X20X1X0 B, dengan X dapat bernilai 0 atau 1 untuk konfigurasi masukan atau keluaran masing-masing port. Hasil untuk masing-masing kombinasi X dapat dilihat pada tabel
Contoh:Port A sebagai masukan, port B dan Port C sebagai keluaran.Berdasarkan kondisi di atas maka dapat ditentukan data konfigurasinya sebagai berikut.
X3 = 1, X2 =0, X1=0, dan X0=0 sehingga data konfigurasinya adalah 10010000 B atau dalam bentuk Heksadesimal 0x90.
III.8 Antarmuka dan Pemrograman PPI 8255
Setelah PPI8255 dibahas cukup detail maka sekarang akan dipelajari bagaimana antarmuka PPI 8255 dengan mikrokontroler. Ada dua cara antarmuka PPI 8255 dengan mikrokontroler. Cara pertama menggunakan port mikrokontroler dan cara kedua dipetakan ke sistem memori data eksternal.
TRIFAMEDIA 5
D0s/dD7P ort 1
P2.0P2.1P2.2
RDRWCS
AT89 C51/5 2a tauA T89S 51/52 /53 PPI 8255
P1.1s/dP1.7
P ort 2
Port A
Port B
Port C
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
III.8.1Menggunakan Port Parallel Mikrokontroler
III.8.1.1Antarmuka
Cara yang pertama lebih mudah dibandingkan dengan cara yang kedua karena tidak dibutuhkan pemetaan alamat. Namun demikian cara ini membutuhkan sederetan instruksi untuk melakukan proses penulisan dan pembacaan dan juga terbatasnya jumlah PPI yang dapat dihubungkan ke mikrokontroler karena terbatasnya port mikrokontroler. Diagram blok cara pertama diperlihatkan pada Gambar III.9.
Gambar III.9 Diagram blok antarmuka PPI 8255 ke Port 1 dan Port 2
Port mikrokontroler yang digunakan pada dasarnya adalah bebas, Port 0, Port 1, Port 2 atau Port 3 secara acak. Yang perlu diperhatikan adalah bahwa Port 0 merupakan masukan/keluaran drain terbuka (open drain) sehingga membutuhkan resistor pull-up. Rangkaian lengkap antarmuka PPI 8255 ke port mikrokontroler diperlihatkan pada gambar.
TRIFAMEDIA 6
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
Pemrograman PPI 8255 akan dijelaskan berdasarkan fungsi yang diperlukan untuk operasi pada PPI 8255 yang meliputi inisialisasi, proses baca port, dan proses tulis port. Adapun alamat port berdasarkan gambar di atas adalah seperti pada tabel
Port PPI 8255 alamat (byte) alamat (bit)P2.3 (A1) P2.2 (A0)
Port A 0x00 0 0Port B 0x04 0 1Port C 0x08 1 0
Port Kontrol 0x0c 1 1
III.8.1.2.1Fungsi Inisialisasi
Sebelum port masukan/keluaran dapat digunakan, terlebih dahulu dilakukan inisialisasi untuk menentukan mode operasi dan fungsi masukan atau keluaran.Inisialisasi merupakan proses penulisan data kontrol ke register kontrol (0x03). Langkah-langkah menentukan data register kontrol untuk inisialisasi PPI8255 dapat dituliskan sebagai berikut:
1.tentukan mode pada masing-masing kelompok2.tentukan masing-masing port apakah sebagai masukan atau keluaran3.tentukan data untuk register kontrol
Pseudocode algoritma inisialisasi dapat dituliskan sebagai berikut:1.aktifkan reset minimal 500 ns (lihat datasheet)2.pilih alamat register kontrol3.aktifkan CS4.siapkan data kontrol pada port 15.aktifkan signal WR
TRIFAMEDIA 7
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
6.tunda selama minimal 100ns (lihat datasheet)7.nonaktifkan signal WR8.nonaktifkan CS
Contoh:1.Mode kelompok A dan B = Mode 02.Port A, Port B, dan Port C = keluaran
Berdasarkan kondisi di atas maka data register kontrol adalah : 10000000B atau 0x80Programnya :
#include <at89x51.h >#include “tunda.h” //prototip fungsi tunda hardware dan soft
#define S_RD P2_0 //signal read berasal dari P2.0#define S_WR P2_1 //signal write berasal dari P2.1#define A0 P2_2 //Alamat A0 dari P2.2#define A1 P2_3 //alamat A1 dari P2.3#define RESET P2_4 //signal reset berasal dari P2.4#define CS P2_5 //signal Chip Enable berasal dari P2.5
//--------------------------------------// fungsi untuk mengaktifkan reset//--------------------------------------void Puls_RST_IO( ){ RESET=1; Tunda_Lunak(4); RESET=0;}//--------------------------------------// fungsi untuk inisialisasi PPI 8255//--------------------------------------void Init8255_IO( unsigned char datanya){ Puls_RST( ); A0=A1=1; //pilih register kontrol CS=0; //aktifkan chip 8255 P1=datanya; //siapkan data kontrol S_WR =0; //aktifkan signal tulis Tunda_Lunak(4); // tunda S_WR =1; //nonkatifkan signal tulis CS=1; //nonaktifkan chip }
III.8.1.2.2Fungsi Untuk Membaca Port Masukan
Setelah PPI 8255 diinisialisasi maka masing-masing port masukan/keluaran dapat ditulis maupun dibaca sesuai dengan fungsinya. Dalam subbab ini akan dijelaskan fungsi yang digunakan untuk membaca port masukan. Pseudocode algoritmanya adalah sebagai berikut:
1.pilih alamat port yang akan dibaca.
TRIFAMEDIA 8
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
2.aktifkan CS;3.aktifkan signal RD4.baca data dari PPI melalui Port 15.tunda beberapa saat6.nonaktifkan signal RD7.nonaktifkan CS
Contoh:Fungsi membaca port PPI 8255 dengan parameter alamat port (lihat tabel) dan hasil fungsi (return value) berupa data yang sedang dibaca.Program:
//--------------------------------------// fungsi untuk membaca port masukan//--------------------------------------unsigned char Baca_Port_IO(unsigned char alm_port)// parameter alamat port{ unsigned char bufer; P2=StandBy|alm_port; //pilih port yang akan dibaca CS=0; //aktifkan chip 8255 S_RD=0; //aktifkan signal baca bufer=P1; //baca data dari PPI melalui P1 Tunda_Lunak(4); //tunda beberapa saat S_RD=1; //nonaktifkan signal baca; CS=1; //non aktifkan chip 8255 return (bufer);}
III.8.1.2.3Fungsi Untuk Menulis Port Keluaran
Untuk menulis port PPI 8255 dapat dilakukan menggunakan algoritma seperti pada pseudocode berikut ini:
1.pilih alamat port yang akan ditulis.2.aktifkan CS;3.siapkan data yang akan ditulis ke port PPI melalui Port 14.aktifkan signal RW5.tunda beberapa saat6.nonaktifkan signal RW7.nonaktifkan CS
Contoh: Program
//--------------------------------------// fungsi untuk menulis port keluaran//--------------------------------------void Tulis_Port_IO(unsigned char alm_port, unsigned char datanya){ P2=StandBy|alm_port; //pilih port yang akan ditulis CS=0; //aktifkan chip 8255 P1=datanya; //siapkan data yang akan dituliskan WR=1; //aktifkan signal tulis Tunda_Lunak(4); //tunda beberapa saat WR=0; //nonaktifkan signal tulis CS=0; //nonaktifkan chip}
III.8.1.2.4Bentuk Modular
TRIFAMEDIA 9
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
Agar lebih modular fungsi-fungsi di atas dihimpun dalam file yang terdiri atas file header dan file definisi.//-----------------------------------//nama file : h8255_IO.h//deskripsi : deklarasi variabel dan// prototip fungsi PPI8255// tergandeng I/O//karya : Totok Budioko//-----------------------------------#ifndef H8255_IO_H#define H8255_IO_H#define S_RD P2_0 //nama RD sudah dipakai di at89x51.h#define S_WR P2_1 //nama WR sudah dipakai di at89x51.h#define A0 P2_2#define A1 P2_3#define RESET P2_4#define CS P2_5#define PortA 0x00#define PortB 0x04#define PortC 0x08#define PortKont 0x0c#define StandBy 0x23void Puls_RST_IO( );void Init8255_IO( unsigned char datanya);unsigned char Baca_Port_IO(unsigned char alm_port);void Tulis_Port_IO(unsigned char alm_port, unsigned char datanya);#endif//********Akhir Listing**********
//--------------------------------------// fungsi untuk mengaktifkan reset//--------------------------------------void Puls_RST_IO( ){ RESET=1; Tunda_Lunak(4); RESET=0;}//--------------------------------------// fungsi untuk inisialisasi PPI 8255//--------------------------------------void Init8255_IO( unsigned char datanya){ Puls_RST_IO( ); P2=StandBy; A0=A1=1; //pilih register kontrol CS=0; //aktifkan chip 8255 P1=datanya; //siapkan data kontrol S_WR=0; //aktifkan signal tulis Tunda_Lunak(1); // tunda
TRIFAMEDIA 10
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
P2=StandBy;}//--------------------------------------// fungsi untuk membaca port masukan//--------------------------------------unsigned char Baca_Port_IO(unsigned char alm_port) { unsigned char bufer; P2=StandBy; //pilih port yang akan dibaca P2 |=alm_port; CS=0; //aktifkan chip 8255 S_RD=0; //aktifkan signal baca Tunda_Lunak(1); //tunda beberapa saat bufer=P1; //baca data dari PPI melalui P1 P2=StandBy; return (bufer);}//--------------------------------------// fungsi untuk menulis port keluaran//--------------------------------------void Tulis_Port_IO(unsigned char alm_port, unsigned char datanya){ P2=StandBy; //pilih port yang akan ditulis P2 |=alm_port; CS=0; //aktifkan chip 8255 P1=datanya; //siapkan data yang akan dituliskan S_WR=0; //aktifkan signal tulis Tunda_Lunak(1); //tunda beberapa saat P2=StandBy;}//**********Akhir Listing**********
III.8.1.3Aplikasi
Berikut ini diberikan contoh aplikasi sederhana yang menjelaskan antarmuka PPI 8255 dengan mikrokontroler menggunakan port parallel mikrokontroler. PC0, PC1, dan PC2 digunakan sebagai masukan dan terhubung dengan saklar( dapat digunakan sembarang saklar). PortA dan PortB sebagai keluaran dan terhubung dengan LED. Sebagaimana dalam gambar, LED akan menyala jika logika keluaran PortA dan PortB tinggi (aktif tinggi). Rangkaian lengkap seperti pada Gambar III.9
TRIFAMEDIA 11
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
Contoh ProgramPseudocode program yang akan dijalankan adalah sebagai berikut:
1.variabel in_data, oldkey;2.inisialisasi_PPI8255(PortC masukan, PortA=PortB=keluaran);3.in_data=Baca PortC;4.in_data=in_data AND 0x7;5.if (in_data ≠ 0 AND oldkey ≠ in_data)6.oldkey=in_data7.switch(oldkey)case 1
(PortA putar kiri PortB putar kanan)case 2
(PortA kedip PortB tumpuk)case 4
(PortA,PortB 4 LED on-off begantian)8.porgram diulang ke langkah 3.
Data inisialisasi PPI8255 berdasarkan Pseudocode di atas adalah 10001001B atau 0x89. Implementasi berdasarkan pseudocode di atas adalah seperti program Aplikasi3_1.
Listing program aplikasi3_1//-----------------------------------------------// Nama file : aplikasi3_1.c// Deskripasi : memilih tampilan LED// melalui tombol masukan.// Tujuan : demo perluasan I/O dengan PPI8255// : dengan metoda koneksi ke Port// Karya : Ttok Budioko//-----------------------------------------------#include <AT89X51.H>#include "h8255_IO.h"#include "tunda.h"
TRIFAMEDIA 12
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
Metoda yang kedua yaitu PPI 8255 dipetakan ke memori data eksternal sehingga dianggap sebagai komponen memori. Metoda ini memerlukan pemetaan agar alamat satu komponen tidak tumpang-tindih terhadap komponen yang lainnya. Teknik pemetaan PPI 8255 sama seperti pada perluasan memori data eksternal. Blok diagram antarmuka diperlihatkan pada gambar
Gambar III.9 Diagram blok antarmuka PPI8255 dipetakan ke memori data eksternal
Untuk dapat menggambarkan rangkaiannya maka yang harus dirancang pertama kali adalah peta memori data eksternal. Pada bagian selanjutnya akan diberikan contoh perancangan peta memori untuk PPI 8255.
Catatan:Ingat kapasitas memori data eksternal AT89X51/52 adalah 64kbyte.
Contoh:Misalnya ruang memori data eksternal dibagi menjadi 8 buah ruang memori yang masing-masing mempunyai kapasitas 8 kbyte. PPI 8255 akan dipetakan pada ruang memori pertama dan menempati alamat 0x0000 s/d 0x0003. Maka hasil pemetaannya adalah sebagai berikut:
TRIFAMEDIA 14
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
Tabel III.6 Peta memori data eksternal
A15 A14 A13 A12 A11 s/d A4 A3 A2 A1 A0 hex ket0 0 0 0 00000000 0 0 0 0 0000 PortA0 0 0 0 00000000 0 0 0 1 0001 PortB0 0 0 0 00000000 0 0 1 0 0010 PortC0 0 0 0 00000000 0 0 1 1 0011 PKon0 0 0 X XXXXXXXX X X 0 0 0000 duplikat portA0 0 0 X XXXXXXXX X X 0 1 0001 duplikat portB0 0 0 X XXXXXXXX X X 1 0 0010 duplikat portC0 0 0 X XXXXXXXX X X 1 1 0011 duplikat PortKon
Untuk membagi ruang memori data eksternal menjadi 8 ruang dapat dilakukan dengan menggunakan IC dekoder alamat seri 74LS138 dengan blok diagram seperti pada gambar dan tabel kebenaran seperti pada tabel
Gambar III.5 Bolok diagram fungsional IC 74X138
Tabel III.6 Hubungan antara masukan dengan keluaran IC 74X138
Gambar III.5 Rangkaian Antarmuka PPI8255 Dipetakan ke Memori Data Eksternal.
III.8.2.2Pemrograman
Berdasarkan Gambar III.5 alamat dasar PortA, PortB,PortC, dan PortKon diperlihatkan pada Tabel III.6. Karena tidak didekode secara penuh maka akan terjadi duplikasi alamat PPI 8255 pada 8 Kbyte pertama.
Register PPI 8255 dapat dideklarasikan sebagai variable dengan tipe char atau unsigned char, oleh karena itu dapat diperlakukan seperti variable ketika proses penulisan maupun pembacaan. Deklarasi port PPI adalah sebagai berikut.
volatile unsigned char xdata at 0x4000 PortA;volatile unsigned char xdata at 0x4001 PortB;
TRIFAMEDIA 16
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
volatile unsigned char xdata at 0x4002 PortC;volatile unsigned char xdata at 0x4003 PortK;
III.8.2.2.2Penulisan dan Pembacaan Port PPI 8255
Penulisan dan pembacaan Port PPI 8255 seperti penulisan atau pembacaan suatu variabel sebagaimana contoh berikut ini. Contoh.Proses penulisan:
PortA=suhu;PortB=0x7f;PortK=0x80;
Proses pembacaanTampung = PortA;Suhu=PortC;
III.8.2.3Aplikasi
Contoh aplikasi yang diberikan pada subbab ini sama dengan contoh aplikasi3_1. Perbedaan terletak pada cara membaca dan menulis Port PPI 8255. Rangkaian aplikasi3_2 diperlihatkan pada
Pseudocode program yang akan dijalankan adalah sebagai berikut:
1.variabel in_data, oldkey;2.inisialisasi_PPI8255(PortC masukan, PortA=PortB=keluaran);3.in_data=Baca PortC;4.in_data=in_data AND 0x7;5.if (in_data ≠ 0 AND oldkey ≠ in_data)6.oldkey=in_data7.switch(oldkey)case 1
(PortA putar kiri PortB putar kanan)case 2
TRIFAMEDIA 17
Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko
(PortA kedip PortB tumpuk)case 4
(PortA,PortB 4 LED on-off begantian)8.porgram diulang ke langkah 3.
Data inisialisasi PPI8255 berdasarkan Pseudocode di atas adalah 10001001B atau 0x89. Implementasi berdasarkan pseudocode di atas adalah seperti Listing program Aplikasi3_2.
//--------------------------------------------------------------// Nama file : aplikasi3_2.c// Deskripasi : memilih tampilan LED melalui tombol masukan.// Tujuan : demo perluasan I/O dengan PPI8255 dengan// metoda dipetakan ke memori data eksternal// // Karya : Totok Budioko//--------------------------------------------------------------#include <at89x51.h>#include "tunda_keras.h"//------------------------------------// Variabel global untuk PPI 8255//------------------------------------volatile unsigned char xdata at 0x0000 PortA;volatile unsigned char xdata at 0x0001 PortB;volatile unsigned char xdata at 0x0002 PortC;volatile unsigned char xdata at 0x0003 PortK;//------------------------------------// Prototip Fungsi//------------------------------------void Tampil_Satu();void Tampil_Dua();void Tampil_Tiga();//------------------------------------// Program utama//------------------------------------void main(){ unsigned char in_data=0,oldkey=1; //deklarasi variabel PortK=0x89; //inisialisasi PPI 8255 while(1) //PortA, PortB = keluaran { //PortC = masukan in_data=(0x07 & PortC); //baca PortC,ANDkan 0x07 if((in_data !=0) && (in_data !=oldkey))//jika tdk 0 dan { //berbeda sebelumnya oldkey=in_data; //simpan di oldkey } //akhir if switch(oldkey) //evaluasi oldkey {
case 1: Tampil_Satu(); //jika 1 rutin Tampil_Satu() break; //dieksekusi
case 2: Tampil_Dua(); //jika 2 rutin Tampil_Dua() break; //dieksekusi case 4: Tampil_Tiga(); //jika 4 rutin Tampil_Tiga() break; //dieksekusi } //akhir switch } //akhir while (loop utama)} //akhir program utama