Port Seri MCS51

Wednesday, December 7th, 2016 - Teori Mikrokontroler

Port Seri MCS51

Umumnya orang selalu menganggap port seri pada MCS51 adalah UART yang bekerja secara asinkron, jarang yang menyadari port seri tersebut bisa pula bekerja secara sinkron, pada hal sebagai port seri yang bekerja secara sinkron merupakan sarana yang baik sekali untuk menambah input/output bagi mikrokontroler.

Dikenal 2 macam cara transmisi data secara seri. Kedua cara tersebut dibedakan oleh sinyal denyut (clock) yang dipakai untuk men-‘dorong’ data seri, kalau clock dikirim bersama dengan data seri, cara tersebut dikatakan sebagai transmisi data seri secara sinkron. Sedangkan dalam transmisi data seri secara asinkron, clock tidak dikirim bersama data seri, rangkaian penerima data harus membangkitkan sendiri clock pendorong data seri.

Port seri MCS51 bisa dipakai dalam 4 mode kerja yang berbeda. Dari 4 mode tersebut, 1 mode diantaranya bekerja secara sinkron dan 3 lainnya bekerja secara asinkron. Secara ringkas ke-empat mode kerja tersebut bisa dibedakan sebagai berikut:

  • Mode 0     Mode ini bekerja secara sinkron, data seri dikirim dan diterima melalui kaki P3.0 (RxD), dan kaki P3.1 (TxD) dipakai untuk menyalurkan clock pendorong data seri yang dibangkitkan MCS51.
    Data dikirim/diterima 8 bit sekali gus, dimulai dari bit yang bobotnya paling kecil (bit 0) dan diakhiri dengan bit yang bobotnya paling besar (bit 7). Kecepatan pengiriman data (baud rate) adalah 1/12 frekuensi osilator kristal.
  • Mode 1     Mode ini dan mode-mode berikutnya bekerja secara asinkron, data dikirim melalui kaki P3.1 (TxD) dan diterima melalui kaki P3.0 (RxD).
    Pada Mode 1 data dikirim/diterima 10 bit sekali gus, diawali dengan 1 bit start, disusul dengan 8 bit data yang dimulai dari bit yang bobotnya paling kecil (bit 0), diakhiri dengan 1 bit stop. Pada MCS51 yang berfungsi sebagai penerima bit stop ditampung pada RB8 dalam register SCON. Kecepatan pengiriman data (baud rate) bisa diatur sesuai dengan keperluan.
    Mode inilah yang umum dikenal sebagai UART (Universal Asynchronous Receiver/Transmitter).
  • Mode 2     Data dikirim/diterima 11 bit sekali gus, diawali dengan 1 bit start, disusul 8 bit data yang dimulai dari bit yang bobotnya paling kecil (bit 0), kemudian bit ke 9 yang bisa diatur lebih lanjut, diakhiri dengan 1 bit stop.
    Pada MCS51 yang berfungsi sebagai pengirim, bit 9 tersebut berasal dari bit TB8 dalam register SCON. Pada MCS52 yang berfungsi sebagai penerima, bit 9 ditampung pada bit RB8 dalam register SCON, sedangkan bit stop diabaikan tidak ditampung. Kecepatan pengiriman data (baud rate) bisa dipilih antara 1/32 atau 1/64 frekuensi osilator kristal.
  • Mode 3     Mode ini sama dengan Mode 2, hanya saja kecepatan pengiriman data (baud rate) bisa diatur sesuai dengan keperluan, seperti halnya Mode 1.

Pada mode asinkron (Mode 1, Mode 2 dan Mode 3), port seri MCS51 bekerja secara full duplex, artinya pada saat yang sama port seri ini bisa mengirim data sekali gus menerima data.

Register SBUF merupakan register penghubung port seri. Dalam ke-empat mode di atas, semua instruksi yang mengakibatkan perubahan isi SBUF akan mengakibatkan port seri mengirimkan data keluar dari MCS51. Agar port seri bisa menerima data, bit REN dalam register SCON harus bernilai ‘1’. Pada mode 0, proses penerimaan data dimulai dengan instruksi CLR RI, sedangkan dalam mode lainnya proses penerimaan data diawali oleh bit start yang bernilai ‘0’. Data yang diterima port seri dari luar MCS51, diambil dengan instruksi MOV A,SBUF.

Mengambil data dari SBUF dan menyimpan data ke SBUF sesungguhnya bekerja pada dua register yang berlainan, meskipun nama registernya sama-sama SBUF.

Register-register Port Seri MCS51

MCS51 dilengkapi dengan 2 register dan beberapa bit tambahan untuk keperluan pemakai port seri.

Port Seri MCS51,Register SBUF

Gambar 1. Register SBUF

SBUF merupakan SFR (Special Function Register) yang terletak pada memori-data internal dengan nomor $99. SBUF mempunyai kegunaan ganda, data yang disimpan pada SBUF akan dikirim keluar MCS51 lewat port seri, sedangkan data dari luar MCS51 yang diterima port seri diambil dari SBUF pula. Jadi meskipun hanya menempati satu nomor memori-data internal (nomor $99), sesungguhnya SBUF terdiri dari 2 register yang berbeda.

Register SCON

Gambar 2. Register SCON

SCON merupakan SFR (Special Function Register) yang terletak pada memori-data internal dengan nomor $98, merupakan register utama untuk mengatur kerja port seri MCS51. Setelah reset semua bit dalam SCON bernilai ‘0’.

  • Bit SM0 dan bit SM1 (bit 7 dan bit 6 pada register SMOD) dipakai untuk menentukan mode kerja port seri. Setelah reset kedua bit ini bernilai ‘0
  • Bit REN (bit 4) dipakai untuk mengaktipkan kemampuan port seri menerima data. Pada mode 0 kaki RxD (kaki 0) dipakai untuk mengirim data seri (REN=’0’) dan juga untuk menerima data seri (REN=’1’). Sifat ini terbawa pula pada saat port seri bekerja pada mode 1, 2 dan 3, meskipun pada mode-mode tersebut kaki RxD hanya dipakai untuk mengirim data, agar kaki RxD bisa dipakai untuk menerima data terlebih dulu harus dibuat REN=’1’. Setelah reset bit REN bernilai ‘0’.
  • Pada mode kerja 2 dan mode kerja 3, port seri bekerja dengan 9 bit data, SBUF yang kapasitasnya 8 bit tidak cukup untuk keperluan ini. Bit ke-sembilan yang akan dikirim terlebih dulu diletakkan di TB8 (bit 3), sedangkan bit RB8 (bit 2) merupakan bit yang dipakai untuk menampung bit ke-sembilan yang diterima port seri.
  • Pada mode kerja 1, RB8 dipakai untuk menampung bit stop yang diterima, dengan demikian apa bila RB8 bernilai ‘1’ maka data diterima dengan benar, sebaliknya apa bila RB8=’0’ berarti terjadi kesalahan kerangka (framing error).
    Kalau bit SM2 (bit 5) bernilai ‘1’, jika terjadi kesalahan kerangka, RI tidak akan menjadi ‘1’ meskipun SBUF sudah berisi data dari port seri.
    Bit ke 9 ini bisa dipakai sebagai bit pariti, hanya saja bit pariti yang dikirim harus ditentukan sendiri dengan program dan diletakkan pada TB8, dan bit pariti yang diterima pada RB8 dipakai untuk menentukan integritas data secara program pula. Tidak seperti dalam UART standard, semuanya itu dikerjakan oleh perangkat keras dalam IC UART.
  • Bit TI (bit 1) merupakan petanda yang setara dengan petanda TDRE (Transmitter Data Register Empty) yang umum dijumpai pada UART standard. Setelah port seri selesai mengirim data yang disimpan ke-dalam SBUF, bit TI akan bernilai ‘1’ dengan sendirinya, bit ini harus di-nol-kan dengan program agar bisa dipakai untuk memantau keadaan SBUF dalam pengiriman data berikutnya.
    Sub-rutin SerialOut berikut dipakai untuk mengirim data seri, bisa dipakai untuk semua mode port seri. Baris 02 menunggu TI menjadi ‘1’, dimaksud untuk memastikan pengiriman data sebelumnya sudah selesai. Data yang akan dikirim sebelumnya sudah disimpan di A, pada baris 03 data tersebut dikirim melalui port seri dengan cara meletakannya di SBUF. Agar TI bisa dipakai untuk memantau keadaan SBUF pada pengiriman data berikutnya, pada baris 04 TI di-nol-kan.
    01: SerialOut:
    02:    JNB TI,$   ; tunggu data sebelumnya selesai dikirim
    03:    MOV SBUF,A ; kirim data baru
    04:    CLR TI     ; petanda ada pengiriman baru
    05:    RET
  • Bit RI (bit 0) merupakan petanda yang setara dengan petanda RDRF (Receiver Data Register Full) yang umum dijumpai pada UART standard. Setelah SBUF menerima data dari port seri, bit RI akan bernilai ‘1’ dengan sendirinya, bit ini harus di-nol-kan dengan program agar bisa dipakai untuk memantau keadaan SBUF dalam penerimaan data berikutnya.
    Sub-rutin SerialIn berikut dipakai untuk menerima data seri, bisa dipakai untuk semua mode port seri. Baris 02 menunggu RI menjadi ‘1’, dimaksud untuk memastikan sudah ada data baru yang diterima pada SBUF. Pada baris 03 data pada SBUF diambil ke A. Agar RI bisa dipakai untuk memantau keadaan SBUF pada pengiriman data berikutnya, pada baris 04 RI di-nol-kan.
    01: SerialIn:
    02:    JNB RI,$   ; tunggu SBUF berisi data baru
    03:    MOV A,SBUF ; ambil data
    04:    CLR RI     ; pentanda data sudah diambil
    05:    RET

    Bit SMOD dalam Register PCON

    Gambar 3. Bit SMOD dalam Register PCON

Mode “0” Port Seri MCS51

UART merupakan standard yang dipakai untuk komunikasi data seri dengan komputer, komunikasi data seri dengan modem dan lain sebagainya.

Komunikasi data seri secara sinkron seperti mode 0, merupakan komunikasi data seri yang banyak dipakai untuk menghubungkan IC-IC digital dalam sebuah sistem, misalnya pada IC Serial EEPROM, cara ini belakangan menjadi makin populer karena rangkaiannya sederhana dan tidak makan tempat.

Dalam dunia digital, dikenal 3 macam teknik transmisi data seri secara sinkron untuk keperluan di atas, yang paling terkenal adalah teknik ciptaan Philips yang dinamakan sebagai I2C (Inter IC Communication), Motorola mengenalkan teknik yang dinamakan sebagai SPI (Serial Peripheral Interface) dan National Semiconductor menciptakan MicroWire.

Transmisi data seri yang dipakai pada mode 0, tidak sepadan dengan 3 teknik yang disebut di atas, tapi dengan perancangan yang cermat mode 0 ini bisa dihubungkan ke SPI, sehingga bisa dipakai untuk menghubungkan MCS51 dengan mikrokontroler Motorola MC68HC11.

Sinyal data seri sinkron yang ada pada kaki P3.0 dan P3.1, sesungguhnya murni merupakan sinyal yang biasa dipakai untuk mengendalikan shift-register, dengan demikian dengan menghubungkan shift register ke port seri, bisa menambah port input maupun port output dengan mudah.

Menambah Port Output MCS51

Rangkaian Gambar 4 merupakan rangkaian menambah port output 8 bit pada AT89C2051, meskipun demikian cara ini bisa dipakai pada AT89C51 tanpa perubahan apapun.

Penambahan Port Output 8 bit dengan 74LS164

Gambar 4. Penambahan Port Output 8 bit dengan 74LS164

Untuk keperluan menambah port output secara seri, yang diperlukan adalah serial in parallel out shift register, dalam rangkaian Gambar 1 dipakai IC 74LS164. Data seri dari P3.0 (kaki nomor 2) AT89C2051 dihubungkan ke input data seri A & B (kaki nomor 1 & 2) 74LS164, sinyal denyut (clock) pendorong data seri didapat dari kaki P3.1 (kaki nomor 3) AT89C2051, dihubungkan ke input CLK (kaki nomor 8) IC 74LS164.

Saat port seri mengirim data keluar dari AT89C2051, data seri ditempatkan pada kaki P3.0 dan kaki P3.1 mengeluarkan 8 pulsa sinyal denyut (clock) untuk mendorong data seri tersebut masuk ke 74LS164. Data seri tersebut diubah menjadi data paralel yang bisa didapat pada kaki QA sampai QH (kaki nomor 3 sampai 6 dan kaki nomor 10 sampai 13), namun data pada kaki-kaki ini berubah-rubah seirama dengan pergeseran data pada saat data dikirim, untuk keadaan tertentu hal ini sering-sering mengganggu dan tidak dikehendaki.

Untuk mengatasi hal ini dipakai IC 74HC574 Octal 3-state Non-inverting D Flip-flop, input 74HC574 (D1..D8) satu-per-satu dihubungkan ke output 74LS164 (QA..QH), setelah data selesai didorong dalam 74LS164, kaki P3.7 (kaki nomor 11) AT89C2051 mengeluarkan sinyal yang diterima 74HC574 pada kaki CLK (kaki nomor 11),   sinyal ini merupakan perintah bagi 74HC574 agar me-‘rekam’ data yang ada pada input-inputnya dan ditempatkan pada output-outputnya.

Rangkaian ini tidak memerlukan rutin persiapan (initialization routine), hal ini disebabkan karena setelah reset register SCON bernilai $00, yang artinya port seri bekerja dalam mode 0, dan seperti sudah dibahas diatas sebagai output port seri tidak memerlukan pengaturan khusus.

Rutin ExtraOutput pada Potongan Program 1 dipakai untuk mengeluarkan data 8 bit ke output 74HC574. Pengiriman data seri diawali dengan instruksi MOV SBUF,A pada baris 2, baris 3 menunggu sampai pengiriman data seri selesai, bit petanda (flag) TI dalam register SCON dikembalikan ke ‘0’ untuk keperluan pengiriman data berikutnya (baris 4), baris 5 sampai 7 membuat pulsa agar sinyal pada output 74LS164 direkam ke 74HC574.

Potongan Program 1

01:ExtraOutput:
02:   MOV SBUF,A
03:   JNB TI,A
04:   CLR TI
05:   CLR P3.7
06:   NOP
07:   SETB P3.7
08:   RET

Menambah Port Input MCS51

Rangkaian Gambar 2 merupakan rangkaian menambah port input 16 bit pada AT89C2051. Untuk keperluan menambah port input secara seri, yang diperlukan adalah parallel in serial out shift register, dalam rangkaian Gambar 2 dipakai 2 chip IC 74LS165. Data paralel ditempatkan pada input A sampai H (kaki 2 sampai 5 dan kaki 10 sampai 14) 74LS165, sebelum mengambil data AT89C2051 me-nol-kan sesaat kaki LD* (kaki 1) 74LS165, untuk merekam data pada input masuk ke shift register.

Setelah itu pada kaki P3.1 AT89C2051 mengambil data dari 74LS165 dengan cara mengeluarkan 8 pulsa sinyal denyut (clock) untuk mendorong data dalam shift register 74LS165 masuk ke AT89C2051 lewat kaki P3.2.

Rangkaian dalam Gambar 5 memakai 2 chip 74LS165 untuk membentuk port input 16 bit dengan cara menghubungkan kedua 74LS165 secara seri (kaki QH U2 dihubungkan ke kaki SER U3, kaki CLK U2 dan U3 dihubungkan jadi satu, demikian juga kaki LD* ).

Penambahan Port Input 16 bit dengan 74LS165

Gambar 5. Penambahan Port Input 16 bit dengan 74LS165

Pengiriman data seri mode 0 adalah 8 bit sekali pengiriman, dengan demikian untuk   mengambil data input 16 bit dari 2 chip 74LS165 dilakukan dalam dua kali pengambilan.

Potongan Program 2

01:ExtraInput:
02:   CLR   P3.7
03:   NOP
04:   SETB P3.7
05:   ACALL Input8bit
06:   MOV   R0,A
07:   ACALL Input8bit
08:   MOV   R1,A
09:   RET
10:;
11:Input8Bit:
12:   CLR   RI
13:   JNB   RI,$
14:   MOV   A,SBUF
15:   RET

Rutin ExtraInput pada Potongan Program 2 dipakai untuk mengambil data 16 bit dari input 2 chip 74HC165. Baris 2 sampai 4 me-nol-kan sesaat kaki LD* (kaki 1) 74LS165, kemudian mengambil 8 bit data yang pertama dan disimpan di R0 (baris 5 dan 6), 8 bit data yang kedua diambil dan disimpan ke R1 pada baris 7 dan 8.

Sub-rutin Input8bit pada baris 11 bertugas untuk mengambil data 8 bit. Proses pengambilan data dimulai dengan instruksi CLR RI pada baris 12, setelah instruksi ini AT89C2051 mengeluarkan 8 pulsa sinyal denyut pada kaki P3.2 untuk mendorong data 8 bit pada 74LS165 masuk kaki P3.0. Instruksi pada baris 13 menunggu sampai 8 bit pulsa denyut selesai dikirim, dan data diambil dengan instruksi MOV A,SBUF pada baris 14.

Sebelum memakai sub-rutin ExtraInput, terlebih dulu harus menjalankan instruksi SETB REN, agar port seri bisa berfungsi sebagai input.

Cara menghubungkan secara seri 2 shift register 74LS165 untuk memperoleh port input 16 bit, bisa pula dipakai untuk membangun port output 16 bit dengan 74LS164. Bahkan bila diperlukan input/output dengan jumlah bit lebih banyak, bisa dibuat rangkaian yang terdiri dari beberapa chip shift register.

Proses pengiriman data seri lebih lambat dibanding dengan pengiriman data paralel, tapi pengiriman data 8 bit yang dibicarakan di atas hanya memerlukan waktu 8 mikro-detik, dalam banyak keperluan masih bisa diterima penggunaan port seri MCS51 tersebut.

Title : Port Seri MCS51
Archive : Teori Mikrokontroler

You may also like, related Port Seri MCS51