Menghubungkan 8031/51 dengan 8255

BAB 15

 

Sasaran

 

Setelah 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 data

Seperti 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 8255

 

Dalam 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 8255

 

Chip 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 8255

 

PA0-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 “WR

2 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 8255

 

Table 15-1: Seleksi Port untuk 8255

‘CS    A1   A0   Seleksi/Pilihan Port

0     0    0    Port A

0     0    1    Port B

0     1    0    Port C

0     1    1    Register Control

1     x    x    8255 tidak dipilih

Pin-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 = out

 

Jawaban:

 

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=55h

AGAIN:    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-2

 

 

Contoh 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 0’z, 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-3

 

untuk memprogram seperti dalam contoh 15-3. Dapat direkomendasikan bahwa kita menggunakan direktive EQU untuk port yang dialamatkan sebagaimana berikut ini.

 

APORT       EQU   1000h

BPORT       EQU   1001h

CPORT       EQU   1002h

CNTPORT     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 PC

 

atau, lihat berikut ini, juga mengunakan EQU

 

CONTBYT     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-5

 

Address Aliases

 

Dalam 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 x’s dari variasi dan kombinasi 1’s dan 0’s 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=out

APORT     EQU   20h

BPORT     EQU   21h

CPORT     EQU   22h

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

 

Jawaban:

 

  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 8255

 

Dalam 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 sequence

AGAIN : 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 8255

 

Program 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 LCD
MOV   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 LCD
MOV   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<OV R0,#APORT       ;isikan dengan alamat port A

          MOVX @R0,A           ;tulis pada 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

NDATAWRT:
MOV  R2,A            ;Simpan nilai A
;——————–
          ACALL LCDREADY
          ;——————–
          MOV  A,R2            ;ambil kembali data

          M<OV R0,#APORT       ;isikan dengan alamat port A

          MOVX @R0,A           ;tulis pada 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

LCDREADY: MOV  A,#90           ;PA=IN utk baca status LCD
MOV  R0,#CNTPORT     ;isi dgn alamat Reg Control
MOVX @R0,A           ;tuliskan control word

          ;——————–
          MOV  A,#00000110b    ;RS=0, R/W=1, E=1 utk baca
          MOV  R0,#BPORT       ;isi dgn alamat port B
          MOVX @R0,A           ;aktifkan pin2 kontrol

          ;——————–

          MOV  R0,#APORT       ;isi dgn alamat port A
READY:    MOVX A,@R0,A         ;read command reg
          RLC  A               ;pindahkan D7(Busy) ke CY

          JC   READY           ;tunggu smp LCD siap

          ;——————–

          MOV  A,#80h          ;buat PS dan PB = output

          MOV  R0,#CNTPORT     ;isikandengan alamat kontrol
          MOVX @R0,A           ;tulis word control

          RET

Program 15-2

 

 

Hubungan ADC pada 8255

 

Peralatan ADC tersebut dipaparkan pada bab 12. Berikut ini adalah program untuk menghubungkan ADC pada 8255 seperti yang ditunjukkan pada gambar15-11.

 

        MOV  A,#80h             ;contorol qord for PA=OUT, PC+IN

        MOV  R1,#CRPORT         ;control reg port address

        MOVX @R1,A              ;configure PA=OUT dan PC=IN

BACK:   MOV  R1,#CPORT          ;load port C address

        MOVX A,#R1              ;readport C to seee if ADC is ready

        ANL  A,#00000001b       ;mask all sxept PC0

        JNZ  BACK               ;keep monitoring PC0for OEC

        ;end of convertion, now get data ADC

        MOV  R1,#APORT          ;load alamat PA

        MOVX A,@R1              ;A=analig data input.

 

Sejauh ini kita telah mendiskusikan mode I/O sederhana bagi 8255 dan menunjukkan beberapa aplikasi baginya. Selanjutnya kita akan membahas kelanjutan dari mode-mode milik 8255. Selebihnya dari itu, untuk mode 0 (simple I/O mode) dibahas pada sub BAB 15-1, kita juga punya mode BSR, dan Mode 1. Setiap mode akan dijelaskan kemudian.

 

Gambar 15-11 : Hubungan 8255 pada ADC0804

 

 

Catatan penterjemah : Gambar rangkaian 15-11 itu bagi saya kurang baik. Hal ini karena waktu RD yang sangat minim, dan propagation 2 kali atau lebih, yakni output ADC0804, kemudian input 8255, rangkaian internal 8255, dan output 8255. Walaupun pada prakteknya hal itu bisa saja dikerjakan. Namun yang paling ideal adalah dengan mengontrol ‘WR dan ‘RD milik ADC0804 langsung dari 8255 misalnya dari PC1 dan PC2. Dengan proses yang lebih panjang, namun data yang didapat akan lebih akurat.

 

 



SubBAB 15.3: Mode Lainnya untuk 8255

Pada bagian ini kita akan mengupas mode BSR dan Mode 1 dari 8255.

BSR (bit set/reset) mode

Fitur khusus port C adalah dia dapat di-program secara bit individual. Mode BSR memungkinkan bagi kita untuk men-set tinggi atau rendah pada setiap bit PC0 s/d PC7, seperti yang ditunjukkan pada gambar 15-12. Contoh 15-16 dan 15-7 menunjukkan bagaimana menggunakan mode ini.


gambar 15-12 : BSR Control Word

 

Contoh 15-6

 

Buatlah program untuk 8255, utk membuat pulsa 80mS dengan siklus kerja (duty cycle) 50%.

 

Jawaban:

 

Untuk memprogram 8255 dalam mocd BSE, bit D7 dari control-word harus dibuat rendah. Agaat PC4 menjadi tinggi maka kita haurs menuliskan control-word engan “0xxx1001”. Berikutnya untuk yang rendah maka kita tulis dengan “0xxx1000” pada control-word. simbol x’s maksudnya adalah logika-nya boleh 1’s ataupun 0’s tidak masalah.

        MOV   R1,#CNTPPORT       ;isikna dgn port reg cotrol
        MOV   A,#00001001b       ;control-word utk PC4=1
        MOVX  @R1,A              ;tulis
        ACALL DELAY              ;buat tundaan pulsa tinggi
        MOV   A,#00001000b       ;control-word utk PC4=0
        MOVX  @R1,A              ;tulis
        ACALL DELAY              ;buat tundaan pulsa rendah
 



Gambar 15-13 : Konfigurasi pada contoh 15-6, 15-7

 

Contoh 15-7

 

Buatlah program untuk 8255 seperti pada gambar 15-13.

(a) Buat PC2 tinggi.

(b) Gunakan PC6 untuk meghasilkan gelombang kotak (square wave) dengan duty cycle 60% secara terus menerus.

 

Jawaban:

 

(a)     MOV   R0,#CNTPPORT       ;isikna dgn port reg cotrol
        MOV   A,#0xxx0101b       ;control-word
        MOVX  @R0,A               ;tulis
       

(b)

        MOV   R0,#CNTPPORT       ;isikna dgn port reg cotrol
        MOV   A,#00001101b       ;control-word utk PC6=1
        MOVX  @R0,A              ;tulis
        ACALL DELAY              ;buat tundaan pulsa tinggi
        ACALL DELAY              ;buat tundaan lagi
       
MOV   A,#00001100b       ;control-word utk PC6=0
        MOVX  @R0,A              ;tulis
        ACALL DELAY              ;buat tundaan pulsa rendah
 



Gambar 15-14 : Diagram Output Mode 1 pada 8255

 


Gambar 15-15 : Diagram waktu untuk Output Mode 1

8255 dalam Mode 1 : I/O dengan kemampuan jabat tangan

Salah satu dari fitur-fitur 8255 adalah kemampuannya untuk menangani sinyal-sinyal jabat-tangan. Jabat tangan merujuk pada proses 2 buah peralatan pintar untuk berkomunikasi. Contoh dari peralatan yang memiliki sinyal-sinyal jabat tangan adalah priter. Nanti kita akan membahas sinyal-sinyal jabat-tangan antara 8255 dan printer.

Mode 1 : Mengirimkan data dengan sinyal-sinyal jabat-tangan

Seperti yang sudah dijelaskan sebelumya pada gambar 15-14, Port A dan B digunakan untuk port output untuk mengirimkan data kepada peralatan yang memiliki sinyal-sinyal jabat-tangan. Sinyal-sinyal jabat-tangan untuk masing-masing port A dan B diselenggarakan oleh port C. Gambar 15-15 menunjukkan diagram waktunya.

Paragraf-Paragraf berikut ini adalah penjelasan dari sinyal-sinyal jabat-tangan untuk Port A. Namun konsep yang sama juga digunakan untuk port B.

‘OBFa (output buffer full for port A)
Ini adalah sinyal aktif rendah, yang keluar dari PC7 untuk mengindikasikan bahwa saat itu CPU telah menulis 1 byte data pada Port A. ‘OBFa harus terhubung pada pin STROBE milik peralatan (misalnya Printer) untuk menginformasikan bahwa saat itu dia boleh membaca 1 byte data pada port A.


‘ACKa (acknowledge for port A)
Ini adalah sinyal aktif rendah yang diterima oleh 8255 pada PC6. Melalui ‘ACK, ini 8255 dapat mengerti peralatan yang terhubung telah mengambil data pada port A, dan peralatan tersebut kemudian mengirimkan sinyal ‘ACK ini kepada 8255.

INTRa (Interupt Request for port A)
Ini adalah snyal aktif tinggi, yang diterima oleh 8255 melalui PC3. Sinyal ‘ACK adalah sinyal dengan durasi terbatas. Saat dia rendah, maka ‘OBFa menjadi tidak aktif, dan ‘ACK akan terus rendah selama beberapa saat, dan kemudian kembali tinggi (inactive). Saat transisi dari rendah ke tinggi (rising edge) pada siyal ‘ACK ini, maka akan mengaktifkan INTRa dengan membuatnya tinggi. CPU kemudian diinformasikan melalui INTRa, bahwa printer telah menerima byte terakhir dan siap unut menerima instruksi berikutnya. INTRa akan menginstrupsi CPU dari apa yang sedang dikerjakannya dan memaksa CPU untuk menuliskan byte berikutnya kepada printer melalui Port A. Hal ini sangat penting bahwa INTRa hanya bisa menjadi aktif, saat INTEa, ‘OBFa, dan ‘ACKa juga dalam keadaan tinggi. INTRa akan di-reset ke 0 saat CPU mulai menulis data byte pada Port A.

INTEa (Interupt Enable for port A)
8255 dapat me-nonaktifkan INTRa guna mencegah adanya interupsi yang tidak diperluakan oleh INTRa kepada CPU. Itulah fungsi dari INTEa. INTEa ini adalah dibuat dengan menggunakan flip-flop internal untuk mencegah (disable) INTRa. INTEa dapat di set atau reset melalui port C dalam mode BSR. Hal ini karena flip-flop INTEa dapat dikendalikan melalui PC6. Sedang INTEb dikendalikan melui PC2 juga menggunakan mode BSR.

Status Word
8255 dapat melakukan pemonitoran status sinyal INTR, OBE, dan INTE pada kedua port A dan B. Hal dapat terjadi dengan membaca port C dan memindahkanya kepada akumulator, lalu kemudian melakukan mengujian bit. Kemampuan ini dapat diimplementasikan sebagai metode polling untuk menggantikan interuptsi hardware.

 

Gambar 15-16 : Konektor DB-25

 

Gambar 15-17 : Konektor Centronik 36-pin


Sinyal Printer


Untuk mengerti system jabat-tangan pada 8255, kita diberikan penjelasan singkat tentang operasi printer, sinyal-sinyal jabat-tangan. Berikut ini adalah urutan langkah-langkah untuk berkomunikasi dengan printer. Table 15-2 memberikan daftar sinyal-sinyal printer-pritner Centronik

1. Byte data diberikan pada bus data milik printer.

2. Printer diinformasikan tentang kehadiran data tersebut dengan mengatifkan sinyals ‘Strobe.

3. Saat printer menerima data itu, dia menginformasikan pengirim(CPU) denga nmengaktifkan ‘ACK.

4. Sinyak ‘ACK ini menandakan dimulainya proses untuk melakukan pengiriman byte berikutnya ke pada printer.

Seperti yang kita lihat pada langkah-langkah di atas itu. Mengirimkan data kepada printer begitu saja tidaklah cukup. Printer harus diinformasikan adanya data yang telah kita kirimkan tadi. Saat data telah terkirim pada Printer, kemudian dia bisa mengirimakan tanda sibuk atau tanda paper-out, kemudian printer juga harus mengirimkan tanda kepada pengirim bahwa dia telah menerima data yang telah dikirimkan tadi. Gambar 15-16 dab 15-17 menunjukkan bagian DB-25 dan Centronik dari kabel printer. Cara menghubungkan 8031/51 dengan printer, saya serahkan kepada pembaca untuk menggalinya dan bereksperimen.

 

Tabel 15-2 : Pin-pin Printer DB-25

pin   Name     Penjelasan

1     PC0      ‘Strobe

2     DP0    Data bit 0

3     DP1    Data bit 1

4     DP2    Data bit 2

5     DP3    Data bit 3

6     DP4    Data bit 4

7     DP5    Data bit 5

8     DP6    Data bit 6

9     DP7    Data bit 7

10    PS6    ‘ACK (Acknoowledge)

11    PS7    Busy

12    PS5    Out of Paper

13    PS4    Select

14    PC1    ‘Auto Feed

15    PS3    Error

16    PC2    Initialze Printer

17    PC3    Select Input

18-25        Ground

 

Tabel 15-3 : Pin-pin Printer Centronik


Nomor

Kembar

Sinyal

Arah

Penjelasan

1

19

STROBE

IN

pulsa STROBE untuk membaca data masuk. Lebar pulsa setidaknya 0.5uS. Sinyal ini normalnya adalah tinggi, proses baca data hendaknya dilakukan saat sinyal ini rendah.

2

20

DATA1

IN

Sinyal ini adalah representasi dari informasi bit ke 1 sampai ke8 pada data parallel. Sinyal ini disebuat tinggi saat berlogika 1 dan disebut rendah saat berlogika 0.

3

21

DATA2

IN

idem

4

22

DATA3

IN

idem

5

23

DATA4

IN

idem

6

24

DATA5

IN

idem

7

25

DATA6

IN

idem

8

26

DATA7

IN

idem

9

27

DATA8

IN

idem

10

28

ACKNLG

OUT

Pulsa rendah sekitar 0.5uS adalah berarti data telah diterima dan printer telah siap untuk menerima data berikutnya.

11

29

BUSY

OUT

sinyal tinggi mengindikasikan bahwa printer untuk sementara tidak bisa menerima data. Busy ini dibangkitkan dari (1) saat data entry, (2) saat proses pencetakan, (3) offline, (4) adanya error pada proses pencetakan.

12

30

PE

OUT

Sinyal tinggi mengindikasikan Out-of-Paper.

13

SLCT

OUT

mengindikasikan printer dalam keadaan dipilih (selected)

14

AUTOFEED

IN

Saat sinyal ini “rendah”, mkaka kertas akan di-naik-kan otomatis setelah pencetakan. (Sinyal ini dapat terus “rendah” dengan mengatur Deep Swicth pin2-3 yang biasanya ada pada PCB printer.

15

NC

Tidak digunakan.

16

0V

Logic GND level.

17

CHASISGND

GND Chasis Printer. Pada printer, GND chasis dan GND sinyal adalah terpisah satu sama lain.

18

NC

Tidak digunakan.

19-30

GND

sinyal kabel kembar tergulung (twisted-pair), level GND. Lihat pin 1 – 12

31

INIT

IN

Saat sinyal menjadi rendah setidaknya selama 50uS, maka controller printer menjadi RESET.pada keadaan semula.dan buffer dibersihkan. Normalnya sinyal ini dalam keadaan “tinggi”

32

ERROR

OUT

Saat sinyal ini “tinggi”, maka menandakan bahwa printer “paper-end”, “off-line”, dan atau “error”.

33

GND

Sama dengan pin 19-30

34

NC

Tidak digunakan.

35

Pull-up ke Vcc +5V dengan resistor 4k7 ohms.

36

SLCTIN

IN

Masukan data (Data Entry) dapat terjadi selama sinyal ini dala keadaan “rendah”. Dapat pula dibuat terus “rendah” dengan mengatur Deep Switch 1-8 pada PCB Printer.

 




RINGKASAN

Bab ini memnjelaskan bagaimana cara untuk memperbesar port I/O dari 8031/51 dengan menghubungkannya pada chip 8255. 8255 bisa diprogram sebagai port I/O sederhana untuk mengontrol aneka peralatan semacam motor stepper, LCD, dan ADC.

8255 memiliki 3 buah Port. Port A dan B yang masing-masing adalah port 8-bit bidirectional. Sedang port C dapat diprogram sebagai port 8-bit bidirectional atau menjadi 2 buah port 4-bit, dan juga bisa diprogram secara bit demi bit. Beberapa konfigurasi mode operasi 8255 dapat dipilih dengan mengatur register kontrol. Beberapa teknik pemrograman pada 8255 didemonstrasikan dengan mengubah register kontrol, memilih port, dan memilih mode operasi. Selebihnya contoh-contoh pemrograman diberikan dengan menggunakan instruksi-instruksi 8051/31 untuk mengontrol peralatan seperti LCD, Motor stepper, dan ADC yang mana dia dihubungkan dengan 8255.

Sementara itu jabat-tangan (Hand Shaking) sebuah printer dengan 8255 dijelaskan pada bagian terakhir dari bab ini.

 


—————————————-

|o-o| Diterjemahkan oleh Dhanny Dhuzell

—————————————-

Tinggalkan Balasan