Universal Asynchronous Transmitter/Receiver (UART)

Monday, December 5th, 2016 - Teori Mikrokontroler

UART merupakan salah satu sarana di dalam chip AT89C2051 yang sangat berharga, sehingga IC dengan 20 kaki ini bisa melakukan komunikasi seri asinkron dengan mudah.

MCS51 dilengkapi dengan sarana komunikasi data seri, sebagai anggota keluarga MCS51 AT89C2051 juga mempunyai sarana itu selengkapnya. Sarana komunikasi seri tersebut bisa bekerja dalam 4 macam mode, 1 mode bekerja sebagai sarana komunkasi seri sinkron, tiga lainnya merupakan sarana komunikasi seri asinkron.

Keempat macam mode kerja tersebut adalah :

  • Mode 0 – bekerja sebagai sarana komunikasi data seri sinkron, data seri dikirim dan diterima melalui kaki RxD, sedangkan kaki TxD dipakai untuk menyalurkan clock yang diperlukan komunikasi data sinkron. Data ditransmisikan per 8 bit dengan kecepatan transmisi data (Baud rate) tetap, sebesar 1/12 frekuensi kerja dari AT89C2051.
  • Mode 1 – mode ini dan 2 mode berikutnya merupakan sarana komunikasi seri asinkron. Data seri dikirim melalui kaki TxD, dan diterima dari kaki RxD. Data ditransmisikan per 10 bit, terdiri atas 1 bit Start (‘0’), 8 bit data dan 1 bit stop (‘1’). Kecepatan transmisi data (Baud Rate) ditentukan lewat Timer 1, bisa diatur untuk berbagai kecepatan.
  • Mode 2 – Data seri dikirim melalui kaki TxD, dan diterima dari kaki RxD. Data ditransmisikan per 11 bit, terdiri atas 1 bit Start (‘0’), 8 bit data, 1 bit data tambahan (bit ke 9) dan 1 bit stop (‘1’). Kecepatan transmisi data (Baud Rate) hanya bisa dipilih 1/32 atau 1/64 frekuensi kerja dari AT89C2051.
  • Mode 3 – Data seri dikirim melalui kaki TxD, dan diterima dari kaki RxD. Data ditransmisikan per 11 bit, terdiri atas 1 bit Start (‘0’), 8 bit data, 1 bit data tambahan (bit ke 9) dan 1 bit stop (‘1’). Sesungguhnya Mode 2 dan 3 sama persis, perbedaannya adalah kecepatan transmisi data (Baud Rate) mode 3 ditentukan lewat Timer 1, bisa diatur untuk berbagai kecepatan, persis sama dengan mode 1.

Dari keempat mode kerja yang ada, mode 1 adalah mode yang paling banyak dipakai, mode inilah yang setara dengan komunikasi seri asinkron dipakai pada PC maupun modem. Mode 3 setara dengan Mode 1, tapi mempunyai kemampuan untuk dipakai dalam komunikasi seri asinkron multiprosesor, yang lebih dikenal sebagai “multidrop communi­cation system”.

Mengatur UART Dalam AT89C2051

AT89C2051 mempunyai register khusus untuk pengiriman/penerimaan data seri dan mengatur tata kerja sarana komunikasi. Kedua register khusus itu merupakan bagian dari kumpulan register khusus di dalam AT89C2051 yang biasanya disebut sebagai SFR (Special Function Register), register-register khusus ini menempati sebagian area memori data internal.

Register khusus pertama bernama register SBUF (Serial Buffer Register), register ini ditempatkan di memori data internal nomor $99. Register SBUF diisi dengan perintah MOV SBUF,A (isi akumulator A di-copy-kan ke register SBUF), dalam hal ini register SBUF setara dengan input paralel dari shift register yang berfungsi sebagai pengubah data paralel menjadi data seri. Setelah instruksi MOV SBUF,A diterima AT89C2051, isi dari register SBUF akan dikirim keluar dari chip.

Isi dari register SBUF diambil dengan instruksi MOV A,SBUF (isi reguster SBUF di-copy-kan ke akumulator A), dalam hal ini register SBUF setara dengan output paralel dari shift register yang berfungsi sebagai pengubah data seri menjadi data paralel. Melaksanakan instruksi MOV A,SBUF berarti AT89C2051 menerima data seri yang dikirim oleh UART lain di luar chip.

Register khusus kedua bernama register SCON (Serial Control Register), register ini ditempatkan di memori data internal nomor $98. Kapasitas register SBUF dan SCON sebesar 8 bit, namun data 8 bit dalam register SBUF merupakan kesatuan data yang utuh, sedangkan masing-masing bit dalam register SCON mempunyai kegunaan yang berlainan. Gambar 1 memperlihatkan susunan bit dalam register SCON.

Susunan Register SCON,universal asynchronous transmitter/receiver (uart),uart mikrokontroler,uart mcs51,sistem uart,teori uart mikrokontroler,interface uart,konfigurasi uart,seting uart,menggunakan uart

Gambar 1. Susunan Register SCON

Meskipun register ini bernama Register Kontrol, tapi tidak semua bit dalam register SCON dipakai untuk meng-kontrol kerja sarana komunikasi data seri. Bit 3 sampai 7 (SCON.3 .. SCON.7) dipakai sebagai bit pengkontrol, sedangkan bit 0 sampai 2 (SCON.0 .. SCON.2) dipakai untuk memantau kerja sarana komunikasi data seri.

  • Bit RI (0), Receive Interupt Flag, merupakan bit petanda bahwa register SBUF berisi data yang diterima dari sarana komunikasi data seri yang lain. Bit RI menjadi ‘1’ kalau SBUF berisi data, jadi sebelum mengambil isi register SBUF harus dipastikan dulu RI sudah bernilai ‘1’ dengan instruksi JNB RI,* setelah data di register SBUF diambil, bit RI harus di-nol-kan dengan instruksi CLR RI.
  • Bit TI (1), Transmit Interupt Flag, merupakan bit petanda bahwa data yang diisikan ke SBUF sudah selesai dikirim. Bit TI menjadi ‘1’ kalau SBUF sudah kosong, jadi sebelum mengirim 1 byte data harus dipastikan dulu TI sudah bernilai ‘1’ dengan instruksi JNB TI,* baru data diisikan ke register SBUF, bit TI harus di-nol-kan dengan instruksi CLR TI.
  • Bit RB8 (2), Receive Bit 8, dipakai sebagai penampung bit ke 9 yang diterima dalam mode kerja 2 dan 3 (kapastias register SBUF hanya 8 bit, jadi harus ada tempat lain untuk menampung bit ke 9). Dalam mode kerja 1, RB8 berisikan bit Stop yang diterima, sehingga sehingga bisa dipakai untuk mendeteksi kesalahan pengiriman data (Framing Error). Dalam Mode kerja 0 RB8 tidak dipakai.
  • Bit TB8 (3), Transmit Bit 8, merupakan bit ke 9 yang dikirimkan dalam mode kerja 2 dan 3. Bit ini di-satu-kan dengan instruksi SETB TB8 dan di-nol-kan dengan isntruksi CLR TB8.
  • Bit REN (4), Receive Enable, dipakai untuk mengatur agar kaki RxD bisa dipakai untuk menerima data seri (dalam mode 0 kaki RxD dipakai untuk mengirim data dan menerima data). SETB REN menjadikan kaki RxD sebagai input penerima data, dan CLR REN menjadikan kaki RxD tidak bisa menerima data.
  • Bit SM2 (5), Serial Mode 2, dipakai untuk mengaktipkan fasilitas komunikasi multi-prosesor pada mode kerja 2 dan 3, jika SM2=’1’ maka bit RI hanya bisa menjadi ‘1’ kalau bit ke 9 yang diterima di RB8 adalah ‘1’. Dalam mode kerja 1, jika SM2=’1’ maka bit RI hanya bisa menjadi ‘1’ kalau bit Stop yang ditampung di RB8 bernilai ‘1’. Dalam mode kerja 0 SM2 harus =’0’.
  • Bit SM0 dan SM1 (7 dan SCON.6) merupakan kombinasi dua bit yang nilainya dipakai untuk menentukan mode kerja dari sarana komunikasi data seri AT89C2051. Kalau SM1 diberi ‘0’ dan SM0 diberi ‘1’, maka sarana komunikasi data seri ini akan bekerja sebagai UART pada umumnya dengan kecapatan transmisi (Baud rate) yang bisa diatur dan format data 8N1 (8 bit data, No Parity, 1 bit Stop).

Setelah AT89C2051 di-reset, semua bit dalam register SCON bernilai ‘0’, jadi sebelum memakai sarana komunikasi data ini, terlebih dulu harus mengatur isi register SCON, sesuai dengan tata kerja yang diharapkan. Instruksi MOV SBUF,#%01010000 mengisi SM1 dan SM0 dengan ‘01’ (mode kerja 1), SM2=’0’ (tidak bekerja sebagai kumunikasi multi-prosesor), REN=’1’ (mengaktipkan kaki RxD sebagai penerima data) dan bit sisanya diisi dengan ‘0’ karena memang tidak diperlukan, instruksi ini menjadikan sarana komunikasi data seri AT89C2051 menjadi sebuah UART yang bekerja dengan format data 8N1.

Potongan Program 1 merupakan sub-rutin pengiriman dan penerimaan data seri menggunakan UART dalam AT89C2051. Dalam sub-rutin KirimDataSeri, sebelum data dikirim melalui SBUF di baris 4, pada baris 2 dipastikan dulu bit TI=’1’, selama bit TI=’0’ AT89C2051 akan menunggu di baris 2. Baris 3 me-nol-kan TI karena TI tidak otomatis menjadi ‘0’.

Dalam sub-rutin TerimaDataSeri, sebelum mengambil dari dari SBUF di baris 9, AT89C2051 menunggu RI menjadi ‘1’ di barus 8, setelah data diambil RI harus di-nol-kan kembali, hal ini dilakukan di baris 10.

Potongan Program 1 Sub-rutin kirim/terima data

01: KirimDataSeri:
02:    JNB TI,*
03:    CLR TI      
04:    MOV SBUF,#’A’
05:    RET
06: ;
07: TerimaDataSeri:
08:    JNB RI,*
09:    MOV A,SBUF
10:    CLR RI      
11:    RET

Mengatur Kecepatan Transmisi UART MCS51

Kecepatan transmisi (Baud Rate) merupakan suatu hal yang amat penting dalam komunikasi data seri asinkron, mengingat dalam komunikasi data seri asinkron clock tidak ikut dikirimkan, sehingga harus diusahakan bahwa kecepatan transmisi mengikuti standard yang sudah ada.

Dalam AT89C2051, clock untuk transmisi data dibangkitkan dengan sarana Timer 1 seperti yang digambarkan dakan diagram Gambar 2. Untuk keperluan ini, Timer 1 dioperasikan sebagai 8 bit auto reload timer (mode 2), artinya TL1 bekerja sebagai timer 8 bit menerima clock dari osilator kristal yang frekuensinya sudah dibagi 12 terlebih dulu, setiap kali pencacah (counter) nilainya menjadi 0 maka nilai yang sebelumnya sudah disimpan di TH1 secara otomatis diisikan lagi ke TL1, sehingga TL1 akan menghasilkan clock yang frekuensinya diatur oleh TH1, clock ini berikutnya dibagi lagi dengan 32 sebelum dipakai sebagai clock untuk UART. Hubungan frekuensi pada sistem tersebut dinyatakan dengan persamaan berikut :Hubungan frekuensi pada sistem

Kalau kecepatan transmisi sudah ditentukann dan frekuensi kristal sudah dipastikan, maka nilai yang disimpan di TH1 bisa dihitung berdasarkan persamaan berikut :

nilai yang disimpan di TH1

Dalam persaman di atas, K adalah konstanta yang nilainya 1 atau 2, tergantung pada nilai yang tersimpan di bit SMOD dalam register PCON. Jika SMOD=’0’ K bernilai 1 dan K akan bernilai 2 kalau SMOD=’1’. Perlu dicacat, setelah AT89C2051 di-reset, SMOD akan bernilai ‘0’, artinya jika tidak diatur lebih lanjut K bernilai 1.

Untuk mendapatkan kecepatan transmisi yang umum dipakai dalam komunikasi data seri asinkron (1200 Baud, 2400 Baud, 4800 Baud, 9600 Baud dan 19200 Baud), dari persamaan di atas bisa diturunkan ternyata frekuensi kristal yang paling tepat adalah 11.059 MHz. Meskipun angka ini agak aneh, tapi karena banyak dipakai kristal dengan frekuensi ini amat mudah diperoleh dipasar.

Karena kristal 11.059 MHz dipilih agar bisa membangkitkan kecepatan transmisi data seri standard, dalam sistem berbasis AT89C2051 yang tidak menggunakan sarana komunikasi data seri asinkron lebih baik dipilih kristal dengan frekuensi 12 MHz, sehingga clock untuk timer bisa merupakan frekuensi bulan 1 MHz.

Potongan Program 2 merupakan sub-rutin yang dipakai untuk mengatur UART agar bekerja dengan format data 8N1 dan kecepatan transmisi 9600 Baud, frekuensi kristal yang dipasangkan ke AT89C2051 adlah 11.059 MHz.

Baris 2 sampai 4 dipakai untuk mengatur kerja dari Timer 1. Timer 1 dibuat menjadi 8 bit auto-reload (baris 2, hanya bit 4..7 yang dipakai untuk mengatur Timer1, bit 0..3 dipakai untuk mengatur Timer 0). Nilai yang dipakai untuk mengatur frekuensi clock UART disimpan di TH0 pada baris 3. Baris 4 berfungsi untuk mengaktipkan Timer1.

Baris 5 mengatur agar UART bekerja dengan format data 8N1.

Potongan Program 2 – Mengatur UART

01: MengaturUART:
02:    MOV   TMOD,#%00100000   T1 = 8 bit auto-reload
03:    MOV   TH1,#$FD          Timer1 reload value
04:    SETB  TR1               Turn Timer 1 On
05:    MOV   SCON,#%01010010   Mode 1, REN, TXRDY, RXEMPTY
06:    RET

Sistem pembangkit Clock untuk UART

Gambar 2. Sistem pembangkit Clock untuk UART

Title : Universal Asynchronous Transmitter/Receiver (UART)
Archive : Teori Mikrokontroler

You may also like, related Universal Asynchronous Transmitter/Receiver (UART)