Top Banner
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
19

Perluasan Input Output Pada Mikrokontroler AT8951

Jan 20, 2016

Download

Documents

Totok Budioko

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
Page 1: Perluasan Input Output Pada Mikrokontroler AT8951

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

Page 2: Perluasan Input Output Pada Mikrokontroler AT8951

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

Page 3: Perluasan Input Output Pada Mikrokontroler AT8951

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

Page 4: Perluasan Input Output Pada Mikrokontroler AT8951

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

Page 5: Perluasan Input Output Pada Mikrokontroler AT8951

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

X3 X2 X1 X0PA PCa PB PCb

Data konfigurasi

KondisiKelompok A Kelompok B

Port A Port C (atas)

Port B Port C (bawah)

0 0 0 0 10000000 keluaran keluaran keluaran keluaran0 0 0 1 10000001 keluaran keluaran keluaran masukan0 0 1 0 10000010 keluaran keluaran masukan keluaran0 0 1 1 10000011 keluaran keluaran masukan masukan0 1 0 1 10001001 keluaran masukan keluaran masukandst dst

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

Page 6: Perluasan Input Output Pada Mikrokontroler AT8951

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

Page 7: Perluasan Input Output Pada Mikrokontroler AT8951

Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko

+5V

+5V

82553433323130292827

536

98

356

432140393837

1819202122232425

1415161713121110

267

D0D1D2D3D4D5D6D7

RDWRA0A1RESETCS

PA0PA1PA2PA3PA4PA5PA6PA7

PB0PB1PB2PB3PB4PB5PB6PB7

PC0PC1PC2PC3PC4PC5PC6PC7

VCC

GND

AT89C51

9

18

19

2029

30

31 40

12345678

2122232425262728

1011121314151617

3938373635343332

RSTXTAL2

XTAL1

GND

PSEN

ALE/PROG

EA/VP

P VCC P1.0

P1.1P1.2P1.3P1.4P1.5P1.6P1.7

P2.0/A8P2.1/A9

P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15

P3.0/RXDP3.1/TXDP3.2/INTOP3.3/INT1P3.4/TOP3.5/T1P3.6/WRP3.7/RD

P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7

30 pf

30 pf

Y1

12 Mhz

10k

+10 uf

Gambar III.5 Dikoneksikan ke P1 dan P2.

III.8.1.2Pemrograman

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

Page 8: Perluasan Input Output Pada Mikrokontroler AT8951

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

#define PortA 0x00#define PortB 0x04#define PortC 0x08#define PortKont 0x0c#define StandBy 0x23

//--------------------------------------// 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

Page 9: Perluasan Input Output Pada Mikrokontroler AT8951

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

Page 10: Perluasan Input Output Pada Mikrokontroler AT8951

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**********

//-----------------------------------//nama file : h8255_IO.c//deskripsi : definisi fungsi PPI8255// tergandeng I/O//karya : Totok Budioko//-----------------------------------#include <AT89X51.H>#include "tunda.h"#include "h8255_IO.h"

//--------------------------------------// 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

Page 11: Perluasan Input Output Pada Mikrokontroler AT8951

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

Page 12: Perluasan Input Output Pada Mikrokontroler AT8951

Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko

+5V

+5V

+5V

AT89C51

9

18

19

20

29

30

31 40

12345678

2122232425262728

1011121314151617

3938373635343332

RSTXTAL2

XTAL1

GND

PSEN

ALE/PROG

EA/VP

P VCC

P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7

P2.0/A8P2.1/A9

P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15

P3.0/RXDP3.1/TXDP3.2/INTOP3.3/INT1P3.4/TOP3.5/T1P3.6/WRP3.7/RD

P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7

82553433323130292827

536

98

356

432140393837

1819202122232425

1415161713121110

267

D0D1D2D3D4D5D6D7

RDWRA0A1RESETCS

PA0PA1PA2PA3PA4PA5PA6PA7

PB0PB1PB2PB3PB4PB5PB6PB7

PC0PC1PC2PC3PC4PC5PC6PC7

VCC

GND30 pf

30 pfY1

12 Mhz

10k

+10 uf

10k10k10k

SW1

SW DIP-3

123

654

Gambar III.9 Rangkaian aplikasi3_1

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

Page 13: Perluasan Input Output Pada Mikrokontroler AT8951

Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko

//------------------------------------// Prototip Fungsi//------------------------------------void Tampil_Satu(); //model tampilan 1void Tampil_Dua(); //model tampilan 2void Tampil_Tiga(); //model tampilan 3//------------------------------------// Fungsi main()//------------------------------------void main(void){ unsigned char in_data; Init8255_IO(0x89); while(1) //super loop { in_data=0x07&Baca_Port_IO(PortC); //baca masukan, andkan if((in_data !=0) && (oldkey !=in_data)) {

oldkey=in_data;}

switch(oldkey) //dengan 0x07 { case 1: Tampil_Satu(); //pilihan 1 break; case 2: Tampil_Dua(); //pilihan 2 break; case 4: Tampil_Tiga(); //pilihan 3 break; } }}//--------------------------------//Fungsi Tampil_Satu()//-------------------------------- void Tampil_Satu(){ static volatile unsigned char ledA=0x80,ledB=0x80; Tulis_Port_IO(PortA,ledA); Tulis_Port_IO(PortB,ledB); Tunda_Keras(500); ledA=((ledA<<1)|(ledA>>7)); //PortA putar kiri ledB=((ledB>>1)|(ledB<<7)); //PortB putar kanan}//--------------------------------//Fungsi Tampil_Dua()//--------------------------------void Tampil_Dua(){ static bit tanda=1; if(tanda) { Tulis_Port_IO(PortA,0xff); //PortA dan B kedip-kedip Tulis_Port_IO(PortB,0x00); Tunda_Keras(200); tanda =0; } else { Tulis_Port_IO(PortA,0x00); Tulis_Port_IO(PortB,0xff);

TRIFAMEDIA 13

Page 14: Perluasan Input Output Pada Mikrokontroler AT8951

Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko

Tunda_Keras(200); tanda=1; }}/--------------------------------//Fungsi Tampil_Tiga()//--------------------------------void Tampil_Tiga(){ Tulis_Port_IO(PortA,0xf0); //4 LED on/off bergantian Tulis_Port_IO(PortB,0xc3); Tunda_Keras(500); Tulis_Port_IO(PortA,0x0f); Tulis_Port_IO(PortB,0x3c); Tunda_Keras(500);}//*****Akhir Listing Program*****

III.8.2Dipetakan ke Memori Data Eksternal

III.8.2.1Antarmuka

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

Page 15: Perluasan Input Output Pada Mikrokontroler AT8951

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

0 0 1 0 00000000 0 0 0 0 2000awal ruang

memori ke-2

0 0 1 1 11111111 1 1 1 1 3FFFakhir ruang memori ke-2

0 1 0 0 00000000 0 0 0 0 4000awal ruang

memori ke-3

0 1 0 1 11111111 1 1 1 1 5FFFakhir ruang memori ke-3

0 1 1 0 00000000 0 0 0 0 6000awal ruang

memori ke-4

0 1 1 1 11111111 1 1 1 1 7FFFakhir ruang memori ke-4

dst

1 1 1 0 00000000 0 0 0 0 E000awal ruang

memori ke-8

1 1 1 1 11111111 1 1 1 1 FFFFakhir ruang memori ke-8

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

Masukan KeluaranEnable Select

G1 /G2 A2 A1 A0 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7X 1 X X X 1 1 1 1 1 1 1 10 X X X X 1 1 1 1 1 1 1 11 0 0 0 0 0 1 1 1 1 1 1 11 0 0 0 1 1 0 1 1 1 1 1 11 0 0 1 0 1 1 0 1 1 1 1 11 0 0 1 1 1 1 1 0 1 1 1 11 0 1 0 0 1 1 1 1 0 1 1 11 0 1 0 1 1 1 1 1 1 0 1 11 0 1 1 0 1 1 1 1 1 1 0 11 0 1 1 1 1 1 1 1 1 1 1 0

Contoh rangkaian dekodernya seperti pada gambar

TRIFAMEDIA 15

Page 16: Perluasan Input Output Pada Mikrokontroler AT8951

Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko

Gambar III.5 Susunan kaki IC 74X138

+5V

+5V

+5V

+5V

U3

74LS373

3478

13141718

111

256912151619

2010

D0D1D2D3D4D5D6D7

OCG

Q0Q1Q2Q3Q4Q5Q6Q7

VCC

GND

U2

74LS138

123

645

15141312111097

ABC

G1G2AG2B

Y0Y1Y2Y3Y4Y5Y6Y7

U5

AT89C51

9

18

19

20

29

3031

40

12345678

2122232425262728

101112131415

1617

3938373635343332

RST

XTAL2

XTAL1

GND PSEN

ALE/PROGEA/VPP

VCCP1.0

P1.1P1.2P1.3P1.4P1.5P1.6P1.7

P2.0/A8P2.1/A9

P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15

P3.0/RXDP3.1/TXDP3.2/INTOP3.3/INT1P3.4/TOP3.5/T1

P3.6/WRP3.7/RD

P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7

U6

8255

3433323130292827

5

36

9

8

35

6

432140393837

1819202122232425

1415161713121110

267

D0D1D2D3D4D5D6D7

RD

WR

A0

A1

RESET

CS

PA0PA1PA2PA3PA4PA5PA6PA7

PB0PB1PB2PB3PB4PB5PB6PB7

PC0PC1PC2PC3PC4PC5PC6PC7

VCC

GND

30pf

Y1

12 MHz

30pf

10k

10k

+

4,7uf

+

4,7uf

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.

Tabel III.6 Alamat dasar register port PPI 8255.

alamat port0x0000 PortA0x0001 PortB0x0002 PortC0x0003 PortKon

III.8.2.2.1Deklarasi Port PPI 8255

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

Page 17: Perluasan Input Output Pada Mikrokontroler AT8951

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

+5V

+5V

+5V

+5V

+5V

U6

8255

3433323130292827

5

36

9

8

35

6

432140393837

1819202122232425

1415161713121110

267

D0D1D2D3D4D5D6D7

RD

WR

A0

A1

RESET

CS

PA0PA1PA2PA3PA4PA5PA6PA7

PB0PB1PB2PB3PB4PB5PB6PB7

PC0PC1PC2PC3PC4PC5PC6PC7

VCC

GND

30pf

Y1

12 MHz

10k

+

4,7uf

D2 D3 D5 D6 D7 D8

U2

74LS138

123

645

15141312111097

ABC

G1G2AG2B

Y0Y1Y2Y3Y4Y5Y6Y7

+

4,7uf

10k

U3

74LS373

3478

13141718

111

256912151619

2010

D0D1D2D3D4D5D6D7

OCG

Q0Q1Q2Q3Q4Q5Q6Q7

VCC

GND

30pf

U5

AT89C51

9

18

19

20

29

3031

40

12345678

2122232425262728

101112131415

1617

3938373635343332

RST

XTAL2

XTAL1

GND PSEN

ALE/PROGEA/VPP

VCCP1.0

P1.1P1.2P1.3P1.4P1.5P1.6P1.7

P2.0/A8P2.1/A9

P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15

P3.0/RXDP3.1/TXDP3.2/INTOP3.3/INT1P3.4/TOP3.5/T1

P3.6/WRP3.7/RD

P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7

D1 D4 D6D2 D3 D7D5 D8

D1 D4

SW1

SW DIP-3

123

654

R3R

R4R

R5R

Gambar III.5 Rangkaian aplikasi3_2

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

Page 18: Perluasan Input Output Pada Mikrokontroler AT8951

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

//--------------------------------//Fungsi Tampil_Satu()

TRIFAMEDIA 18

Page 19: Perluasan Input Output Pada Mikrokontroler AT8951

Perluasan I/O pada mikrokontroler AT8951 by Totok Budioko

//-------------------------------- void Tampil_Satu(){ static volatile unsigned char ledA=0x80; //deklarasi variabel static volatile unsigned char ledB=0x80; //deklarasi variabel PortA=ledA; //tulis PortA PortB=ledB; //tulis PortB Tunda_Keras(500); ledA=((ledA<<1)|(ledA>>7)); //putar kiri ledB=((ledB>>1)|(ledB<<7)); //putar kanan}//--------------------------------//Fungsi Tampil_Dua()//--------------------------------void Tampil_Dua(){ static bit tanda=1; //deklarasi variabel bit if(tanda) { PortA=0xff; //kedip-kedip PortB=0x00; Tunda_Keras(200); tanda =0; } else { PortA=0x00; PortB=0xff; Tunda_Keras(200); tanda=1; }}//--------------------------------//Fungsi Tampil_Tiga()//--------------------------------void Tampil_Tiga(){ PortA=0xf0; //4 LED on/off bergantian PortB=0xc3; Tunda_Keras(500); PortA=0x0f; PortB=0x3c; Tunda_Keras(500);}//*********Akhir Listing*********

TRIFAMEDIA 19