Anda di halaman 1dari 14

PORT SERIAL MIKROKONTROLLER

Posted by iswanto AVR ATMega8535 memiliki 4 buah register I/O yang berkaitan dengan komunikasi memakai UART, yaitu UART I/O Data Register (UDR), UART Baud Rate Register (UBRR), UART Status Register (USR) dan UART Control Register (UCR).Untuk lebih jelasnya klik disini

BAB VI PORT SERIAL MIKROKONTROLLER


KOMUNIKASI SERIAL DENGAN UART
AVR ATMega8535 memiliki 4 buah register I/O yang berkaitan dengan komunikasi memakai UART, yaitu UART I/O Data Register (UDR), UART Baud Rate Register (UBRR), UART Status Register (USR) dan UART Control Register (UCR).

REGISTER-REGISTER PORT SERI 6.2.1. REGISTER DATA I/O UART (UDR)


Proses pengiriman data secara serial dapat dimulai setelah UDR diberi karakter data. Pada sisi penerima, UART memiliki buffer sehingga UDR dapat dibaca ketika sebuah data baru sedang digeser masuk.

6.2.2. REGISTER BAUD RATE UART (UBRR)


UBRR digunakan untuk menentukan clock yang dibangkitkan oleh baud rate generator. Nilai baud rate ditentukan dengan mengisi UBRR sesuai persamaan 8.1

UBRR =

fclock 1 16 * baud

(8.1)

Misal, diinginkan baud rate sebesar 9600 bps. Dengan kristal 11.059.200 Hz maka register UBRR akan bernilai 71.

6.2.3. REGISTER STATUS UART (USR)


Register USR menyimpan berbagai flag status seperti interupsi, overflow, dan framing error. Susunan bit register USR ditunjukkan dalam gambar 8.1.
bit 7 RXC 6 TXC 5 UDRE 4 FE 3 OR 2 1 0 -

Gambar 6.1. Register status UART

Penjelasan bit-bit register USR adalah sebagai berikut 1. RXC (Receive Complete) ; bernilai 1 otomatis setelah UART menerima sebuah karakter secara lengkap, 2. TXC (Transmit Complete) ; bernilai 1 jika sebuah karakter telah selesai digeser keluar dari register geser kirim, 3. UDRE (UART Data Register Empty) ; bernilai 1 jika UDR kosong, 4. FE (Framing Error) ; bernilai 1 jika Stop Bit tidak diterima dengan benar, yaitu jika Stop Bit terbaca 0, 5. OR (Overrun) ; bernilai 1 jika ada karakter yang dipindahkan dari register geser terima ke UDR sebelum karakter yang diterima sebelumnya dibaca.

6.2.4. REGISTER KONTROL UART (UCR)

Register UCR mengendalikan berbagai fungsi penerima dan pengirim, serta interupsinya. Susunan bit register UCR ditunjukkan dalam gambar 8.2.
bit 7 RXCIE 6 TXCIE 5 UDRIE 4 RXEN 3 TXEN 2 CHR9 1 RXB8 0 TXB8

Gambar 6.2. Register kendali UART

Penjelasan bit-bit register UCR adalah sebagai berikut 1. RXCIE (Receive Complete Interrupt Enable) ; jika bernilai 1, UART akan membangkitkan interupsi ketika sebuah karakter selesai diterima, 2. TXCIE (Transmit Complete Interrupt Enable) ; bernilai 1 setelah karakter terkirim dan membangkitkan interupsi, 3. UDRIE (UART Data Register Empty Interrupt Enable) ; jika bernilai 1, sebuah interupsi terjadi ketika UDR kosong (bit UDRE bernilai 1), 4. RXEN (Receiver Enable) ; jika bernilai 1, penerima UART diaktifkan dan pin RxD menjadi pin input yang terhubung ke UART, 5. TXEN (Transmitter Enable) ; jika bernilai 1, pengirim UART diaktifkan dan pin TxD menjadi pin output dari pengirim UART, 6. CHR9 (9-Bit Characters) ; jika bernilai 1, ukuran karakter yang dikirim menjadi 9bit, dan bit ke-9 berada pada bit RXB8 dan TXB8, 7. RXB8 (Receive Data Bit 8) ; jika CHR9 bernilai 1, bit ini adalah bit ke-9 dari data yang diterima, 8. TXB8 (Transmit Data Bit 8) ; jika CHR9 bernilai 1, bit ini adalah bit ke-9 dari data yang dikirim, jadi TXB8 harus diisi sebelum pengiriman.

INISIALISASI USART
Dalam proses inisialisasi maka ada beberapa buah register yang perlu ditentukan nilainya yaitu : 1. UBRR (USART Baud Rate Register). 2. UCSRB (USART Control and Status Register B). 3. UCSRC (USART Control and Status Register C). UBRR merupakan register 16 bit yang berfungsi untuk melakukan penentuan kecepatan transmisi data yang akan digunakan. UBRR dibagi menjadi dua yaitu UBRRH dan UBRRL seperti pada gambar 8.3

Gambar 6.3. Register UBRR

Bit penyusunnya dapat dijelaskan sebagai berikut : a. URSEL merupakan bit pemilih antara akses UBRR dan UCSRC. Hal ini disebabkan karena keduanya menempati lokasi yang sama. Untuk akses UBRR maka bit ini bernilai 0. b. UBRR[11..0] merupakan bit penyimpan konstanta kecepatan komunikasi serial.UBRRH menyimpan 4 bit tertinggi data seting baud rate dan UBRRL menyimpan 8 bit sisanya. Data yang dimasukkan ke UBRRH dan UBRRL dihitung menggunakan rumus sesuai tabel 2.2. U2X merupakan bit pada register UCSRA.

Tabel 6.1 Rumus penghitungan nilai UBRR untuk berbagai mode operasi
Mode operasi Asinkron mode kecepatan normal (U2X = 0) Asinkron mode kecepatan ganda (U2X = 1) Sinkron Rumus nilai UBRR

UCSRB merupakan register 8 bit pengatur aktivasi penerima dan pengirim USART. Memiliki komposisi seperti gambar 8.4.

Gambar 6.4. Register UCSRB

Bit penyusunnya dapat dijelaskan sebagai berikut : a. RXCIE mengatur aktivasi interupsi penerimaan data serial. Bernilai awal 0 sehingga proses penerimaan data berdasar pada sistem pooling. Jika bernilai 1 maka jika bit RXC pada UCSRA bernilai 1, interupsi penerimaan data serial akan dieksekusi. b. TXCIE mengatur aktivasi interupsi pengiriman data serial. Bernilai awal 0. Jika bernilai 1 maka jika bit TXC pada UCSRA bernilai 1, interupsi pengiriman data serial akan dieksekusi.

c. UDRIE mengatur aktivasi interupsi yang berhubungan dengan kondisi bit UDRE pada UCSRA. Bernilai awal 0. Jika bernilai 1 maka interupsi akan terjadi jika bit UDRE bernilai 1. d. RXEN merupakan bit aktivasi penerima serial ATMEGA8535. Bernilai awal 0. Jika bernilai 1 maka penerima data serial diaktifkan. e. TXEN merupakan bit aktivasi pengirim serial ATMEGA8535. Bernilai awal 0. Jika bernilai 1 maka pengirim data serial diaktifkan. f. UCSZ2 bersama dengan bit UCSZ1 dan UCSZ0 di register UCSRC menentukan ukuran karakter serial yang dikirimkan. Pada saat awal maka ukuran karakter diset pada 8 bit. Detail nilai bit-bit ini seperti pada tabel 6.2. Tabel 6.2 Penentuan ukuran karakter
UCSZ[2..0] 000 001 010 011 100 110 111 Ukuran karakter dalam bit 5 6 7 8 Tidak dipergunakan 9

UCSRC merupakan register 8 bit yang dipergunakan untuk mengatur mode dan kecepatan komunikasi serial yang dilakukan. Memiliki komposisi seperti gambar 6.5.

Gambar 6.5. Register UCSRC

Bit penyusunnya dapat dijelaskan sebagai berikut : a. URSEL merupakan bit pemilih akses antara UCSRC dan UBRR. Bernilai awal 1 sehingga secara normal akan selalu mengakses register UCSRC. b. UMSEL merupakan bit pemilih mode komunikasi serial antara sinkron dan asinkron. Bernilai awal 0 sehingga modenya asinkron. Jika bernilai 1 maka modenya sinkron. c. UPM[1..0] merupakan bit-bit pengatur paritas. Bernilai awal 00 sehingga paritas tidak dipergunakan. Detail nilainya dapat dilihat pada tabel 6.3.

Tabel 6.3 Penentuan mode paritas


UPM[1..0] 00 01 10 11 Mode paritas Tidak aktif Tidak digunakan Paritas genap Paritas ganjil

d. USBS merupakan bit pemilih ukuran bit stop. Bernilai awal 0 sehingga jumlah bit stop yaitu 1 bit. Jika bernilai 0 maka jumlah bit stop yaitu 2 bit. e. UCSZ1 dan UCSZ0 merupakan bit pengatur jumlah karakter serial. f. UCPOL merupakan bit pengatur hubungan antara perubahan data keluaran dan data masukan serial dengan clock sinkronisasi. Hanya berlaku untuk mode sinkron. Untuk mode asinkron bit ini diset 0.

MENGIRIM DATA MELALUI PORT SERIAL


Proses pengiriman data serial dilakukan per byte data dengan menunggu register UDR yang merupakan tempat data serial akan disimpan menjadi kosong

sehingga siap ditulis dengan data yang baru. Proses ini menggunakan bit yang ada pada register UCSRA, yaitu bit UDRE (USART Data Register Empty). Bit UDRE merupakan indikator kondisi register UDR. Jika UDRE bernilai 1 maka register UDR telah kosong.

MENERIMA DATA MELALUI PORT SERIAL


Proses penerimaan data serial diakukan dengan mengecek nilai bit RXC (USART Receive Complete) pada register UCSRA. RXC akan bernilai satu jika ada data yang siap dibaca di buffer penerima, dan bernilai nol jika tidak ada data pada buffer penerima. Jika penerima USART dinonaktifkan maka bit ini akan selalu bernilai nol.

RANGKAIAN SERIAL MIKROKONTROLLER


Rangkaian berikut digunakan untuk interfacing Led dengan port serial. Rangkaian tersebut, sebagai konverter dari serial ke pararel. Berikut adalah rangkaian serial led driver yang akan kita hubungkan pada port serial. Rangkaian Led Driver Serial menggunakan Microcontroller ATMEGA8535 yang dihubungkan ke port serial dengan menggunakan IC RS232 Rangkaian Serial LED Driver ini akan mendeteksi setiap pengiriman data karakter dari port serial computer.

C 1 S W 1 C 3 1 0 0 n F

2 2

p F

S V T C

X 1 C 2 2 2 p F

C1 1 1 1 1 1 1 1 1 1 2

1 2 3 4 5 6 7 8 9

0 1 2 3 4 5 6 7 8 9 0

1 4 0 P B 0 ( X C K /A T 0 0 ( ) A D3 9 C P P B 1 ( T 1 ) P A 1 ( A D3 8 C P B 2 ( I N T P 2 A / A2 I( N D30 7 C A ) P B 3 ( O C P 0 A/ A 3 I ( NA 13 ) 6 C D P B 4 ( S S )P A 4 ( A D3 5 C P B 5 ( M O P S A I ) 5 ( A D3 4 C P B 6 [ M I S P O A ) 6 ( A D3 3 C P B 7 [ S C PK A) 7 ( A D3 2 C R E S E T A R E 3F1 V C C A G N 3 D0 G N D A V C 2C 9 X T A L 2 P C 7 ( T O 2 S8 X T A L 1 P C 6 ( T O 2 S7 P D 0 ( R X D ) P C 52 6 P D 1 ( T X D ) P C 42 5 P D 2 ( I N T 0 ) P C 32 4 P D 3 ( I N T 1 ) P C 22 3 P D 4 ( O C P1 B ) 1 ( S 2 D 2 C P D 5 ( O C P AC ) 0 ( S 2 C 1 1 P D 6 ( I C P P) D 7 ( O C A T M E G V C C A 8 5 3 5

0 1 2 3 4 5 6 7 V C C 2 1

) ) ) ) ) ) ) ) C ) ) C

A ) L ) 2 )

1 1 1 2 T 1 I N 1 0 R 1 O T 2 I N 9 R 2 O 1 u F C 5 + 5 1 u F C 9 + 1 6 6 C V V 2 1 6 4 C V 2 +

U T T R R T 2 T 1 C

U U

8 2 I N 3 R X 1 1 1 I N 7 O U1 4T T X 1 O U T + 11 u C F 4 + 1 6 V H

J 1 2 3

VC C

16

C G N D M A V

3 1 + X 2 2 3 1 u 2 C + 8 F 1 6 V

Gambar 6.6. Hasil pemasangan komponen rangkaian serial mikrokontroller

PEMROGRAMAN PORT SERIAL MIKROKONTROLLER PEMROGRAMAN MENGIRIM DATA


Setelah membuat rangkaian serial mikrokontroller dan menghubungkan ke komputer, maka sekarang saatnya Anda membuat program yang digunakan untuk mengirim data serial. Program sebagai berikut ini

'-------------------------------------------------------'Program Bab 8.1 Serial Port Kirim data

15

'-------------------------------------------------------'-------------------------------------------------------'DEKLARASI HEADER '-------------------------------------------------------$regfile = "8535def.dat" '-------------------------------------------------------'DEKLARASI CRITAL '-------------------------------------------------------$crystal = 12000000 '-------------------------------------------------------'DEKLARASI Baudrate '-------------------------------------------------------$baud = 9600 '-------------------------------------------------------'Rutin utama '-------------------------------------------------------Print "Selamat Datang Mas Iswanto" End

PEMROGRAMAN MENGIRIM DAN MENERIMA DATA Setelah membuat dan menjalankan program mengirim data serial, maka sekarang saatnya Anda membuat program kedua yang digunakan untuk program mengirim dan menerima data serial. Program sebagai berikut ini

'-------------------------------------------------------'Program Bab 8.2 Serial Port '-------------------------------------------------------'--------------------------------------------------------

'DEKLARASI HEADER '-------------------------------------------------------$regfile = "8535def.dat" '-------------------------------------------------------'DEKLARASI CRITAL '-------------------------------------------------------$crystal = 12000000 '-------------------------------------------------------'DEKLARASI Baudrate '-------------------------------------------------------$baud = 9600 '-------------------------------------------------------'DEKLARASI VARIABEL '-------------------------------------------------------Dim Data1 As String * 50 Print "Selamat Datang Mas Iswanto" '-------------------------------------------------------'Rutin utama '-------------------------------------------------------Do Print "Tekan Sembarang tombol" Input Data1 Print "Tunggu 100 ms" Waitms 100 Print Data1 Loop End

PEMROGRAMAN MENJALANKAN LED DENGAN KOMPUTER Setelah membuat dan menjalankan program program mengirim dan menerima data serial, maka sekarang saatnya Anda membuat program ketiga yang digunakan untuk mengeser LED dengan terminal komputer. Program sebagai berikut ini
'-------------------------------------------------------'Program Bab 8.3 Serial Port '-------------------------------------------------------'--------------------------------------------------------

'DEKLARASI HEADER '-------------------------------------------------------$regfile = "8535def.dat" '-------------------------------------------------------'DEKLARASI CRITAL '-------------------------------------------------------$crystal = 12000000 '-------------------------------------------------------'DEKLARASI Baudrate '-------------------------------------------------------$baud = 9600 '-------------------------------------------------------'DEKLARASI VARIABEL '-------------------------------------------------------Dim Data1 As Byte Dim A As Byte '-------------------------------------------------------'DEKLARASI SUB RUTIN '-------------------------------------------------------Declare Sub Kiri() Declare Sub Kanan() Declare Sub Kedip() Declare Sub Diam() '-------------------------------------------------------'DEKLARASI PORT MIKROKONTROLLER '-------------------------------------------------------Config Portc = Output Print "Selamat Datang Mas Iswanto" '-------------------------------------------------------'RUTIN UTAMA '-------------------------------------------------------Do Print "Pilih Tombol Berikut ini" Print "1. Geser Kiri Led" Print "2. Geser Kanan Led" Print "3. Led Berkedip" Input Data1 Print "Tunggu 100 ms" Waitms 100 Enable Interrupts Select Case Data1 Case 1 : Call Kiri() Case 2 : Call Kanan() Case 3 : Call Kedip() Case Else : Call Diam() End Select Print "Anda Memilih No" ; Data1 Loop

End '-------------------------------------------------------' Sub Rutin Geser Kiri '-------------------------------------------------------Sub Kiri() Led = 1 For A = 0 To 7 Rotate Led , Left , 1 Portc = Led Waitms 100 Next End Sub '-------------------------------------------------------' Sub Rutin Geser Kanan '-------------------------------------------------------Sub Kanan() Led = 128 For A = 0 To 7 Rotate Led , Right , 1 Portc = Led Waitms 100 Next End Sub '-------------------------------------------------------' Sub Rutin Berkedip '-------------------------------------------------------Sub Kedip() For A = 0 To 2 Portc = 255 Waitms 50 Portc = 0 Next End Sub '-------------------------------------------------------' Sub Rutin Led Padam '-------------------------------------------------------Sub Diam() Portc = 255 End Sub