• Tidak ada hasil yang ditemukan

Operasi Port Serial

Dalam dokumen BAB II TEORI DASAR PENUNJANG (Halaman 24-33)

Satu dari sekian banyak fitur (fasilitas) yang dimiliki mikrokontroler AT89S51 adalah fasilitas komunikasi data serial UART (Universal Asynchronous Receiver Transmiter), atau dengan kata lain dikenal sebagai port serial. Secara nyata AT89S51 memiliki port serial terintegrasi yang berarti bahwa seorang desainer menjadi begitu mudahnya untuk membaca dan menulis suatu data pada port serial. Jika fasilitas ini tidak tersedia, maka penulisan satu byte data secara serial akan nampak suatu proses yang menyulitkan dimana saluran serial dibuat untuk menjadi ‘1’ atau ‘0’ sesuai dengan data yang akan dikirim bit per bit. Belum lagi pengaturan kapan bit start, bit stop dan bit parity harus dikirim pada waktu yang tepat.

Dengan adanya fasilitas port serial maka programmer tidak perlu lagi memperhatikan ketiga bit (start, stop dan parity) tersebut. Sebagai penggantinya, programmer perlu untuk mensetting mode operasi port serial dan menentukan

baud rate-nya (kecepatan transfer bit data dalam satu detik). Begitu di-set maka

AT89S51 siap untuk mengirim atau menerima aliran data serial. Yaitu dengan cara menulis ke dalam register SBUF untuk mengirim data atau membaca register

SBUF bila akan membaca data serial yang diterima. AT89S51 secara otomatis

memberitahu bahwa dia telah selesai menerima 1 byte data atau dia telah selesai mengirim 1 byte data. Dengan demikian program dapat dengan segera melanjutkan proses yang diperlukan setelah pengiriman/penerimaan data tersebut dilakukan.

 Setting Mode Port Serial

Langkah pertama untuk dapat menggunakan fasilitas UART pada AT89S51 adalah men-settingnya. Hal ini diperlukan untuk memberitahu kepada AT89S51 ada berapa banyak bit dalam satu byte data yang akan dikirim/diterima, dan berapa besar baud rate yang akan digunakan.

Pertama, mari perhatikan register SCON (Serial Control) berikut ini dan definisi dari setiap bit yang ada :

SM0 SM1 SM2 REN TB8 RB8 TI RI

MSB LSB

Simbol Posisi Fungsi

SM0 SCON. 7 SM merupakan singkatan dari Serial Mode. Bit-0 untuk pemilih mode port serial (lihat tabel 2.4 dibawah).

SM1 SCON. 6 Bit-1 untuk pemilih mode port serial SM2 SCON. 5 Bit-2 untuk pemilih mode port serial

REN SCON. 4 REN merupakan singkatan dari Receiver Enable. Bit untuk meng-enable/disable proses penerimaan data serial. Di-set secara software dan juga di-clear secara software.

TB8 SCON. 3 Bit data ke-9 yang akan dikirim dalam mode 2 dan mode 3. Di-set dan clear secara software. RB8 SCON. 2 Dalam mode 2 dan mode 3, bit data ke-9 telah

diterima. Dalam mode 1, jika SM2 = 0, maka RB8 berfungsi sebagai bit stop. Dalam mode 0, RB8 tidak digunakan.

TI SCON. 1 TI merupakan singkatan dari Transmit Interrupt. Flag interupsi saat mengirim data. Di-set secara Hardware pada akhir pengirim data bit ke-8 dalam mode 0, atau sebagai awal dari bit stop untuk mode lainnya. TI harus di-clear secara software agar dapat mengirim data berikutnya. RI SCON. 0 RI merupakan singkatan dari Receive Interrupt.

Flag interupsi saat menerima data. Di-set secara hardware pada akhir bit ke-8 dalam mode 0. Adapun kombinasi bit untuk SM0 dan SM1 yang menentukan mode dari port serial adalah sebagai berikut :

Tabel 2.4 Bit Pemilih Mode Port Serial

SM0 SM1 Mode Keterangan Baud Rate

0 0 0 Shift Register Tetap (freq OSC/12) 0 1 1 8-bit UART variabel (di-set oleh timer)

1 0 2 9-bit UART tetap (freq OSC/64 atau freq OSC/32) 1 1 3 9-bit UART variabel (di-set oleh timer)

• Setting Baud Rate

Setelah men-setting mode dari port serial, maka program harus menentukan besarnya baud rate untuk pengiriman data. Setting hanya berlaku pada mode 1 dan mode 3. Terlihat pada tabel diatas bahwa hanya untuk mode 1 dan mode 3 setting baud rate dapat dilakukan. Untuk mode 0 dan 2, baud rate telah dibuat untuk nilai tertentu oleh sistem di dalam mikrokontroler AT89S51.

Baud rate dibentuk oleh frekuensi oscilator pada saat mode 0 dan 2. Di dalam mode 0, baud rate akan selalu sebesar 921, 583 baud. Di dalam mode 2, baud rate akan selalu sebesar frekuensi osilator dibagi oleh 64, sehingga bila menggunakan kristal 11,059 MHz akan menghasilkan baud rate sebesar 172,797.

Baud rate dalam Mode 0 adalah dibuat tetap (tidak bisa berubah-rubah) seperti yang diperlihatkan pada persamaan berikut ini :

Frekuensi Oscilator

Baud Rate Mode 0 = . . . (1)

12

Baud rate dalam mode 2 tergantung kepada nilai bit SMOD yang merupakan salah satu bit yang terdapat dalam register PCON (Power Control). Jika SMOD = 0 (nilai saat AT89S51 di reset), maka baud rate menjadi 1/64 dari frekuensi oscilator. Jika SMOD = 1, maka baud rate menjadi 1/32 dari frekuensi oscilator, seperti yang diperlihatkan pada persamaan berikut :

2 SMODE

Baud Rate Mode 2 = x Frekuensi Osilator . . . (2) 64

Pada mode 1 dan mode 3, baud rate ditentukan oleh seberapa sering Timer 1 mengalami overflow. Semakin sering Timer 1 overflow, semakin besar baud rate. Ada banyak cara yang dapat menyebabkan Timer 1 untuk menjadi overflow pada rate yang menentukan baud rate, tetapi cara paling umum adalah membuat Timer 1 dalam mode 8-bit auto-reload (timer mode 2). Dan men-set suatu nilai untuk reload (TH1)

sehingga membuat Timer 1 overflow pada frekuensi yang diinginkan untuk membangkitkan suatu baud rate.

Untuk menentukan nilai yang harus diisikan pada TH1, dapat dilihat pada persamaan berikut :

TH1 = 256 – (( Frekuensi Kristal / 384 ) / Baud ) . . . (3)

Jika bit ke-7 dari register PCON (PCON. 7) di-set, maka baud rate secara efektif menjadi dua kalinya. Maka persamaan diatas berubah menjadi :

TH1 = 256 – (( Frekuensi Kristal / 192 ) / Baud ) . . . (4)

Sebagai contoh, jika digunakan kristal 11, 059 MHz dan diinginkan untuk membuat baud rate serial port menjadi 19, 200 baud, maka dengan menggunakan rumus (3) diatas akan didapatkan nilai TH1 sebesar :

TH1 = 256 - (( Frekuensi Kristal / 384 ) / Baud ) TH1 = 256 - (( 11059000 / 384 ) / 19200 ) TH1 = 256 - (( 28, 799 ) / 19200 )

TH1 = 256 – 1, 5 TH1 = 254, 5 desimal

Seperti yang dapat dilihat, untuk mendapatkan nilai 19,200 baud dengan kristal 11,059 MHz, maka TH1 harus diisi dengan nilai 254,5. Jika TH1 di-set menjadi 254 maka didapatkan nilai 14,400 baud dan jika TH1 di-set menjadi 255 akan didapatkan nilai 28,800 baud.

Ada cara lain untuk men-set baud rate yaitu dengan membuat bit PCON 7 menjadi ‘1’. Bila hal ini dilakukan maka nilai yang didapatkan menjadi dua kalinya, yaitu dengan menggunakan persamaan (4) diatas, sehingga :

TH1 = 256 - (( Frekuensi Kristal / 192 ) / Baud ) TH1 = 256 - (( 11059000 / 192 ) / 19200 ) TH1 = 256 - (( 57699 ) / 19200 )

TH1 = 256 – 3 TH1 = 253 desimal

Tabel 2.5 Setting Baud Rate Baud Rate f Osc SMODE

C / T Timer 1 Mode Nilai reload Mode 0 Max : 1 MHz 12 MHz X X X X Mode 2 Max : 375K 12 MHz 1 X X X Mode 1&3 : 62, 5K 12 MHz 1 0 2 FFH 19, 2 K 11, 059 MHz 1 0 2 FDH 9, 6 K 11, 059 MHz 0 0 2 FDH 4, 8 K 11, 059 MHz 0 0 2 FAH 2, 4 K 11, 059 MHz 0 0 2 F4H 1, 2 K 11, 059 MHz 0 0 2 E8H 137, 5 11, 059 MHz 0 0 2 1DH 110 6 MHz 0 0 2 72H 110 12 MHz 0 0 1 FEEBH

 Menulis Ke Port Serial

Setelah seluruh setting port serial selesai seperti yang telah dijelaskan diatas, maka port serial siap digunakan untuk mengirim maupun menerima data. Untuk mengirim satu byte data ke port serial, cukup mengisi register SBUF (alamat 99h pada SFR). Sebagai contoh, jika diinginkan mengirim karakter ‘A’ ke port serial maka tulis instruksi seperti berikut ini :

MOV SBUF, #’A’

Maka mikrokontroler AT89S51 akan mengirim karakter itu melalui port serial. Sayangnya pengiriman data tidak terjadi dengan instan. Dibutuhkan waktu untuk untuk mengirim suatu data. Karena AT89S51 tidak memiliki buffer pengiriman data, maka perlu dilakukan suatu metode untuk mengetahui kapan pengiriman karakter berikutnya dapat dilakukan.

AT89S51 akan memberitahu kapan pengiriman suatu karakter telah selesai dengan men-setting bit TI dalam register SCON. Ketika bit ini di-set oleh AT89S51 (secara hardware), maka akan diketahui kapan karakter berikutnya dapat dikirim.

Berikut adalah subrutin program untuk mengetahui kapan TI berubah menjadi ‘1’ pada saat mengirim 1 byte data :

TX_OUT : CLR TI MOV SBUF, A JNB TI, $ RET

Subrutin diatas akan menunggu sampai bit TI menjadi ‘1’ yang menandakan bahwa 1 byte data telah dikirim.

• Menerima Data Dari Port Serial

Menerima data yang berasal dari port serial sama mudahnya dengan menulis data ke port serial yaitu dengan memindahkan isi SBUF ke dalam suatu register (umumnya register akumulator). Secara hardware, AT89S51 akan men-set bit RI di dalam SCON sebagai tanda bahwa 1 byte data telah diterima oleh register SBUF.

Berikut adalah subrutin untuk membaca data yang diterima melalui port serial yaitu dengan menunggu bit RI menjadi ‘1’ :

RX_IN : JNB RI, $ MOV A, SBUF CLR RI RET

 Interfacing TTL –RS232

Port serial yang disediakan oleh AT89S51 merupakan port yang bekerja pada level tegangan TTL, yaitu +5 volt untuk logika ‘1’ dan 0 volt untuk logika ‘0’. Agar dapat dilakukan komunikasi data antara sistem berbasis mikrokontroler AT89S51 dengan PC maka dibutuhkan suatu chip yang berfungsi untuk merubah level tegangan TTL menjadi level tegangan standart port serial RS-232 dan sebaliknya dari level RS-232 menjadi level TTL. Standar RS-232 adalah standar yang digunakan pada PC untuk melakukan komunikasi data secara serial. Tipe chip yang digunakan sebagai interface (antarmuka) ini adalah MAX232 (buatan Maxim Semiconductor) atau ICL232 (buatan Intersil).

Adapun skema dari interface ini adalah sebagai berikut :

Gambar 2.16 Interfacing TTL - RS232

• Mode Hemat Energi

Setiap mikrokontroler keluarga Atmel memiliki dua mode penghematan energi (power reducing) yaitu Idle dan Power Down. Gambar 2.17 memperlihatkan rangkaian dalam dari fasilitas mode Idle dan Power Down. OSC PD CLOCK GEN Interupsi, port serial, timer IDL CPU XTAL2 XTAL1

Gambar 2.17 Rangkaian internal fasilitas Idle dan Power Down

Dalam mode Idle (pin IDL = 1), osilator tetap bekerja, begitu juga untuk interupsi, port serial dan timer terus bekerja selama mode ini. Tetapi sinyal detak tidak diteruskan kepada CPU. Sedangkan dalam mode Power Down (pin PD = 1), kegiatan osilator dihentikan.

Mode Idle dan Power Down diaktifkan dengan men-set bit-bit tertentu yang terdapat di dalam register PCON (Power Control). Alamat dari register ini terletak pada 87H. Berikut memperlihatkan secara detil isi dari register PCON.

SMOD - - - GF1 GF0 PD IDL

MSB LSB

Gambar 2.18 Register PCON

Simbol Posisi bit Fungsi

SMOD PCON. 7 Bit untuk mendouble Baud rate

(kecepatan transfer data). Ketika diset (‘1’) dan Timer-1 digunakan untuk membangkitkan baud rate, dan serial port digunakan pada mode 1, 2 dan 3.

- PCON. 6 Kosong.

- PCON. 5 Kosong.

- PCON. 4 Kosong.

GF1 PCON. 3 Bit untuk flag serbaguna (general purpose flag). GF0 PCON. 2 Bit untuk flag serbaguna

(general purpose flag).

PD PCON. 1 Bit Mode Power Down. Bila bit ini diset, maka akan membuat sistem berada pada kondisi hemat energi.

IDL PCON. 0 Bit Mode Idle. Bila bit ini diset, maka akan membuat CPU menghentikan kegiatannya.

Catatan :

Jika bit PD dan IDL diset dalam waktu yang bersamaan, maka bit PD yang berfungsi. Hal ini disebabkan karena letaknya yang lebih depan dibanding dengan bit IDL. Sedangkan bit IDL terletak setelah bit PD (lihat pola bit diatas). Isi register PCON setelah terjadinya kondisi reset adalah 0XXX000.

• Mode Idle

Suatu instruksi yang menset (membuat menjadi ‘1’) bit-0 register PCON (PCON. 0) akan menyebabkan sistem mikrokontroler AT89S51 memasuki mode Idle. Dalam mode ini, sinyal detak (clock) internal dihalangi supaya tidak masuk kepada CPU. Atau dengan kata lain CPU dihentikan kegiatannya (sleep). Tetapi sinyal detak ini tetap diteruskan kepada seluruh peralatan peripheral internal seperti peralatan interupsi, port serial dan timer sehingga CPU dapat diaktifkan kembali dengan adanya sinyal pada saluran interupsi, port serial atau timer.

Status terakhir pada saat CPU berhenti bekerja (mode idle), mikrokontroler akan tetap mempertahankan isi dari register Stack Pointer, Program Counter, Program Status Word, Akumulator dan seluruh register lainnya yang berada di dalam CPU. Begitu pula dengan pin Port, port akan dipertahankan status logikanya selama mikrokontroler berada pada mode idle. Sedangkan pin ALE dan PSEN berada pada kondisi logika ‘1’.

Ada dua cara untuk untuk mengakhiri kondisi idle. Cara pertama adalah dengan mengaktifkan satu dari lima sumber sinyal interupsi. Adanya sinyal interupsi akan membuat bit PCON. 0 menjadi ‘0’. Atau dengan kata lain, interupsi menyebabkan mode idle dihentikan. Bit flag GF0 dan GF1 dapat digunakan untuk menandai adanya interupsi yang terjadi pada kondisi normal atau yang terjadi pada saat berada dalam mode idle.

Sebagai contoh, suatu instruksi membuat mikrokontroler masuk ke dalam mode idle, dapat menset salah satu bit flag atau kedua-duanya (GF0 dan GF1). Ketika mode idle dihentikan oleh sinyal interupsi, subrutin pelayanan interupsi dapat menguji bit-bit flag tersebut.

Cara kedua untuk menghentikan mode idle adalah dengan melakukan reset secara hardware. Yaitu dengan memberikan sinyal high pada pin-9 (pin RST). Sinyal reset ini menghapus bit IDL secara langsung. Pada saat sinyal osilator masih bekerja, reset hardware harus terus dipertahankan selama 2 siklus mesin (24 periode osilator) supaya reset hardware tersebut bekerja. Sinyal reset pada pin RST menghapus bit IDL secara langsung.

Yang perlu dicatat saat CPU kembali mulai bekerja adalah mikrokontroler melanjutkan eksekusi program tepat pada baris yang membuat kegiatan CPU tersebut dihentikan. Kegiatan melanjutkan eksekusi program tepat satu baris setelah instruksi yang membuat CPU berhenti dimungkinkan karena seluruh isi register yang berada pada SPR dan seluruh isi RAM dijaga terhadap kemungkinan-kemungkinan untuk merubah isinya.

• Mode Power Down

Suatu instruksi yang menset (membuat menjadi ‘1’) bit-1 register PCON (PCON. 1) akan menyebabkan sistem mikrokontroler AT89S51 memasuki mode Power Down. Dalam mode ini, sinyal detak (clock) internal berhenti bekerja. Begitu pula seluruh peripheral internal berhenti bekerja, tetapi isi dari register-register di dalam SFR dan isi dari RAM dijaga dari kemungkinan-kemungkinan untuk merubahnya. Sinyal ALE dan PSEN dibuat menjadi low.

Satu-satunya cara untuk mengakhiri mode Power Down adalah dengan memberikan reset hardware pada pin RST (pin 9). Kondisi reset akan merubah seluruh isi register SFR, tetapi tidak akan merubah isi dari RAM.

Di dalam mode Power Down, kebutuhan tegangan supply untuk AT89S51 dapat dikurangi hingga mencapai 2 Volt. Meskipun demikian, tegangan supply tidak boleh kurang dari 5 Volt sebelum mode Power Down bekerja dan tegangan supply akan dikembalikan ke 5 Volt tepat pada saat Power Down dihentikan.

Dalam dokumen BAB II TEORI DASAR PENUNJANG (Halaman 24-33)

Dokumen terkait