Selain timer, fitur dan fasilitas yang terdapat dalam mikrokontroler AVR yang sering digunakan adalah USART. USART (Universal Synchronous Asynchronous serial Receiver and Transmitter) merupakan protokol komunikasi serial yang terdapat pada mikrokontroler AVR. Dengan memanfaatkan fitur ini kita dapat berhubungan dengan “dunia luar”. Dengan USART kita bisa menghubungkan mikrokontroler dengan PC, hape, GPS atau bahkan modem, dan banyak lagi peralatan yang dapat dihubungkan dengan mikrokontroler dengan menggunakan fasilitas USART.
Komunikasi dengan menggunakan USART dapat dilakukan dengan dua cara yaitu dengan mode sinkron dimana pengirim data mengeluarkan pulsa/clock untuk sinkronisasi data, dan yang kedua dengan mode asinkron, dimana pengirim data tidak mengeluarkan pulsa/clock, tetapi untuk proses sinkronisasi memerlukan inisialisasi, agar data yang diterima sama dengan data yang dikirimkan. Pada proses inisialisasi ini setiap perangkat yang terhubung harus memiliki baud rate (laju data) yang sama. Pada mikrokontroler AVR untuk mengaktifkan dan mengeset komunikasi USART dilakukan dengan cara mengaktifkan register2 yang digunakan untuk komunikasi USART. Register2 yang dipakai antara lain:

UDR : merupakan register 8 bit yang terdiri dari 2 buah dengan alamat yang sama, yang digunakan sebagai tempat untuk menyimpan data yang akan dikirimkan (TXB) atau tempat data diterima (RXB) sebelum data tersebut dibaca.

UCSRA: merupakan register 8 bit yang digunakan untuk mengendalikan mode komunikasi USART dan untuk membaca status yang sedang terjadi pada USART.
Bit RXC [status]—> akan “1″ bila ada data di UDR (RXB) yang belum terbaca. Dapat digunakan untuk sumber interupsi, dengan mengeset RXCIE
Bit TXC[status]—> akan “1″ bila ada data di UDR (TXB) yang sudah dikirimkan. Dapat digunakan untuk sumber interupsi, dengan mengeset TXCIE
Bit UDRE[status]—>akan “1″ bila UDR siap untuk menerima data baru.
Bit U2X[kendali]—> diisi “1″ bila kecepatan transmisi data ingin dinaikkan 2kali.
Bit MPCM[kendali]—>digunakan bila ingin menggunakan komunikasi multiprosesor.

UCSRB: merupakan register 8 bit yang digunakan untuk mengendalikan mode komunikasi USART dan untuk membaca status yang sedang terjadi pada USART.
Bit RXCIE[kendali]—>digunakan untuk mengaktifkan interupsi yang bersumber dari RXC.
Bit TXCIE[kendali]—>digunakan untuk mengaktifkan interupsi yang bersumber dari TXC.
Bit UDRIE[kendali]—>digunakan untuk mengaktifkan interupsi yang bersumber dari UDRE.
Bit RXEN[kendali]—>digunakan untuk mengaktifkan receiver.
Bit TXEN[kendali]—>digunakan untuk mengaktifkan transmitter.
Bit UCSZ2[kendali]—>digunakan untuk menentukan panjang data yang dikirim dalam sekali. Digunakan bersama2 dengan UCSZ1,UCSZ0 pada UCSRC.
Bit RXB8[status]—>digunakan sebagai penampung data ke 9 pada penerimaan data dengan 9 bit
Bit TXB8[status]—>digunakan sebagai penampung data ke 9 pada transmisi data dengan 9 bit

UCSC: merupakan register 8 bit yang digunakan untuk mengendalikan mode komunikasi USART dan untuk membaca status yang sedang terjadi pada USART.
Bit URSEL[kendali]—>digunakan untuk memilih register pada UCSRC dan UBRRH. Dua register ini memiliki alamat yang sama, sehingga untuk proses penulisan memerlukan bantuan URSEL. Bila URSEL=1, maka register yang diisi adalah UCSRC, sedangkan bila URSEL=0, register yang diisi adalah UBRRH. Tidak semua mikrokontroler AVR memiliki URSEL, karena ada yang memiliki register UBRRH dan UCSRC yang beda alamat
Bit UMSEL[kendali]—>bila “1″, maka mode yang dipilih adalah asinkron, “0″=sinkron
Bit USBS[kendali]—>bila “1″, maka stop bit berjumlah 2 bit
Bit UCSZ1,UCSZ0[kendali]—>bersama2 UCSZ2 digunakan untuk menentukan jumlah bit yang akan dikirimkan dalam sekali pengiriman data.

UBRRL,H: merupakan register 16 bit yang digunakan untuk mengatur laju data (baud rate) pada saat mode komunikasi asinkron.
Contoh USART untuk komunikasi asinkron antara mikrokontroler ATMEGA8535 dengan PC lewat hyperterminal dengan baud rate 19200 bps, 8 bit data, 1 bit stop, dengan menggunakan kristal 11,0592 MHz, adalah seperti dibawah ini:
.include”m8535def.inc”
.def tmp = r16
.def txbyte = r17
.def rxbyte = r18
.equ fclock = 11059200
.equ baud_rate = 19200
.equ ubbr_value = (fclock / (16*baud_rate)) – 1
.org 0×0000
rjmp main
main:
ldi tmp,low(ramend)
out spl,tmp
ldi tmp,high(ramend)
out sph,tmp
ldi r16,0xff
out ddrb,r16
out PORTB,r16
rcall init_usart
cbi portb,0
loop:
ldi zl,low(2*msg)
ldi zh,high(2*msg)
load:
lpm
mov txbyte,r0
cpi txbyte,0
breq done
rcall usart_tx
inc zl
rjmp load
done:
rjmp done
;=============
; usart init
;=============
;=====================================
; konfigurasi usart
;=====================================
init_usart:
ldi tmp,high(ubbr_value) ; Set baud rate
out UBRRH, tmp
ldi tmp,low(ubbr_value)
out UBRRL, tmp
ldi tmp, (1<<RXEN)|(1<<TXEN); Enable Receiver and Transmitter
out UCSRB,tmp
ldi tmp, (1<<URSEL)|(3<<UCSZ0); Set frame format: 8data, 1stop bit
out UCSRC,tmp
ret
;=====================
; usart transmit data
;=====================
usart_tx:
sbis UCSRA,UDRE ; Wait for empty transmit buffer
rjmp usart_tx
out UDR,txbyte ; Put data into buffer, sends the data
ret
;======================
; usart receive data
;======================
usart_rx:
sbis UCSRA, RXC ; Wait for data to be received
rjmp usart_rx
in rxbyte, UDR ; Get and return received data from buffer
ret
msg:
.db “********** Welcome to ATMEGA8535 USART Test **********”,13,10,0
Pada program diatas untuk mengetahui apakah mikrokontroler bisa komunikasi dengan PC, bisa dilihat dengan bantuan hyperterminal. Agar bisa komunikasi, maka pada hyperterminal perlu mengeset baud rate seperti pada gambar dibawah:

Setelah mengeset, maka akan muncul layar seprti pada gambar dibawah:

Sebelum ada perangkat yang terdeteksi maka hyperterminal akan terus scanning baud rate sampai ditemukan komunikasi dengan baud rate yang sesuai. Bila mikrokontroler yang dipakai mengeluarkan data dengan baud rate yang sesuai dengan PC, maka akan mengeluarkan text seperti pada gambar dibawah:

Perlu diperhatikan, seringkali kita lupa untuk mengeset fusebit pada mikrokontroler, sehingga walaupun program sudah benar, namun pada hyperterminal tidak tertampil text seperti pada program. Untuk dapat berkomunikasi dengan menggunakan kristal 11.0592 MHz, maka fusebit yang digunakan adalah seperti pada gambar dibawah:

Mei 12, 2008 pukul 2:21 pm |
Numpang tanya,
Berdasarkan datasheet 8535 terdapat Multi-processor Communication Mode, apakah bisa satu master berkomunikasi ke beberapa slave (misal 4 slave), setting hardware adalah Tx master terhubung dengan Rx Slave (4 buah Rx slave), dan ini komunikasi satu arah saja, yaitu dari master ke slave.
Terimakasih.
Mei 13, 2008 pukul 12:40 pm |
Ya kemarin buru2 post koment, eh ternyata udah ada. Penjelasannya sudah cukup lengkap, Terimakasih banyak.
Salam.
Agustus 5, 2008 pukul 11:33 pm |
mas, om, pak..
nanya ya..
kl dari matlab/simulink pengen ngirim data(float) ke avr, terus datanya diolah di avr, lalu hasilnya dibalikin ke matlab lagi, tau gak ya caranya?
Agustus 13, 2008 pukul 2:10 am |
ok
thanx
Desember 18, 2008 pukul 2:08 pm |
mas saya mo tanya.
klo usart di hyperteminal; satu huruf aja yang tampil. itu juga bukan huruf yang kita ketik.
klo tau pemecahannya boleh tau apa masalahnya . terima kasih
aku pernah ngalami masalah seperti itu. itu terjadi karena baud rate antara PC dan mikrokontroler tidak sama
Desember 28, 2008 pukul 10:47 pm |
mau nanya source code komunikasi multiprosesor mikro dengan mikro dengan bahasa C, soalnya saya pake codevision, tolong dikirim ke email saya ya mas. terima kasih bantuannya
Agustus 10, 2009 pukul 10:51 pm |
jika mau ngirim data mikro to mikro secara serial dengan resolusi 10 bit bgaimana ….. mohon penjelasannya….atau kirim ke email saya…. terima kasih atas bantuannya