Universal Asynchronous
Transmitter/Receiver (UART)
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
communication 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.
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
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 :
Kalau kecepatan transmisi sudah ditentukann dan frekuensi kristal sudah dipastikan, maka nilai yang disimpan di TH1 bisa dihitung berdasarkan persamaan berikut :
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,#100000 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
02: MOV TMOD,#100000 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
0 comments:
Post a Comment