Interface Serial Communication Menggunakan PIC 16F877A





1. Tujuan [Kembali]


Mempelajari bagaimana cara menggunakan modul komunikasi serial pada PIC 16F877A

2. Alat [Kembali]

2.1 Mikrokontroler PIC16F877A.

2.2 LCD


2.3 Virtual Terminal




3. Teori [Kembali]

3.1. Pengertian Mikrokontroler PIC 16F877A

PIC yang merupakan produk dari Microchip Technology, merupakan kepanjangan dari Peripheral Interface Controller memiliki arsitektur Harvard dan merupakan jenis RISC (Reduced Instruction Set Computing). Salah satu jenis mikrokontroler ini adalah PIC16F877A.

3.1.1 Fitur-Fitur PIC16F877A.

a. Memiliki Instruksi sebanyak 35 buah.
b. Masing-masing instruksi dieksekusi dalam satu siklus mesin kecuali untuk instruksi percabangan yaitu dua siklus.
c. Kecepatan operasi masukan clock dari DC hingga 20MHz.
d. Kapasitas memori program berukuran 8k x 14 words.
e. Kapasitas RAM 268 byte.
f. Kapasitas memory EEPROM berukuran 256 byte.

3.1.2 Pin Out PIC16F877A.


-Memiliki 5 PORT I/O (PORTA 6 pin, PORTB 8 pin, PORTC 8 pin, PORTD 8 pin, PORTE 3 pin).
-Memiliki 3 buat timer
-Memiliki 2 buah keluaran PWM.
-Komunikasi serial singkron menggunakan SPI dan I2C.
-Komunikasi USART.

3.1.3 Pemograman PIC16F877A.



Pemograman PIC ini diprogram menggunakan bahasa C dan dapat menggunakan kompiler MikroC for PIC yang dapat didownload di situs resminya.

3.1.4 Rangkaian Dasar Sistem Mikrokontroler PIC16F877A.



Di gambar dapat dilihat bahwa rangkaian dasar dari sistim mikrokontroler biasanya menggunakan rangkaian crystal sebagai clock atau oscilator ecternal sehingga dapat menambah kecepatan eksekusi dari mikrokontroler tersebut. Pada gambar juga terdapat rangkaian reset yang digunakan untuk memulai dari awal kembali program yang kita jalankan pada mikrokontroler ini.

3.2. Pengertian LCD

Untuk Teori tentang LCD dapat dipahami pada Postingan tentang Interface LCD Menggunakan PIC16F877A.

3.3. Komunikasi Serial Teori Dasar

Komunikasi serial adalah komunikasi yang pengiriman datanya per-bit secara berurutan dan bergantian. Komunikasi ini mempunyai suatu kelebihan yaitu hanya membutuhkan satu jalur dan kabel yang sedikit dibandingkan dengan komunikasi paralel. Pada prinsipnya komunikasi serial merupakan komunikasi dimana pengiriman data dilakukan per bit sehingga lebih lambat dibandingkan komunikasi parallel, atau dengan kata lain komunikasi serial merupakan salah satu metode komunikasi data di mana hanya satu bit data yang dikirimkan melalui seuntai kabel pada suatu waktu tertentu. Pada dasarnya komunikasi serial adalah kasus khusus komunikasi paralel dengan nilai n = 1, atau dengan kata lain adalah suatu bentuk komunikasi paralel dengan jumlah kabel hanya satu dan hanya mengirimkan satu bit data secara simultan.Hal ini dapat disandingkan dengan komunikasi paralel yang sesungguhnya di mana n-bit data dikirimkan bersamaan, dengan nilai umumnya 8 ≤ n ≤ 128.

Komunikasi serial ada dua macam, asynchronous serial dan synchronous serial. Synchronous serial adalah komunikasi dimana hanya ada satu pihak (pengirim atau penerima) yang menghasilkan clock dan mengirimkan clock tersebut bersama-sama dengan data. Contoh pengunaan synchronous serial terdapat pada transmisi data keyboard. Asynchronous serial adalah komunikasi dimana kedua pihak (pengirim dan penerima) masing-masing menghasilkan clock namun hanya data yang ditransmisikan, tanpa clock. Agar data yang dikirim sama dengan data yang diterima, maka kedua frekuensi clock harus sama dan harus terdapat sinkronisasi. Setelah adanya sinkronisasi, pengirim akan mengirimkan datanya sesuai dengan frekuensi clock pengirim dan penerima akan membaca data sesuai dengan frekuensi clock penerima. Contoh penggunaan asynchronous serial adalah pada Universal Asynchronous Receiver Transmitter (UART) yang digunakan pada serial port (COM) komputer.


3.3. Komunikasi Serial PIC 16F877A

PIC 16F877A dilengkapi dengan USART inbuilt yang dapat digunakan untuk komunikasi Synchronous / Asynchronous. Untuk mengaktifkan modul UART pada PIC ini, register yang berperan adalah ,


Konfigurasi bit-bit yang terdapat pada Register TXSTA,


Fungsi masing- masing bit pada register ini adalah,

CSRC: Sumber Clock

TX9: Transmit 9 bit
1 = Memilih transmisi 9 bit
0 = Memilih transmisi 8-bit

TXEN: Transmit Enable bit
1 = Transmit diaktifkan
0 = Transmit dinonaktifkan

SYNC: USART Mode
1 = Modus sinkron
0 = Mode asynchronous

BRGH: Tingkat Baud Tinggi Pilih bit
1 = Kecepatan tinggi
0 = Kecepatan rendah

TRMT: Transmit Shift Register Status bit
1 = TSR kosong
0 = TSR penuh

TX9D: bit ke-9 Transmit Data, bisa jadi Parity bit


Selanjutnya konfigurasi bit-bit pada register RCSTA,


Fungsi dari masing-masing bit pada register ini adalah,

SPEN: Serial Port
1 = Port serial diaktifkan (konfigurasikan pin RC7 / RX / DT dan RC6 / TX / CK sebagai pin port serial)
0 = Port serial dinonaktifkan

RX9: 9-bit Receive Enable bit
1 = Memilih penerimaan 9 bit
0 = Memilih penerimaan 8-bit

SREN: Single Receive Enable bit

CREN: Continuous Receive Enable bit
Asynchronous mode:
1 = Mengaktifkan continuous receive
0 = Menonaktifkan continuous receive

ADDEN: Address Detect Enable bit
Asynchronous mode 9-bit (RX9 = 1):
1 = Mengaktifkan deteksi alamat, memungkinkan interupsi dan beban buffer penerima saat RSR diset
0 = Menonaktifkan deteksi alamat, semua byte diterima dan bit kesembilan terjadi, digunakan sebagai paritas bit

FERR: Framing Error bit
1 = Framing error (dapat diupdate dengan membaca register RCREG dan menerima byte valid berikutnya)
0 = No framing error

OERR: Overrun Error bit
1 = Overrun error (dapat dihapus dengan cara membersihkan bit CREN)
0 = Tidak ada kesalahan overrun

RX9D: bit 9 Received Data (bisa parity bit tapi harus dihitung oleh user firmware)


Selain mengunakan akases register, komunikasi UART dapat dilakukan dengan memanfaatkan library UART MikroC PIC. yang harus dilakukan sebelum melakukan komunikasi, maka proses inisialisasi harus terlebih dahulu dilakukan. Instruksi yang digunakan adalah,

UART1_Init(nilai_baudrate)

Nilai baudrate yang diisikan adalah berupa bilangan integer seperti 9600, 4800, 2400, dan seterusnya.

Adapun masih banyak insrtuksi baku yang telah disediakan pada library MikroC PIC yang tidak dapat dijabarkan disini semuanya.

4. Rangkaian [Kembali]




Rangkaian ini merupakan penggunaan komunikasi serial PIC 16F877A yang komunikasinya dilakukan dengan virtual terminal. Ketika dapa diinputkan pada virtual terminal menggunakan keyboard maka data ini akan dikirimkan dari virtual terminal ke pin RX PIC. Kemudian data ini akan dituliskan ke LCD.


5. Program [Kembali]

// Koneksi LCD dengan PIC
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

char receive;                                       // Deklarasi variabel receive sebagai penyimpan data inputan
void main() {
UART1_Init(9600);                           // Inisialisasi Pin Serial pada PIC dengan nilai baudrate 9600
delay_ms(100);                                  // delay 100 ms
TRISB=0x00;                                    // Menyatakan PORTB sebagai output
PORTB=0x00;                                   // Nilai Awal PortB adalah low

UART1_Write_Text("Type Your Text Here");        // Mencetak tulisan pada Virtual terminal
UART1_Write(13);                            // Baris baru pada virtual Terminal
UART1_Write(13);

Lcd_Init();                                         // Inisialisasi LCD
Lcd_Cmd(_LCD_CLEAR);              // Bersihkan Layar LCD
Lcd_Out(1,1,"Your Text is :");          // Mencetak tulisan di baris 1 kolom 1 LCD
Lcd_Out(2,1,"");                               // Menempatkan cursor di baris kedua

while(1){                                          // Perulangan

 if(UART1_Data_Ready()){                        // Memantikan pin RX menerima data dari Virtual Terminal
 receive=UART1_Read();                           // Memasukkan data yang diinput ke variabel receive

 if(receive==13){                                        // Jika yang diinput adalah ENTER, Maka
 Lcd_Cmd(_LCD_CLEAR);                      // Bersihkan Layar LCD
 Lcd_Out(1,1,"Your Text is :");
 Lcd_Out(2,1,"");                                       // Menempatkan cursor di baris kedua
 }
 else if(receive==8){                        // Jika yang diinputkan adalah BACKSPACE (Delete), Maka

 Lcd_Cmd(_LCD_MOVE_CURSOR_LEFT);          // Di LCD Karakter sebelumnya dihapus
 Lcd_Chr_Cp(32);
 Lcd_Cmd(_LCD_MOVE_CURSOR_LEFT);
 }
 else {                                         // Jika yang diinputkan selain dua di atas, Maka
 Lcd_Chr_Cp(receive);                           // Mencetak karakter yang diinput ke LCD
 }

 }

}

}



6. Flowchart [Kembali]




7. Video Simulasi [Kembali]

   8. Files Download Link [Kembali]

           

          


Share
Tweet
Pin
Share