Home|Tutorial | ElecProject | KuliahElektro | Download | Link | Rupa2 | Ide| Skema Elektronik

 
         
     
 

 Electronics Poject-1

  ADC memakai LPT Port PC

  Masukan Analog untuk PC

  Skema Pengusir Tikus

  Pemancar FM  

  Pemancar FM 12W ngebrik

  Cara gambar bikin SWR

  Bikin dummy Load

  Charger batery NiCad

  Ballast Elektronik

  Running LED

 

 Electronics Poject-2

 

 Microcontroller- Project-1

  Bahasa Assembly Dasar

  Atmel Flash Programmer

  Struktur Program Assembly 

  Variabel dalam Assembly

  Konstanta dalam Assembly

  Pemrog dasar uC MCS-51

  SFR pd AT89Cx051

  RAM pd AT89Cx051

  Keyboard IBM PC

  Keypad Heksadesimal

  Epson SED 1200 LCD Module

  SEIKO Intsrument M1632 LCD 

  DTMF  

  Komunikasi  Asinkron UART 

  Port Seri MCs-51

  Motor Stepper (bag-1)

  Motor Stepper (bag-2)

  Pengukur Jarak Ultrasonic 

  I2C Serial EEPROM

 

 

Keyboard IBM PC

Oleh: Budhy Sutanto

 

Teknik Interface membicarakan cara-cara menghubungkan mikrokontroler dengan peralatan lain, meskipun tidak membahas pembuatan alat sampai jadi, tapi pengetahuan tentang teknik interface ini sangat diperlukan dalam rancang bangun peralatan yang lebih rumit.

Untuk apa menghubungkan mikrokontroler dengan keyboard IBM PC? Keyboard IBM PC merupakan sarana input yang sangat murah, hanya dengan 2 utas kabel sinyal ditambah 2 kabel catu daya sistem berbasis mikrokontroler dengan mudah bisa dilengkapi dengan 101 tombol untuk mengisikan text maupun angka.

Keyboard yang dibahas adalah keyboard untuk IBM PC-AT, tidak termasuk model keyboard lama untuk IBM PC-XT.

Tata kerja keyboard PC

Setiap kali salah satu tombol keyboard ditekan atau dilepas, keyboard akan mengirim kode ke host (host adalah komputer kalau keyboard dihubungkan ke PC, atau berupa mikrokontroler kalau keyboard dihubungkan ke perlatan berbasis mikrokontroler). Kode tersebut dinamakan sebagai scan code.

 Scan code tombol ‘S’ adalah 1B (angka heksadesimal setara dengan angka biner 00011011). Ketika tombol ‘S’ ditekan keyboard akan mengirim 1B, jika tombol ‘S’ ditekan terus maka keyboard akan mengirimkan 1B berikutnya terus menerus, sampai ada tombol lain yang ditekan atau tombol ‘S’ tadi dilepas.

Keyboard juga mengirim kode saat ada satu tombol yang dilepas, kodenya adalah F0 (angka heksadesimal setara dengan angka biner 11110000), jadi kalau tombol ‘S’ tadi dilepas keyboard akan mengirim F0 dan 1B.

Kode-kode tersebut dikirim keyboard secara seri, artinya dikirimkan satu bit demi satu bit. Misalnya 1B dikirimkan dengan cara : mula-mula dikirim ‘1’, sesaat kemudian ‘1’ lagi dan menyusul ‘0’ sampai akhirnya terkirim sebanyak 8 bit yang berbentuk 00011011 (dikirim mulai dari bit yang paling kanan kemudian beregeser satu per satu sampai yang paling kiri).

Masing-masing tombol punya scan code sendiri, termasuk tombol ‘shift’, tombol ‘ctrl’ dan lain lain, jadi jika tombol ‘ctrl’ ditekan bersama dengan ‘S’, maka scan code yang dikirim adalah 14 (scan code untuk ‘ctrl’) dan 1B (scan code untul ‘S’). Terserah host untuk mengintepretasi scan code itu sebagai apa, bearti merupakan tugas program dalam mikrokontroler untuk mengenal scan code.

Scan code disusun sebagai kode 8 bit bisa dipakai untuk membedakan 256 macam kode, sedangkan keyboard PC hanya punya 101 tombol, jadi sesungguhnya kode 8 bit tadi  cukup untuk semua tombol. Tapi tombol di keyboard PC dikelompokkan menjadi 2 bagian, bagian utama dan bagian tambahan, bagian utama cukup dinyatakan dengan scan code 1 byte saja, sedangkan bagian tambahan diwakili dengan beberapa byte scan code yang selalu diawali dengan E0. Misalnya tombol ‘ctrl’ kiri diwakili dengan 14 sedangkan tombol ‘ctrl’ kanan diwakili dengan E0 14.

Gambar 1 menggambarkan scan code masing-masing tombol keyboard PC. Terlihat pada gambar tersebut, scan code tidak berupa kode ASCII yang biasa dipakai mewakili huruf , dan ditentukan secara acak, juga. Sehingga setelah diterima host, scan code harus dirubah menjadi kode ASCII dengan memakai cara ‘pencarian tabel’. 

Gambar 1 Keyboard PC dan Scan Code

Komunikasi antar keyboard dan host adalah komunikasi dua arah, keyboard mengirim scan code ke host, host bisa mengirim perintah untuk mengatur kerja dari key board. Kode perintah untuk keyboard tidak sebanyak scan code, berikut ini daftar kode printah untuk keyboard (dalam heksadesimal) selengkapnya :

 ED        perintah untuk me-nyala/padam-kan lampu indikator di keyboard, setelah menerima perintah ED dari

            host, keyboard akan menjawab dengan FA sebagai tanda perintah itu telah dikenali

            (ACK – acknowlwdge) dan menunggu 1 byte perintah lagi dari host untuk menentukan lampu indikator

            mana yang perlu di-nyala/padam-kan.      

       1 byte perintah susulan tersebut akan diartikan sebagai berikut : bit 0 dipakai untuk mengatur lampu

             indikator Scroll Lock, bit 1 untuk Num Lock dan bit 2  untuk Caps Lock, bit-bit lainnya diabaikan.

EE          dipakai host untuk memeriksa apakah keyboard masih aktip. Setelah menerima perintah EE dari host,

             keyboard akan menjawab dengan EE pula, menandakan dirinya masih aktip.

F0     ada keyboard yang dilengkapi 3 set scan code, perintah ini dipakai untuk memilih scan code yang ingin

            dipakai. Setelah menerima perintah F0 dari host, keyboard akan menjawab dengan FA sebagai tanda

             perintah itu telah dikenali (ACK – acknowlwdge) dan host menjawab 1 byte lagi (nilainya 1 2 atau 3)

             untuk memilih set scan code. Jika byte yang dikirimkan nilainya 0, keyboard akan menjawab dengan

             nomor set scan code yang saat itu dipakai.

F3         dipakai untuk mengatur kecepatan tanggapan keyboard (Typematic Repeat Rate), setelah menerima

            perintah F3 dari host, keyboard akan menjawab dengan FA sebagai tanda perintah itu telah dikenali

           (ACK – acknowlwdge) dan host menjawab 1 byte nilai kecepatan tanggapan keyboard yang dikehendaki.

F4         dipakai untuk me-aktip-kan kembali keyboard, setelah menerima perintah ini keyboard akan

            menjawab dengan FA (ACK – acknowlwdge).

F5     dipakai untuk me-nonaktip-kan keyboard, setelah menerima perintah ini keyboard akan menjawab

            dengan FA (ACK – acknowlwdge).

FE     dipakai meminta keyboard mengirim ulang scan code terakhir yang dikirim.

FF     Perintah untuk me-reset keyboard

 

Selain perintah dari host, keyboard juga mempunyai kode-kode lain selain scan code yang dikirimkan ke host, sebagai berikut :

FA      berarti ACK (acknowledge), yaitu jawaban dari keyboard bahwa perintah dari host sudah dikenali

              dengan baik.

AA           berarti keyboard selesai memeriksa diri dan siap bekerja setelah diberi catu daya

EE           lihat perintah EE di atas

FE           artinya minta host mengulang perintah terakhir yang dikirim

FF / 00    berarti terjadi kesalahan di keyboard

 

Rangkaian penghubung

Keyboard PC dibangun dengan mikrokontroler MCS48, yang merupakan saudara tua MCS51 tapi jauh lebih sederhana. Untuk keperluan membentuk rangkaian penghubung tidak perlu diketahui bagaimana cara kerja mikrokontroler dalam keyboard, tapi cukup meninjau rangkaian elektronik bagian penghubung  pada gambar 2.

 

Gambar 2 Bagian penghubung di dalam Keyboard PC

Yang menarik, rangkaian sederhana ini bisa dipakai untuk komunikasi data 2 arah, yakni keyboard mengirimkan scan code ke PC, atau PC mengirimkan perintah-perintah ke keyboard, misalkan perintah untuk menyalakan beberapa lampu yang ada di keyboard.

Kbd Clock dibangkitkan oleh MCS48, merupakan sinyal pendorong Kbd Data yang bisa bersumber dari keyboard maupun bersumber dari PC. Level tegangan pada kedua sinyal ini memenuhi standar sinyal TTL biasa, jadi bisa langsung dihubungkan ke AT89C2051.

Sebagai contoh Kbd Clock dihubungkan ke Port 3 bit 2 (kaki 6 AT89C2051) dan Kbd Data dibuhungkan ke Port 3 bit  (kaki 7), dalam program hal ini dinyatakan dengan baris 1 dan baris 2 Potongan Program 1. Dengan adanya pernyataan di baris 1 dan 2, selanjutnya dalam program tidak disebutkan lagi P3.2 atau P2.3, tapi ditulis KBDclock atay KBDdata sehingga program lebih enak dibaca. Kalau program ini dipakai di proyek lain yang Port 3 bit 2 dan bit 3-nya dipakai untuk keperluan lain, Kbd Clock dan Kbd Data bisa saja dihubungkan ke port lain, asalkan baris 1 dan 2 disesuaikan dengan perubahan itu.

Potongan Program 1  Pernyataan pemakaian Port

1        KBDclock bit   P3.2   ; P3.2 dihubungkan ke KBDclock

2        KBDdata  bit   P3.3   ; P3.3 dihubungkan ke KBDdata

Sumber daya untuk keyboard dicatu dari luar, harus diperhatikan kebutuhan arusnya cukup besar bisa sampai sekitar 300 mA.

Pengiriman data dari Keyboard

Sinyal pengiriman data dari Keyboard

Saat tidak ada pengiriman data, sinyal Kbd Clock dan Kbd Data dalam keadaan ‘1’. Sinyal pengiriman data dari keyboard dalam gambar 3 dijelaskan sebagai berikut :

·   Data mulai dikirimkan dengan me-nol-kan Kbd Data sebagai tanda mulai pengiriman (start bit), berapa saat

     kemudian setelah Kbd Data stabil disusul Kbd Clock berubah menjadi ‘0’ dan kembali ke ‘1’ lagi, ini berarti

     selesai mengirimkan data 1 bit.

·   Setelah mengirim ‘start bit’, dikirimkan bit 0, bit 1 dan seterusnya sampai bit 7.

·   Menyusul dikirim ‘parity bit’, yaitu bit kontrol yang berguna bagi host penerima data untuk memastikan data

     yang diterima tidak ada kesalahan. Jika banyaknya bit ‘1’ yang terdapat di bit 0 sampai bit 7 ganjil, ‘parity

     bit’ akan bernilai ‘1’.

·   Sebagai penutup (stop bit) Kbd Data dikembalikan kekeadan normalnya, yaitu ‘1’. 

Gambar 3  Sinyal komunikasi data seri dari Keyboard

Menerima data 1 bit dari Keyboard

Frekuensi Kbd Clock sekitar 20 sampai 30 KHz. Jumlah bit yang dikirim lewat Kbd Data adalah 11, jadi Kbd Clock hanya mengirim 11 pulsa clock untuk mendorong 11 bit data tersebut satu per satu. Perubahan KBD Clock dari ‘1’ ke ‘0’ merupakan bagian terpenting dari bahasan di atas, pada saat itulah data di KBD Data boleh diambil! Potongan Program 2 adalah bagian program menunggu saat tepat untuk mengambil data.

 

Potongan Program 2 Mengambil data 1 bit

1        AmbilBit:

2                  JNB   KBDclock,*  ; Selama KBBclock='0' tunggu di baris ini

3                  JB    KBDclock,*  ; Selama KBDclock='1' tunggu di baris ini

4                  MOV   C,KBDdata   ; Ambil data bit di KBDdata ke Carry bit PSW

5                  RET

 

·  Mula-mula dianggap KBDclock pada level ‘0’ jadi harus menunggu agar KBDclock menjadi ‘1’. Baris 1 yang

   mempunyai makna : selama KBDclock = ‘0’ (JNB) AT89C2051 akan menunggu di baris 1 (tanda * artinya

   jalankan lagi instruksi bersangkutan), begitu KBDclock=’1’ maka AT89C2051 akan mengerjakan baris 2.

·  Baris 2 menungu KBDclock dari level ‘1’ berubah menjadi ‘0, hal ini dilakukan dengan logika yang berbalikan

   dengan baris 1, instruksi yang dipakai adalah JB bukan lagi JNB. Lolos dari baris 2 data di KBDdata boleh

   diambil.

·  Di baris 3 nilai KBDdata diambil ke Carry bit di PSW (Program Status Word). Jadi hasil pembacaan data 1 bit

   dari sub-rutin ini disimpan di Carry bit.

 

Menerima data 1 byte dari Keyboard

Potongan Program 3 mengendalikan P3.2 dan P3.3 untuk menerima data 1 byte dari keyboard, sesuai Gambar 3 sub-rutin AmbilByte di bagi menjadi beberapa bagian :

·    Bagian ‘start bit’ : baris 3 mengambil ‘start bit’ di KBDdata dengan bantuan sub-rutin AmbilBit, ‘start bit’

     nilainya harus ‘0’ hal ini diperiksa di baris 4, jika ternyata bit yang didapat bernilai ‘1’ berarti terjadi

     kesalahan dan kembali mengulang baris 3.

·    Bagian ‘8 bit data’ : baris 6 sampai 11 mengambil data bit 0 sampai bit 7, data diambil satu bit demi satu

     bit di baris 8 dan langsung digeser ke akumulator A (baris 9), hal ini dilakukan sebanyak 8 kali. R7 dipakai

     sebagai ‘count down counter’ untuk mengatur pengulangan itu, di baris 6 R7 diberi nilai 8,  di baris 10 isi R7

     dikurangi 1, selama R7 belum=0 AT89C2051 akan mengulang AmbilLagi di baris 7. Data yang ditampung di A,

     untuk sementara disimpan dulu di R7 (baris 11).

·    Bagian ‘bit pariti’ : baris 14 sampai 20 membandingkan pariti dari data yang diterima dengan pariti yang

     dikirim keyboard, kalau tidak cocok berarti terjadi kesalahan.

     Bit Pariti (P) di PSW (Program Status Word) merupakan pariti genap dari isi A, di baris 14 sampai 16 bit P

     disimpan ke A.0 setelah sebelumnya isi A di-‘nol’-kan. Baris 17  mengambil bit pariti gasal yang dikirim

     keyboard dan di simpan ke A.1 (baris 18). Keadaan yang benar adalah kalau A.0<>A.1, atau banyaknya bit

     ‘1’ di Akumulator adalah gasal, atau P bernilai ‘1’. P dipindahkan ke C di baris 19, dan diperiksa di baris 20,

     kalau nilai C=0 berarti Salah.

·   Bagian ‘stop bit’ : baris 24 mengambil ‘stop bit’ jika nilainya ‘0’ berarti salah.

·   Sifat penting dari sub-rutin ini adalah : 

·   saat keluar dari subrutin jika nilai C=1 berarti A berisi data dari keyboard, sebaliknya jika C=0 berarti

     terjadi kesalahan dari isi A tidak bisa dipakai.

·   Dalam sub-rutin ini R7 dipakai, jadi isinya berubah setelah keluar dari sub-rutin.

 

Potongan Program 3  Mengambil data 1 byte dari Keyboard

1    AmbilByte:

2    ***** Bagian ‘start bit’

3              ACALL AmbilBit

4              JC    AmbilByte          ; Salah, ‘start bit’ harus =’0’

5    ***** Bagian 8 bit data

6              MOV   R7,#8              

7    AmbilLagi:

8              ACALL AmbilBit      ; ambil 1 bit

9              RRC   A             ; geser masuk ke A

10             DJNZ  R7,AmbilLagi  ; sudah 8 kali? Ulangi kalau belum

11             MOV   R7,A          ; simpan dulu hasilnya di R7

12     

13    ***** Bagian bit pariti

14             MOV   C,P           ; ‘pariti genap’ dari Acc. A simpan dulu ke C

15             CLR   A             ; A := 00000000            

16             MOV   A.0,C         ; A.0 := pariti yang disimpan di C

17             ACALL AmbilBit      ; ambil ‘pariti gasal’ yang dikirim keyboard

18             MOV   A.1,C         ; simpan ke A.1

19             MOV   C,P           ; yang benar adalah A.1<>A.0, atau P=1

20             JNC   Salah         ; kalau C=0, Salah!

21     

22    ***** Bagian ‘stop bit’

23             MOV   A,R7          ; kembalikan R7 ke A

24             ACALL AmbilBit      ; ambil ‘stop bit’, kalau C=0, Salah!  

25    Salah:

26             RET

 

Merubah ScanCode menjadi kode ASCII

Kalau tidak ada kesalahan, data yang diperoleh dari sub-rutin AmbilByte bisa berupa:

·        scan code kalau nilai data tersebut antara 01 (Hex) sampai 83 (Hex).

·        F0 sebagai awalan dari scan code menandakan ada tombol dilepas

·        E0 sebagai awalan dari scan code tombol tambahan

·        FA, AA, EE, FE, FF, 00 yaitu kode-kode yang dipakai untuk menjawab perintah dari host

Kalau kode tersebut berupa scan code, kode tersebut harus diterjemahkan dulu dengan Potongan Program 4. Perubahan scan code menjadi kode ASCII yang dilakukan sub-rutin JadikanASCII, sub-rutin ini mengandalkan data yang sudah ditabelkan dalam TabelScanCode, karena tabel ini cukup panjang tidak disertakan di sini tapi bisa dijumpai dalam Program Lengkap.

Sebelum memanggil JadikanASCII, Akumulator A harus diisi dengan scan code yang akan dijadikan kode ASCII, di baris 2 DPTR diarahkan ke TabelScanCode, bagian @A+DPTR di baris 3 menghitung posisi scan code bersangkutan di TabelScanCode dengan cara menjumlahkan nilai DPTR dengan A, kemudian atas dasar perhitungan itu isi salah satu byte  TabelScanCode (yang berupa kode ASCII) diambil ke A.

Potongan Program 4   Merubah ScanCode menjadi kode ASCII

1 JadikanASCII:

2              MOV   DPTR,#TabelScanCode

3              MOVC  A,@A+DPTR

4              RET

 

Pengiriman data ke Keyboard

Sinyal pengiriman data ke Keyboard

Saat tidak ada pengiriman data, sinyal Kbd Clock dan Kbd Data dalam keadaan ‘1’. Agar mudah dibedakan, Gambar 4 digambarkan dengan dua warna, warna biru artinya sinyal itu diatur oleh host, dan warna merah artinya sinyal itu dibangkitkan oleh keyboard. Sinyal pengiriman data dari host dalam gambar 4 dijelaskan sebagai berikut :

·    Sebelum mengirim data host ‘minta ijin’ pada keyboard dengan cara me-‘nol’-kan Kbd Clock setidak-

     tidaknya selama 100 mikro-detik, dan kemudian di-‘satu’-kan kembali (warna biru).

·    Setelah menerima ‘permintaan ijin’ dari host, keyboard membangkitkan 12 pulsa clock di Kbd Clock (warna

     merah). Keyboard akan mengambil data dari host setiap saat pulsa tersebut berubah dari level ‘1’ menjadi

    ‘0, jadi data dari host sudah harus siap sebelum hal tersebut terjadi.

·    Data mulai dikirimkan dengan me-nol-kan Kbd Data sebagai tanda mulai pengiriman (start bit), saat Kbd

   Clock berubah dari ‘1’ menjadi ‘0’ data 1 bit tadi diterima oleh keyboard.

·    Setelah mengirim ‘start bit’, dikirimkan bit 0, bit 1 dan seterusnya sampai bit 7.

·    Menyusul dikirim ‘parity bit’, yaitu bit kontrol yang berguna bagi keyboard untuk memastikan data yang

     diterima tidak ada kesalahan. Jika banyaknya bit ‘1’ yang terdapat di bit 0 sampai bit 7 ganjil, ‘parity bit’

     akan bernilai ‘1’.

·    Sebagai penutup (stop bit) Kbd Data dikembalikan kekeadan normalnya, yaitu ‘1’.

·    Selesai menerima 11 bit data di atas (warna biru : ‘start bit’, 8 bit ditambah dengan ‘parity bit’ dan

    ‘stop’bit’), pada pulsa yang kedua belas keyboard mengirimkan ACK=’0’ (warna merah) yang menandakan

     semua bit sudah diterima.

 

Gambar 4 Proses pengiriman data ke Keyboard

 

 

Mengirim data 1 bit ke Keyboard

Perubahan KBDclock dari ‘1’ ke ‘0’ merupakan bagian terpenting dari bahasan di atas, pada saat itulah data di KBDdata diambil oleh keyboard, jadi sebelum saat itu terjadi data harus disiapkan di KBDData! Potongan Program berikut adalah bagian program menunggu saat tepat untuk mengirim data.

 

Potongan Program 5   Mengirim data 1 bit

1        KirimBit:

2                   JNB   KBDclock,*    ; Selama KBBclock=’0’ tunggu di baris ini

3                   MOV   KBDdata,C     ; Kirim data bit di Carry bit PSW ke KBDdata 

4                   JB    KBDclock,*    ; Selama KBDclock=’1’ tunggu di baris ini

5                   RET

 

·   1 bit data yang akan dikirim sebelumnya sudah disimpan di bit Carry

·   Mula-mula dianggap KBDclock pada level ‘0’ jadi harus menunggu dulu agar KBDclock menjadi ‘1’, hal ini

     dilakukan pada baris 1 yang mempunyai makna : selama KBDclock = ‘0’ (JNB) AT89C2051 akan menunggu di

     baris 1 (tanda * artinya jalankan lagi instruksi bersngkutan), begitu KBDclock=’1’ maka AT89C2051 akan

     mengerjakan baris 2.

·   Di baris 2 isi Carry bit di PSW (Program Status Word) dikirim ke KBDdata, data ini akan diambil keyboard

     saat KBDclock berubah dari ‘1’ menjadi ‘0’.

·   AT89C2051 baru akan meninggalkan sub-rutin ini setelah data diambil keyboard, jadi harus menungu

     KBDclock dari level ‘1’ berubah menjadi ‘0 (baris 3), hal ini dilakukan dengan logika yang berbalikan dengan

     baris 1, instruksi yang dipakai adalah JB bukan lagi JNB.

 

Mengirim data 1 byte ke Keyboard

Potongan Program 6 merupakan program pengirim perintah dari host, sesuai sinyal Gambar 4 sub-rutin KirimByte di bagi menjadi beberapa bagian :

·    1 byte data yang akan dikirim sebelumnya sudah disimpan di Akumulator A. Bit Pariti (P) di PSW (Program

     Status Word) merupakan pariti genap dari isi A, di baris 2 dan 3 bit P disimpan dulu ke bit F0 di PSW, nanti

     setelah pengiriman 8 bit data bit pariti ini akan dikirim ke keyboard.

·    Bagian ‘minta ijin’ :  baris 6 sampai 9 me-‘nol’-kan Kbd Clock selama 120 mikro-detik dan kemudian di-

     ‘satu’-kan kembali

·    Bagian ‘start bit’ : baris 12 dan 13 mengirim ‘start bit’.

·    Bagian ‘8 bit data’ : baris 16 sampai 20 mengirim 8 bit isi Akumulator (A.0 sampai A.7) satu bit demi satu

     bit ke keyboard.  Di baris 18 isi A diputar 1 bit ke kanan lewat C (RRC A), hasil dari perputaran ini A.0

   bergeser masuk ke C, A.1 masuk  ke A.0, dan seterusnya A.7 masuk ke A.6, nilai C sebelumnya masuk ke

     A.7. Selesai perputaran ini, bit yang semula di A.0 berada di C dikirim ke keyboard di baris 19.

·    Baris 18 dan 19 diulang sebanyak 8 kali. R7 dipakai sebagai ‘count down counter’ untuk mengatur

     pengulangan itu, di baris 16 R7 diberi nilai 8,  di baris 20 isi R7 dikurangi 1, selama R7 belum=0 AT89C2051

     akan mengulang KirimLagi di baris 17.

·    Bagian ‘bit pariti’ : bit pariti yang tadi disimpan di F0 dikembalikan ke C (baris 23), bit ini adalah pariti

     genap dari Akumulator A, sedangkan yang dikehendaki keyboard adalah bit pariti gasal, jadi nilailah harus

     dibalik dulu di baris 24 baru kemudian dikirim di baris 25.

·    Bagian ‘stop bit’ : baris 28 dan 29 mengirim ‘stop bit’

·    Bagian ‘bit ACK’ : sebelum mengakhiri sub-rutin ini baris 32 mengambil bit ACK.

·    Sifat penting dari sub-rutin ini adalah : 

·    Data 1 byte yang akan dikirim harus diisikan ke A sebelum masuk sub-rutin ini.

·    Dalam sub-rutin ini R7 dan F0 dipakai, jadi isinya berubah setelah keluar dari sub-rutin.

 

Potongan Program 6  Mengirim data 1 byte ke Keyboard

1     KirimByte:

2           MOV   C,P              ; simpan dulu bit pariti

3           MOV   F0,C             ; ke bit F0 di PSW

4         

5     ***** Bagian ‘minta ijin’

6           CLR   KBDclock         ; KBDclock di-‘nol’-kan

7           MOV   R7,#60

8           DJNZ  R7,*             ; menunggu disini selama 2x60 mikro-detik

9           SETB  KBDclock         ; KBDclock di-‘satu’-kan

10     

11    ***** Bagian Start bit

12          CLR   C

13          ACALL KirimBit

14     

15    ***** Bagian 8 bit data

16          MOV   R7,#8

17    KirimLagi:

18          RRC   A               ; pindahkan A.0 ke C

19          ACALL KirimBit        ; kirimkan

20          DJNZ  R7,KirimLagi    ; sudah 8 kali? Ulangi kalau belum

21     

22    ***** Bagian bit pariti 

23          MOV   C,F0

24          CPL   C

25          ACALL KirimBit        ; kirim 'pariti gasal' ke keyboard keyboard

26     

27    ***** Bagian Stop bit     

28          SETB  C

29          ACALL KirimBit

30       

31    ***** Bagian mengambil sinyal ACK

32          ACALL AmbilBit

33          RET

 

Penutup

Dalam pembahasan Teknik Interface, program yang ditulis umumnya hanya dalam bentuk sub-rutin seperti yang dibahas di atas, sub-rutin tersebut menjembatani perangkat keras berupa rangkaian elektronik dengan program mikrokontroler, sehingga program-program di atasnya bisa ditulis tanpa harus banyak mengetahui seluk belum rangkaian elektronik.

Berikut ini merupakan contoh pemakaian sub-rutin di atas.

 

Potongan Program 7   Program Menu sederhana yang dikendalikan keyboard

1   Menu:

2        LCALL AmbilByte        ; ambil 1 byte dari keyboard

3        JNC   Menu             ; kalau ada kesalahan ulangi lagi ke Menu

4        LCALL JadikanASCII     ; kalau tidak salah jadikan Kode ASCII

5        CJNE  A,#’a’,TombolB?  ; tombol ‘a’ ditekan? Bukan, mungkin ‘b’

6        LCALL Program_A        ; jalankan Program A

7        SJMP  Menu             ; kembali ke Menu

8   ;

9   TombolB?:

10       CJNE  A,#’b’,TombolC?  ; tombol ‘b’ ditekan? Bukan, mungkin ‘c’

11       LCALL Program_B        ; jalankan Program B

12       SJMP  Menu             ; kembali ke Menu

13  ;

14  TombolC?:

15       CJNE  A,#’c’,Menu      ; tombol ‘c’ ditekan? Bukan, kembali ke Menu  

16       LCALL Program_C        ; jalankan Program C

17       SJMP  Menu             ; kembali ke Menu

18  ;

19  Program_A:

20       .. .. ..               ; intruksi-2 Program A ditulis di sini

21       RET

22  ;

23  Program_B:

24       .. .. ..               ; intruksi-2 Program B ditulis di sini

25       RET

26  ;

27  Program_C:

28       .. .. ..               ; intruksi-2 Program C ditulis di sini

29       RET

 

 

Potongan Program 8   Menyalakan lampu indikator ‘Caps Lock’

1        NyalakanCapsLock:

2           MOV   A,#$ED      ; perintah menyala/padamkan lampu indikator

3           LCALL KirimByte   ; kirimkan ke keyboard

4           LCALL AmbilByte   ; tunggu jawaban ‘ACK’

5           MOV   A,#4        ; bit 2 untuk mengatur lampu ‘Caps Lock’

6           LCALL KirimByte   ; kirimkan ke keyboard

7           RET

 

Pustaka

----,1983, Personal Computer Hardware Reference Library – Technical Reference, International Bussiness Machine Co.

Craig Peacock, 2000, Interfacing the PC's Keyboard, http://www.beyondlogic.org

 

 

 

 

 

 

 

 Copyright (C) anekawarna.890m.com 2007
For problems or questions regarding this web contact [admin]
Last updated: Friday October 23, 2009 16:25:29.