Menghubungkan 8031/51 dengan 8255
INCLUDEPICTURE
"http://www.musbikhin.com/wp-content/themes/MyProject/images/date.png"
\* MERGEFORMATINET
February 28th, 2011 Musbikhin
BAB 15SasaranSetelah anda menamatkan bab ini , diharapkan anda
dapat : Memaparkan alasan bahwa LCD dapat menggantikan peran LED
secara luas Menjelaskan fungsi-fungsi pin-pin LCD yang umum
Memaparkan kode-kode perintah untuk memprogram LCD
Menghubungkan LCD dengan 8051 Memprogram LCD dengan mengirim
Data atau Command padanya dari 8051 Menghubungkan Chip ADC pada
8051
Menghubungkan sensor suhu pada 8051 Menjelaskan proses
pencuplikan data menggunakan chip ADC Menjelaskan fungsi pin-pin
pada chip ADC yang umum Menjelaskan fungsi dari IC sensor suhu
presisi Menjelaskan kondisi sinyal dan pengaruhnya pada pencuplikan
dataSeperti yang sudah didemontrasikan pada bab 14 dalam hal
menghubungkan 8031/51 ke memory eksternal, 2 port, yakni P0 dan P2,
digunakan untuk tugas ini. Dan di bab ini kita ditunjukkan
bagaimana mengembangkan port I/O pada 8031/51 dengan menghubungkan
chip 8255 Di bagian pertama cara mengubungkan 8031/51 dengan 8255
ditunjukkan, sedang di bagian ke dua, memprogram 8255 sebagai port
I/O sederhana untuk menghubungkan peralatan lain semacam LCD, Motor
Stepper, dan ADC. Sedang di bagian ke tiga dijelaskan lebih lanjut
tentang beberapa mode I/O pada 8255 , termasuk kemampuan
jabat-tangannya (hand-shaking).
SubBAB 15.1: PROGRAMMING THE 8255Dalam bagian ini kita akan
belajar tentang chip 8255, salah satu dari yang paling sering
digunakan sebagai chip I/O. Pertama kita akan menggali kemampuan
dari chip 8255 ini dan kemudian memperlihatkan cara menghubungan
antara 8031/51 dengan chip 8255.Kemampuan 8255Chip 40-pin 8255 ini
(lihat gambar 15-1), adalah memiliki 3 buah port yang dapat diakses
secara mandiri. Masing-masing port memiliki 8-bit yang kemudian
port itu disebut dengan port A, B, dan C. Port-port ini dapat
diprogram secara mandiri untuk digunakan sebagai input maupun
sebagai output, yang dapat diubah-ubah secara dinamis. Disampig itu
port 8255 memiliki kemampuan jabat-tangan, sehingga memenuhi idaman
jika dihubungkan dengan peralatan yang juga memiliki kemampuan
jabat-tangan, misalnya seperti printer. Kemampuan jabat-tangan pada
8255 akan dibahas pada bagian akhir dalam bab ini.
gambar 15-1: Chip 8255PA0-PA7 Port A memiliki 8-bit yang dapat
diprogram semuanya menjadi input, atau digunakan sebagai output,
ataupun digunakan sebagai input/output 2 arah
(bidirectional).PB0-PB7 Port B memiliki 8-bit yang dapat diprogram
semuanya menjadi input, atau digunakan sebagai output. Namun port
ini bukan bidirectional, alias tidak bisa 2 arah seperti Port
A.PC0-PC7 Port C memiliki 8-bit yang dapat diprogram semuanya
menjadi input, atau digunakan sebagai output, dan hebatnya lagi
dapat dibagi menjadi 2. Yakni PCU (PC4-PC7) dan PCL (PC0-PC3). Ke
dua bagian inipun dapat diprogram terpisah menjadi input maupun
sebagai output. Selebihnya lagi masing-masing bit dalam port C ini
dapat diprogram tersendiri / terpisah. RD dan WR2 pin ini adalah
input bagi 8255, yang merupakan aktif rendah. Sinyal RD dan WR
milik 8051/31 harus dihubungkan dengan sinyal yang sama milik 8255
ini.
Gambar 15-2: Diagram Blok 8255Table 15-1: Seleksi Port untuk
8255CS A1 A0 Seleksi/Pilihan Port0 0 0 Port A0 0 1 Port B0 1 0 Port
C0 1 1 Register Control1 x x 8255 tidak dipilihPin-pin Data
D0-D7
pin-pin data ini merupakan tempat lalu lintas data dari dan ke
8255. Dan umumnya terhubung dengan pin-pin data milik 8051/31.
RESET
Ini adalah sinyal aktif tinggi bagi 8255, yang digunakan untuk
meng-clear semua isi dari register-register 8255. Pin ini harusnya
tidak boleh tidak dihubungkan. Dan untuk operasi normal, pin ini
harusnya terhbung pada GND.
A0, A1, dan CS
Jika CS (Chip Select) digunakan agar CPU dapat meng-akses 8255,
maka A0 dan A1 digunakan untuk memilih register yang mana yang
sedang diakses. Dari 3 pin inilah CPU akan menentukan untuk memilih
salah satu dari register-register port A, B, C, dan register
control seperti pada tabel 15-1. Catatan bahwa CS adalah aktif
rendah.
Pemilihan Mode pada 8255
Saat port A, B, dan C hendak digunakan sebagai input ataupun
sebagai output data, maka register control harus diprogram untuk
dapat memilih/menentukan port yang mana yang hendak digunakan.
Port-port 8255 dapat diprogram seperti di bawah ini. - Mode 0,
adalah mode I/O sederhana. Dalam mode ini, masing-masing port A, B,
CL dan CU dapat diprogram masing-masing sebagai input maupun
sebagai output. Dalam mode ini, semua bit-bit pada masig-masing
port adalah sebagai output ataupun sebagai input. Atau dengan kata
lain, tidak ada operasi untuk pengaturan bit tunggal, seperti yang
biasa kita temui saat menggunakan port P0-P3 milik 8051. Mengingat
umumnya aplikasi menggunakan 8255 dala mode I/O sederhana, maka
kita akan berkonsentrasi pada mode ini.
- Mode 1. Dalam mode ini, Port A dan B dapat digunakan sebagai
input dan output dengan kemampuan jabat-tangan. Sinyal-sinyal
jabat-tangan ditempatkan pada port C. Untuk lebih jelas tentang
mode ini akan dibicarakan pada bagian ke 3 dari bab ini. - Mode 2.
Dalam mode ini, port A digunakan sebagai port I/O (bidirectional)
dengan kemampuan jabat-tangan yang kesemua sinyalnya diberikan
kepada port C. Sedang port B digunakan sebagai port I/O standar
atau digunakan dalam mode jabat-tangan (mode 1). Mode ini tidak
akan dibahas lebih lanjut dalam buku ini. - BSR (Bit Set/Reset).
Dalam mode ini, bit-bit dalam port C dapat diakses dan dikendalikan
secara bit tunggal. Untuk mode ini akan dijelaskan pada bagian ke
tiga dalam bab ini.
Gambar 15-3 : format Control Word 98255 (Mode I/O)
Simple I/O programming
Intel menyebut mode 0 ini sebagai basic input/output mode (mode
input/output dasar). Umumnya digunakan sebagai port I/O sederhana.
Dalam mode ini, masing-masing port A, B, dan C dapat diprogram
sebagai input ataupun sebagai output. namun harap diingat,
masing-masing port tersebut tidak dapat digunakan sebagai input dan
sebagai output dalam waktu yang sama.Contoh 15-1
Cari Control Word bagi 8255 untuk konfigurasi berikut ini.(a)
Semua port A, B dan C adalah sebagai port output (mode 0)(b) PA =
in, PB = Out, PCL = out, dan PCH = outJawaban:
Dari gambar 15-3 kita dapatkan :(a) 1000 0000 = 80h (b) 1001
0000 = 90h
Menghubungkan 8031/51 pada 8255
Chip ini diprogram untuk berada pada salah satu dari 4 mode yang
mungkin digunakan oleh 8255 dengan cara mengirimkan byte (Intel
menyebut byte ini sebagai Control Word) kepada register control
8255. Kita harus mencari alamat port yang kita tentukan sebelumnya
untuk masing-masing port A, B, C, dan register control. Hal ini
biasa disebut dengan mapping port I/O.
Kemudian kita dapatmelihat pada gambar 15-4, 8255 terhubung pada
8031/51 seperti dia terhubung dengan memory RAM. Perhatikan
penggunaan sinyal RD dan WR. Metode menghubungkan chip I/O dengan
cara seperti ini adalah disebut dengan memory mapped I/O. Hal ini
kerena I/O diakses berdasarkan space memory. Dengan kata lain, kita
menggunakan space memory untuk mengakses peralatan I/O. Untuk
alasan ini kita menggunakan instruksi yang sama, yakni MOVX untuk
mengakses 8255. Dalam bab 14 kita menggunakan instruksi MOVX untuk
mengakses RAM dan ROM. Untuk 8255 yang terhubung dengan 8031/51
kita juga harus menggunakan isntruksi yang sama MOVX untuk
berhubungan dengannya. Hal ini ditunjukkan pada contoh 15-2.
Contoh 15-2
Untuk gambar 15-4,(a) Cari alamat port I/O yang dirancang untu
Port A, B, C, dan register kontrol.(b) Programlah 8255 untuk Port
A, B dan C sebagai port output.(c) Tulis program untuk mengirimkan
55h dan AAh pada semua secara terus menerus.Jawaban:
(a) alamat dasar dari 8255 adalah sebagai berikut :
(b) Control Byte (Word) untuk semua port sebagai output adalah
80h seperti contoh 15-1(c) MOV A,#80h ;Control Word (Ports output)
MOV DPTR,#40003h ;load control reg port addr MOVX @DPTR,A ;issue
control word MOV A,#55h ;A=55hAGAIN: MOV DPTR,#4000h ;PA address
MOVX @DPTR,A ;toggle PA bits INC DPTR ;PB address MOVX @DPTR,A
;toggle PB bits INC DPTR ;PC address MOVX @DPTR,A ;toggle PC bits
CPL A ;toggle bits in reg A ACALL DEKLAY ;wait; SJMP AGAIN
;continue
Gambar 15-4 : koneksi 8051 dengan 8255 untuk contoh 15-2Contoh
15-3
Lihat gambar 15-5.(a) Cari alamat port I/O yang dipasangkan bagi
Port A, B, C, dan register control.(b) Cari kontrol byte untuk PA =
in, PB = out, PC = out.(c) Tulis program untuk mendapat data dari
PA dan kirim balik ke port B dan C.Jawaban:
(a) Dengan menganggap semua bit yang tidak digunakan adalah 0z,
maka dasar (base) dari port alamat untuk 8255 adalah 1000h.Sehingga
kita memiliki : 1000h PA 1001h PB 1002h PC 1003h Register
Control(b) kontrol word untuk 8255 itu adalah 10010000 (90h)(c) MOV
A,#90h ;PA=in, PB=out, PC=out MOV DPTR,#1003h ;load control reg
port addr MOVX @DPTR,A ;issue control word MOV DPTR,#1000h ;PA
address MOVX A,@DPTR ;Get data from PA INC DPTR ;PB address MOVX
@DPTR,A ;Send the data to PB INC DPTR ;PC address MOVX @DPTR,A
;Send the data to PB
gambar 15-5 : koneksi 8051 dengan 8255 untuk contoh 15-3untuk
memprogram seperti dalam contoh 15-3. Dapat direkomendasikan bahwa
kita menggunakan direktive EQU untuk port yang dialamatkan
sebagaimana berikut ini.APORT EQU 1000hBPORT EQU 1001hCPORT EQU
1002hCNTPORT EQU 1003h MOV A,#90H ;(PA=IN, PB=OUT, PC=OUT) MOV
DPTR,#CNTPORT ;load cntr reg port adddr MOVX @DPTR,A ;issue ontrol
word MOV DPTR,#APRT ;alamat PA MOVX A,@DPTR ;ambil data dari PA INC
DPTR ;alamat PB MOVX @DPTR,A ;Kirim data kembali ke PB INC A
;alamat PC MOVX @DPTR,A ;Kirim lagi untuk PCatau, lihat berikut
ini, juga mengunakan EQUCONTBYT EQU 90h ;(PA=IN, PB=OUT, PC=OUT)
BAS8255P EQU 1000h ;dasar alamat untuk chip 8255 MOV A,#CONTRBYT
MOV DPTR,MAS8255P+3 ;isikan dengan alamat Port C MOV @DPTR,A
;isikan dengan Word Control MOV DPTR,@BAS8255P ;Alamat PA Catatan:
bahwa kedua contoh 15-2 dn 15-3 di atas, kita masih menggunakan
register DPTR, mengingat alamat dasar yang diberikan pada 8255
adalah data alamat 16-bit. Jika ternyata lebar data alamat adalah
8-bit saja maka kita dapat menggunakan isntruksi MOVX A,@R0 dan
MOVX @R0,A di mana R0 (atau R1) memegang lebar data alamat 8-bit
dari port alamat. Lihat contoh 15-4 perhatikan contoh 15-4 bahwa
kita menggunakan logika sederhana untuk mendekodekan alamat untuk
8255. Untuk menggunakan beberapa 8255 dalam system kita, maka kita
dapat menggunakan chip 47LS138, seperti yang ditunjukkan pada
contoh 15-5Address AliasesDalam contoh 15-4 dan 15-5 kita
mendekodekan bit-bit alamat A0-A7, yang mana contoh 15-2 dan 15-2
kita dekodekan hanya sebagaian alamat tertinggi, yakni A8-A15. Pada
pendekodean alamat sebagian seperti ini kemduian disebut dengan
Addresses Aliases. Atau dengan kata lain, bahwa port secara fisik
sama, namun memliki alamat yang berbeda, dan, port yang sama ini
kemudian dipanggil dengan nama yang berbeda. Seperti dalam contoh
15-2 dan 15-3 kita akan mengubah semua xs dari variasi dan
kombinasi 1s dan 0s pada alamat yang berbeda, walaupun mereka
diberikan melalui port yang sama. Dalam referensi dokumentasi
hardware anda, pastikan bahwa semua addresses aliases dicatat
dengan baik, sehingga user dapat mengetahui bagian mana dari port
yang masih bisa digunakan atau tidak, untuk alat lainnya.
Contoh 15-4
Lihat gambar 15-6.(a) Cari alamat port I/O yang dipasangkan bagi
Port A, B, C, dan register control.(b) Cari kontrol byte untuk PA =
out, PB = in, PCL = in, PCU = out.(c) Tulis program untuk mendapat
data dari PB dan kirim balik ke port A, dan di samping itu ambil
data dari PCL kemudian kirim kembali ke datanya ke PCU.Jawaban:
(a) Alamat Port seharusnya adalah : CS A1 A0 Alamat Port 0010 00
0 0 20h PA 0010 00 0 1 21h PB 0010 00 1 0 22h PC 0010 00 1 1 23h
Register Control(b) kontrol word untuk 8255 itu adalah 10000011
(83h)(c) CONTRBYT EQU 83h ;PA=in, PB=out, PCL=in, PCU=outAPORT EQU
20hBPORT EQU 21hCPORT EQU 22hCNTPORT EQU 23h MOV A,#CONTRBYT
;PA=in, PB=out, PCL=in, PCU=out MOV R0,#20h ;load control reg port
addr MOVX @R0,A ;issue control word MOV R0,#BPORT ;PB address MOVX
A,@R0 ;Get data from PB DEC R0 ;PA address MOVX @R0,A ;Send the
data to PA ; MOV R0,#CPORT ;PC address MOVX A,@R0 ;Read PCL ANL
A,#0Fh ;Mask Upper Nibble SWAP A ;Swap between nibble MOVX @R0,A
;Send the data to PCH
gambar 15-6 : hubungan 8051 dengan 8255 untuk contoh 15-4
Contoh 15-5
Cari base address (alamat dasar) untuk 8255 seperti pada gambar
15-7Jawaban:
G1 G2B G2A C B A alamat A7 A6 A5 A4 A3 A2 A1 A0 1 0 0 0 1 0 0 0
88h
System 8031 dengan 8255Dalam system yang berbasis 8031 di mana
dia akan selalu menggunakan memory ROM eksternal karena memang chip
ini tidak dilengkapi dengan ROM internal. Maka penggunaan 8255
untuk system seperti ini akan sangat menguntungkan. Hal ini karena
faktanya, bahwa untuk menghubngkan 8031 dengan ROM eksternal, kita
harus kehilangan P0 dan P2 dan beberapa bit P3. Dan praktis hanya
tersisa P1. Sehingga dengan menghubungkan 8255, ini adalah cara
yang sangat baik untuk mendapatkan kembali jumlah port yang telah
hilang tadi. Hal ini seperti yang digambarkan pada gambar 15-8.
gambar 15-7 : pendekodean 8255 menggunakan 47LS138
Gambar 15-8 : hubungan 8051 untuk ROM program eksternal dan
8255
SubBAB 15.2: MENGHUBUNGKAN THE 8255 Di bab 12 secara mendetil
dijelaskan cara menghubungkan peralatan dunia nyata seperti LCD,
sensor-sensor, dan ADC. Dalam bagian ini kita akan ditunjukkan
bagaimana menghubungkan 8255 dengan LCD, sensor-sensor dan ADC,
kemudian bagaimana memprogramnya dengan menggunakan
instruksi-instruksi 8051.
Menghubungkan Motor Stepper pada 8255
Bab 12 secara lengkap mengupas cara mengbungkan motor stepper
pada 8051. Di sini kita akan membahas cara menghubungkan motor
stepper pada 8255, dan memprogramnya. Lihat gambar 15-9.
MOV A,#80h ;control word for PA=out MOV R1,#CRPORT ;control reg
port address MOVX @R1,A ; mengatur PA-out MOV R1,#APORT ;load PA
address MOV A,#66h ;A=66h, stepper motor sequenceAGAIN : MOVX @R1,A
;issue motor sequence to PA RR A ;rotate sequence to PA ACALL DELAY
;wit SJMP AGAIN
gambar 15-9 : hubungan 8255 dengan motor stepper
Menghubungkan LCD dengan 8255Program 15-1 menunjukkan bagaimana
untuk memberikan perintah dan data kepada LCD yang terhubung dengan
8255. Lihat gambar 15-10. Dalam program 15-1 tersebut kita harus
memberikan tundaan yang panjang sebelum memberikan informasi
(Command atau Data) kepada LCD. Cara yang lebih baik adalah menguji
sinyal Busy dari LCD. Hal ini seperti yang didiskusikan pada bab
12. Program 15-2 adalah ulangan dari program 15-2 namun dengan
menguji sinyal Busy. Perhatikan bahwa di sana tidak ada DELAY yang
dipanggil oleh program utama pada Program 15-2.
Gambar 15-10 : hubungan LCD
;Menulis Command dan Data pd LCD tanpa melihat bendera
Busy;Menganggap PA dari 8255 terhubung dengan D0-D7 pada LCD
dan;PB0=RS, PB1=R/W, PB2=E untuk pin-pin kontrol LCDMOV A,#80h
;semua port LCD = output MOV R0,#CNTPORT ;isi dgn alamat Reg
Control MOVX @R0,A ;tuliskan control word MOV A,#38h ;LCD:2 baris,
5x7matrx ACALL CMDWRT ;tulis Command ke LCD ACALL DELAY ;tunggu
beberapa saat (2mS) MOV A,#0Eh ;LCD Command utk cursor=on ACALL
CMDWRT ;tulis Command ke LCD ACALL DELAY ;tunggu beberapa saat MOV
A,#01h ;Clear LCD ACALL CMDWRT ;tulis Command ke LCD ACALL DELAY
;tunggu beberapa saat MOV A,#06h ;Shift kursor ke kanan ACALL
CMDWRT ;tulis Command ke LCD ACALL DELAY ;tunggu beberapa saat MOV
A,#N ;Tampilkan data (huruf N) ACALL DATAWRT ;tulis Data ke LCD
ACALL DELAY ;tunggu beberapa saat MOV A,#O ;Tampilkan data (huruf
O) ACALL DATAWRT ;tulis Data ke LCD ACALL DELAY ;tunggu beberapa
saat ;CMDWRT: MOV R0,#APORT ;isi dgn alamat port A MOVX @R0,A
;tulis ke pin2 data LCD MOV R0,#BPORT ;isi dgn alamat port B MOV
A,#00000100b ;RS=0, R/W=0, E=1 utk H-L MOVX @R0,A ;aktifkan pin2
kontrol NOP NOP ;tunggu sekejap MOV A,#00000000b ;RS=0, R/W=0, E=0
utk H-L MOVX @R0,A ;kunci info di pin data RET
DATAWRT: MOV R0,#APORT ;isi dgn alamat port A MOVX @R0,A ;tulis
ke pin2 data LCD MOV R0,#BPORT ;isi dgn alamat port B MOV
A,#00000101b ;RS=1, R/W=0, E=1 utk H-L MOVX @R0,A ;aktifkan pin2
kontrol NOP NOP ;tunggu sekejap MOV A,#00000001b ;RS=1, R/W=0, E=0
utk H-L MOVX @R0,A ;kunci info di pin data RET
Program 15-1
;Menulis Command dan Data pd LCD dengan melihat bendera
Busy;Menganggap PA dari 8255 terhubung dengan D0-D7 pada LCD
dan;PB0=RS, PB1=R/W, PB2=E untuk pin-pin kontrol LCDMOV A,#80h
;semua port LCD = output MOV R0,#CNTPORT ;isi dgn alamat Reg
Control MOVX @R0,A ;tuliskan control word MOV A,#38h ;LCD:2 baris,
5x7matrx ACALL NCMDWRT ;tulis Command ke LCD MOV A,#0Eh ;LCD
Command utk cursor=on ACALL NCMDWRT ;tulis Command ke LCD MOV
A,#01h ;Clear LCD ACALL NCMDWRT ;tulis Command ke LCD MOV A,#06h
;Shift kursor ke kanan ACALL NCMDWRT ;tulis Command ke LCD MOV A,#N
;Tampilkan data (huruf N) ACALL NDATAWRT ;tulis Data ke LCD MOV
A,#O ;Tampilkan data (huruf O) ACALL NDATAWRT ;tulis Data ke LCD
;NCMDWRT: MOV R2,A ;Simpan nilai A; ACALL LCDREADY; MOV A,R2 ;ambil
kembali data M