8. Interface Serial USART Pada AVR ATMEGA 16/32/8535
8. Interface Serial USART Pada AVR ATMEGA 16/32/8535

Komunikasi Serial

Universal Synchronous Asynchronous Receiver-Transmitter (USART) dapat melakukan komunikasi serial secara asinkron dan sinkron. Komunikasi serial merupakan salah satu alternatif yang relatif lebih murah dengan jangkauan yang lebih panjang untuk menggantikan komunikasi paralel, karena transfer data paralel menggunakan 8 jalur konduktor/kabel untuk mentransfer 8-bit sekaligus. Dengan komunikasi serial, maka hal tersebut dapat dilakukan dengan hanya menggunakan satu kabel saja, tetapi ditransfer bit demi bit sebanyak 8 kali.

Data di dalam prosesor (CPU) diproses dalam bentuk paralel, maka transfer data input/output serial harus dimulai dan diakhiri dengan data paralel. Pada dasarnya konversi paralel ke serial mudah dilakukan. Data paralel dimuat ke dalam sebuah register geser (shift register), kemudian register geser diberikan clock. Data kemudian dikeluarkan dari register geser mulai dari bit LSB (1 bit untuk setiap siklus clock) sampai bit MSB.

Penerimaan data serial dan konversinya ke data paralel merupakan operasi kebalikannya. Data serial digeser ke dalam sebuah register geser, kemudian setelah semua bit di-clock ke dalam register geser maka data diambil secara paralel untuk ditransfer ke prosesor. Jadi dengan kata lain digunakan dua register geser, yang pertama register jenis PISO (Parallel In Serial Out) dan di sisi yang lain digunakan jenis SIPO (Serial In Parallel Out).

Komunikasi serial sinkron adalah komunikasi antara mikrokontroler dengan peripheral lain di mana sinyal clock yang digunakan antara transmitter dan receiver berasal dari satu sumber clock. Pada komunikasi serial sinkron, sinkronisasi antara transmitter dan receiver harus dijaga dengan sinyal “sync" yaitu dengan menggunakan sumber clock bersama antara dua piranti. Bit-bit data dikirim dan diterima pada setiap transisi clock. Kecepatan transfer data komunikasi serial sinkron jauh lebih cepat dari pada komunikasi serial asinkron.

Komunikasi serial asinkron adalah komunikasi antara mikrokontroler dengan peripheral lain di mana masing-masing mempunyai sumber clock sendiri. Komunikasi USART dilakukan dalam mode full duplex (dua arah) antara transmitter dan receiver.

ØKomunikasi serial yang banyak digunakan adalah teknik asinkron, di mana untuk menjaga sinrokonisasi antara transmitter dan receiver maka digunakan teknik pembingkaian data (framing) menggunakan bit start dan stop pada awal dan akhir setiap byte data dalam rangkaian transmisinya.


Arsitektur Internal USART

Perangkat keras USART dapat dibagi dalam tiga bagian/blok besar yaitu transmitter, receiver dan sumber clock (clock generator).

.

Blok transmitter melakukan komunikasi pengiriman data melalui pin TX. Register UDR digunakan sebagai tempat penampungan (buffer) data yang akan ditransmisikan. Indikator keberhasilan data yang ditransmisikan diberikan oleh flag TXC, sedangkan flag UDRE adalah sebagai indikator jika UDR kosong dan siap untuk diisi data yang akan ditransmisikan lagi.

.

Blok receiver melakukan penerimaan data melalui pin RX. Register yang digunakan untuk menampung data yang telah diterima adalah UDR. Sedangkan indikator keberhasilan bahwa data telah diterima ditangani oleh flag RXC.

.

Blok clock generator berhubungan dengan kecepatan transfer data. Register yang bertugas menentukan baud rate adalah register pasangan UBRR.

BAUD: baud rate (dalam bit per second, bps)

fosc: frekuensi osilator yang digunakan

UBRR: isi dari register UBRRH dan UBRRL (0 - 4095)

.

Contoh 1

Hitung nilai UBRR yang harus dimasukkan dalam pemrograman komunikasi serial mode normal asinkron jika dinginkan baud rate (a) 9600, (b) 4800, (c) 2400 dan 1200. Anggap fosc = 8 MHz.


Fitur-Fitur Serial USART

USART meruapakan salah satu perangkat komunikasi serial yang mempunyai tingkat fleksibilitas komunikasi yang sangat tinggi. Pada mikrokontroler Atmel AVR, biasanya fitur USART mencakup:

  • Operasi full duplex
  • Dapat beroperasi pada mode Asynchronous dan Synchcronous.
  • Dapat bekerja dengan resolusi baud rate yang tinggi.
  • Mendukung serial frames dengan data bit 5, 6, 7, 8 atau 9 data bit dan dilengkapi dengan 1 atau 2 stop bit.
  • Dilengkapi dengan fasilitas parity check dan dapat bekerja pada parity Odd atau Even.
  • Dapat beroperasi sebagai Master atau Slave Clock Synchronous.
  • Dilengkapai dengan fitur Data Over Run Detection.
  • Terdapat fasilitas Frame Error Detection.
  • Dilengkapai dengan filter untuk menyaring noise yaitu digital low pass filter.
  • Mempunyai tiga interupsi yang terpisah pata Tx Complete, Data Register Empty, Rx complete.
  • Mendukung komunikasi multiprosessor.
  • Dapat Bekerja pada mode komunikasi Doubel Speed Asynchronous.

Register Kontrol USART

Untuk melakukan inisialisasi pada komunikasi USART, maka register kontrol USART harus diatur sedemikian rupa agar komunikasi dapat berjalan dengan baik.

Register UDR

USART I/O Data Register - UDR. Register UDR digunakan sebagai penyangga (buffer) data yang akan dikirimkan dan penyangga data yang diterima. Transmit Data Buffer Register (TXB) berfungsi sebagai penyangga data yang akan ditulis ke dalam register UDR. Sedangkan Receive Data Buffer Register (RXB) berfungsi sebagai penyangga data yang diterima oleh register UDR. Register UDR untuk penyangga transmitter hanya dapat ditulis ketika bit/flag UDRE dalam register UCSRA dalam keadaan set.

.

Register UCSRA (USART Control and Status Register A) ->Register kontrol & status USART A

  • Bit 7 RXC: USART Receive Complete, Flag RXC otomatis akan bernilai 1, jika terdapat data baru di buffer penerima. RXC otomatis akan bernilai 0, jika data sudah dibaca atau buffer penerima kosong.
  • Bit 6 TXC: USART Transmit Complete, Flag TXC otomatis akan bernilai 1, jika data di buffer selesai dikirim.
  • Bit 5 UDRE: USART Data Register Empty, Flag UDRE otomatis akan bernilai 1 , jika register TXB pada UDR kosong dan transmiter siap mengirim data. UDRE=0, jika UDR berisi data yg belum selesai dikirim.
  • Bit 4 FE: Frame Error, FE otomatis akan bernilai 1, jika ada frame erorBit 3 DOR: Data OverRun, DOR otomatis akan bernilai 1, jika terdapat data baru yang masuk saat bufer penuh (terjadi antrian).
  • Bit 2 PE: Parity Error, PE otomatis akan bernilai 1, jika terjadi parity eror.
  • Bit 1 U2X: Double the USART Transmission Speed, kita set U2X=0, kecepatan normal. U2X=1 kecepatan 2xbaudrate.
  • Bit 0 MPCM: Multi-Processor Communication Mode, Bit ini berfungsi meng-enable atau mengaktifkan mode Multi-processor Commnication. Bila bit MPCM ditulis ke satu, semua frame yang diterima oleh penerima USART yang tidak berisi informasi alamat akan diabaikan. Transmitter tidak dipengaruhi oleh setting MPCM.

.

Register UCSRB (USART Control and Status Register B)

  • Bit 7 RXCIE: RX Complete Interrupt Enable, kita set RXCIE=1 ,interupsi receive complete aktif.
  • Bit 6 TXCIE: TX Complete Interrupt Enable, kita set TXCIE=1 ,interupsi transmit complete aktif.
  • Bit 5 UDRIE: USART Data Register Empty Interrupt Enable, kita set UDRIE=1, interupsi UDRE aktif.
  • Bit 4 RXEN: Receiver Enable, kita set RXEN=1, USART receiver aktif. Mikrokontroler bisa menerima data.
  • Bit 3 TXEN: Transmitter Enable, kita set TXEN=1, USART Transmiter aktif. Mikrokontroler bisa mengirim data.
  • Bit 2 UCSZ2: Character Size, kita set UCSZ2:UCSZ1:UCSZ0 = 011 , panjang data 8 BIT. (bit UCSZ1 dan UCSZ0 ada di register UCSRC)
  • Bit 1 RXB8: Receive Data Bit 8, RXB8 menjadi bit ke-9 jika panjang data yg diterima 9 bit.
  • Bit 0 TXB8: Transmit Data Bit 8, TXB8 menjadi bit ke-9 jika panjang data yg dikirim 9 bit.

.

Register UCSRC (USART Control and Status Register C)

  • Bit 7 URSEL: Register Select. Memilih UCSRC atau UBRRH, jika kita set URSEL=1 , UCSRC aktif dan UBRRH tidak aktif. Jika kita set URSEL=0, UBRRH aktif dan UCRSC tdk aktif.
  • Bit 6 UMSEL: USART Mode Select, kita set UMSEL=1 àmode Synchronous . UMSEL=0 à mode Asynchronous.
  • Bit 5:4 UPM1:UMP0: Parity Mode.
  • Bit 3 USBS: Stop Bit Select, kita set USBS=0 --> stop bit =1 bit, USBS=1 --> stop bit = 2 bit.
  • Bit 2:1 UCSZ1:0: Character Size, kita set UCSZ2:UCSZ1:UCSZ0 = 011 , panjang data 8 bit. (bit UCSZ2 ada di register UCSRB).
  • Bit 0 UCPOL: Clock Polarity, Bit ini digunakan hanya untuk mode sinkron. Bit ini ditulis ke nol jika digunakan mode asinkron. Bit UCPOL menge-set hubungan antara perubahan data output, sampling data input dan clock sinkron (XCK).

.

USART Baud Rate Registers – UBRRL and UBRRH

  • UBBR merupakan register 16 bit, yang berfungsi untuk menentukan kecepatan transmisi data yang digunakan mulai dari 2400 bps sampai 250 kbps.
  • Bit 15 URSEL: Register Select. Memilih UCSRC atau UBRRH, jika kita set URSEL=1 , UCSRC aktif dan UBRRH tidak aktif. Jika kita set URSEL=0, UBRRH aktif dan UCRSC tidak aktif.
  • Bit 14:12 - Reserved Bits. Bit ini digunakan sebagai cadangan untuk pengembangan. Untuk kompatibilitas dengan piranti yang akan datang, maka bit ini harus ditulis ke nol ketika UBRRH ditulisi.
  • Bit 11:0 – UBRRR11:0, USART Baud Rate Register.Bit-bit register ini (12 bit) digunakan untuk menentukan baud rate USART. UBRRH berisi empat bit MSB dan UBRRL berisi delapan bit LSB dari baud rate USART. Jika baud rate diubah saat terjadi transmisi pada pemancar dan penerima maka akan terjadi kesalahan data.

.

Contoh Setting pada Baud Rate

Untuk kristal dan frekuensi resonator standar, baud rateyang umum digunakan untuk operasi asinkron dapat dibangkitkan menggunakan setting UBRR pada Tabel-tabel berikut ini. Nilai UBRR yang menghasilkan nilai baud rate aktual memiliki selisih lebihkecildari 0,5% dengan baud rate target (di dalam tabel). Nilai Error yang lebih tinggi masih dapat ditoleransi, tetapi penerima akan rentan terhadap noise ketika nilai error-nya tinggi, khususnya untuk frame/data serial yang banyak. Adapun nilai error dihitung menggunakan persamaan berikut:

Berikut ini tabel Contoh Setting UBRR untuk frekuensi oscillator yang sering digunakan


Inisialisasi USART

Untuk menjalankan komunikasi USART, maka langkah-langkah inisialisasi yang harus diikuti adalah:

  • Atur Baud Rate
  • Atur Ukuran Data (5/6/7/8/9 bit)
  • Mengaktifkan pengiriman/penerimaan data (pada bit TXEN dan RXEN dalam register UCSRB)
  • Atur paritas dan jumlah stop bit nya

Berikut ini Register-register yang digunakan saat inisialisasi:

,

Mengirim karakter pada USART

Pantau bit UDRE pada register UCSRA. Nilai UDRE = ‘1’ saat buffer transmitter TXB dalam register UDR  kosong dan siap menerima/ditulisi byte baru.

.

Menerima karakter pada USART

Pantau bit RXC pada register UCSRA. Nilai RXC = ‘1’ saat data yang masuk/diterima ke dalam UDR sudah lengkap.


PROSEDUR PEMROGRAMAN AVR UNTUK PENGIRIMAN SERIAL (metode Polling)

Langkah-langkah pemrograman AVR untuk pengiriman byte karakter secara serial adalah sebagai berikut:

  1. Isilah register UCSRB dengan nilai 0x08 untuk keperluan mengaktifkan transmiter USART. Keadaan ini akan mengabaikan operasi port normal pada pin TXD.
  2. Isilah register UCSRC dengan nilai 0x86 untuk keperluan men-setting mode asinkron normal dengan frame 8 bit data, tanpa bit parity dan 1 bit stop.
  3. Isilah register UBRR dengan nilai yang sesuai dengan baud rate yang diinginkan (misalnya salah satu dari perhitungan nilai pada Contoh 1 di atas).
  4. Tuliskan karakter yang akan dikirim pada register UDR.
  5. Lakukan pemantauan bit flag UDRE yang terdapat pada register UCSRA untuk menjamin kesiapan register UDR untuk karakter berikutnya.
  6. Lakukan pengiriman karakter berikutnya, kembalilah ke langkah/ prosedur no.4

Tujuan dari pemantauan bit flag UDRE adalah memastikan apakah karakter di dalam register UDR sudah kosong atau belum. Karena jika pada saat belum kosong dan kita mengisinya kembali, maka karakter sebelumnya dapat hilang karena belum sempat terkirim. Bit flag UDRE dapat dicek dengan menggunakan instruksi “while (! (UCSRA & (1<<UDRE)));” atau kita dapat menggunakan cara interupsi.

.

PROSEDUR PEMROGRAMAN AVR UNTUK PENERIMAAN SERIAL (metode Polling)

Langkah-langkah pemrograman AVR untuk penerimaan byte karakter secara serial adalah sebagai berikut:

  1. Isilah register UCSRB dengan nilai 0X10 untuk keperluan mengaktifkan receiver USART. Keadaan ini akan mengabaikan operasi port normal pada pin TXD.
  2. Isilah register UCSRC dengan nilai 0x86 untuk keperluan men-setting mode asinkron normal dengan frame 8 bit data, tanpa bit parity dan 1 bit stop.
  3. Isilah register UBRR dengan nilai yang sesuai dengan baud rate yang diinginkan (misalnya salah satu dari perhitungan nilai pada Contoh 1).
  4. Lakukan pemantauan bit flag RXC yang terdapat pada register UCSRA untuk melihat apakah karakter telah diterima.
  5. Jika bit flag RXC = 1, maka berarti byte data sudah diterima di register UDR. Salin data ini ke tempat penyimpanan lain.
  6. Untuk menerima karakter berikutnya maka kembalilah ke langkah/prosedur no.4


Program 1. Program USART AVR

Buat program untuk mengirim string dan menerima karakter yang ditampilkan pada software serial.

.



#define F_CPU 8000000UL			/* Define frequency here its 8MHz */
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stdio.h>

#define USART_BAUDRATE1 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE1 * 16UL))) - 1)


void UART_init(long USART_BAUDRATE)
{
	UCSRB |= (1 << RXEN) | (1 << TXEN);/* Turn on transmission and reception */
	UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);/* Use 8-bit character sizes */
	UBRRL = BAUD_PRESCALE;		/* Load lower 8-bits of the baud rate value */
	UBRRH = (BAUD_PRESCALE >> 8);	/* Load upper 8-bits*/
}

unsigned char UART_RxChar()
{
	while ((UCSRA & (1 << RXC)) == 0);/* Wait till data is received */
	return(UDR);			/* Return the byte*/
}

void UART_TxChar(char ch)
{
	while (! (UCSRA & (1<<UDRE)));	/* Wait for empty transmit buffer*/
	UDR = ch ;
}

void UART_SendString(char *str)
{
	unsigned char j=0;
	
	while (str[j]!=0)		/* Send string till null */
	{
		UART_TxChar(str[j]);	
		j++;
	}
}

int main()
{
	char c;
	UART_init(9600);
	
	UART_SendString("\n\t Echo Test ");	
	while(1)
	{
		c=UART_RxChar();
		UART_TxChar(c);
	}	
}

Video Demo:


Program 2

Buatlah program pengiriman data melalui port serial AVR yang mengirimkan sebuah karakter ‘A’ secara terus-menerus dengan baudrate 9600, tanpa parity dan 1 bit stop. Anggap frekuensi kristal 8 MHz.

.

#include<avr/io.h>
void usart_init(void)
{
	//=== meng-enable pengirim (transmiter)===
	UCSRB = (1<<TXEN); //atau bisa juga UCSRB = 0x08
	//=== data 8-bit, tanpa parity dan 1 bit stop ===
	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //atau bisa juga UCSRC = 0x86
	//baudrate 9600 dengan kristal 8 MHz
	UBRRL = 0x33;
}

void usart_send(unsigned char kar)
{
	while(! (UCSRA & (1<<UDRE))); //tunggu sampai UDR kosong
	UDR = kar; //kirimkan karakter 'A'
}

int main (void)
{
	usart_init(); //inisialisasi USART
	while(1) //lakukan terus
	usart_send ('A'); //kirimkan ke PORTD1 huruf 'A'
	return(0);
}

Video Demo:


Program 3

Buatlah program pengiriman data melalui port serial AVR yang mengirimkan kata "GALINGGANG" secara terus-menerus dengan baudrate 9600, tanpa parity dan 1 bit stop. Anggap frekuensi kristal 8 MHz.

.

#include <avr/io.h>
void usart_init(void)
{
	//--- meng-enable pengirim (transmiter)---
	UCSRB = (1<<TXEN); //atau bisa juga UCSRB = 0x08
	//=== data 8-bit, tanpa parity dan 1 bit stop ===
	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //atau bisa juga UCSRC = 0x86
	//baudrate 9600 dengan kristal 8 MHz
	UBRRL = 0x33;
}

void usart_send(unsigned char kar)
{
	while(! (UCSRA & (1<<UDRE))); //tunggu sampai UDR kosong
	UDR = kar; //kirimkan karakter
}

int main (void)
{
	unsigned char str[10]= "GALINGGANG"; //siapkan string GALINGGANG
	unsigned char strLength = 10;
	unsigned char i;
	usart_init(); //inisialisasi USART
	while(1) //lakukan terus
	{
		usart_send(str[i++]);
		if (i >=strLength){
			i=0;
			usart_send(0x0A);//newline
		}
	}
	return (0) ;
}

Video Demo:


Program 4 Versi LCD

Buatlah program penerimaan data melalui port serial AVR dan kemudian tampilkan kembali ke LCD 16x2 secara terus-menerus dengan baudrate 9600, tanpa parity dan 1 bit stop. Anggap frekuensi kristal 8 MHz.

.

/*
 * UART CONTOH 4 LCD.c
 *
 * Created: 02/02/2023 10:32:18
 * Author : DELL
 */ 
#include <avr/io.h>
#include <stdio.h>
#include <string.h>
#include "LCD_16x2_H.h"
int main (void)
{
	unsigned char kar;
	char buffer[10];
	LCD_Init();
	//=== meng-enable penerimaan (receiver)===
	UCSRB = (1<<RXEN); //atau bisa juga UCSRB = 0x10
	//=== data 8-bit, tanpa parity dan 1 bit stop ===
	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //atau bisa juga UCSRC = 0x86
	//baudrate 9600 dengan kristal 8 MHz
	UBRRL = 0x33;
	while (1)
	{
		LCD_String_xy(0, 0, "Tes Terima UART");
		while(! (UCSRA & (1<<RXC))); //tunggu sampai ada data baru
		kar = UDR; //kirimkan karakter ke PORTB
		
		sprintf(buffer, "%c    ",kar);
		LCD_String_xy(1, 5, buffer);
	}
	return(0);
}


Video Demo:


Program 5

Buatlah program penerimaan data melalui port serial AVR (pin RXD) dan kemudian periksa data yang diterima tersebut. Jika data tersebut adalah karakter 'a' sampai 'z' maka ubah karakter tersebut menjadi huruf kapital dan kirimkan kembali melalui pin TXD. Baudrate 9600, tanpa parity dan 1 bit stop. Anggap frekuensi kristal 8 MHz.

.

#include <avr/io.h>
void transmit (unsigned char data);
int main (void)
{
	DDRA = 0xff;
	//=== meng-enable penerimaan (receiver)===
	UCSRB = (1<<RXEN)|(1<<TXEN); //atau bisa juga UCSRB = 0x18
	//=== data 8-bit, tanpa parity dan 1 bit stop ===
	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //atau bisa jugs UCSRC = 0x86
	//baudrate 9600 dengan kristal 8 MHz
	UBRRL = 0x33;
	unsigned char kar;

	while (1)
	{
		while(! (UCSRA & (1<<RXC))); //tunggu sampai ada data baru
		kar = UDR;
		if (kar >='a' && kar <= 'z')
		{
			kar += ('A'-'a');
			while(! (UCSRA & (1<<UDRE)));
			UDR = kar;
		}
	}
	return(0);
}

.

Video Demo:


KOMUNIKASI SERIAL DENGAN INTERUPSI

Contoh-contoh di atas menggunakan metode polling. Supaya mikrokontroler tidak terbuang waktunya karena harus menunggu/memantau hingga flag muncul, maka dapat digunakan metode interupsi dalam komunikasi serial (baik ketika menerima maupun ketika mengirim).

1. Penerimaan Data Serial Metode Interupsi

Untuk memprogram port serial dalam menerima data dengan metode interupsi, maka kita perlu menge-set HIGH bit RXCIE (Receive Complete Interrupt Enable) yang terdapat pada register UCSRB. Dengan men-setting bit ini maka berarti kita mengaktifkan interupsi pada flag RXC dalam register UCSRA. Ketika proses penerimaan selesai, maka bit RXC (USART Receive Complete Flag) menjadi HIGH. Jika RXCIE =1 perubahan RXC ke HIGH akan memaksa CPU untuk melompat ke vektor interupsi.

2. Pengiriman Data Serial Metode Interupsi

Untuk memprogram port serial dalam pengiriman data metode interupsi, maka kita perlu menge-set HIGH bit UDRIE (USART Data Register empty Interrupt Enable) yang terdapat pada register UCSRB. Dengan men-setting bit ini maka anda mengaktifkan interupsi pada flag UDRE dalam register UCSRA. Ketika register UDR siap menerima data yang akan dikirim, maka bit UDRE (USART Data Register Empty flag) menjadi HIGH. Jika UDRIE = ‘1’ perubahan UDRE ke HIGH akan memaksa CPU untuk melompat ke vektor interupsi.


Program 6

Buatlah program penerimaan data melalui port serial AVR (pin RXD) dan kemudian tampilkan pada PORTB. Baudrate 9600, tanpa parity dan 1 bit stop. Anggap frekuensi kristal 8 MHz. Gunakan metode interupsi.

.

#include <avr/io.h>
#include <avr/interrupt.h>
ISR(USART_RXC_vect)
{
	PORTB = UDR;
}
int main (void)
{
	DDRB = 0xff;
	//=== meng-enable penerimaan (receiver)===
	UCSRB = (1<<RXCIE)|(1<<RXEN); //atau bisa juga UCSRB = 0x90
	//=== data 8-bit, tanpa parity dan 1 bit stop ===
	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //atau bisa juga UCSRC = 0x86
	//baudrate 9600 dengan kristal 8 MHz
	UBRRL = 0x33;
	sei(); //set enable interrupt
	while(1);
	return(0);
}


Video Demo:


Program 6 Versi LCD

Buatlah program penerimaan data melalui port serial AVR (pin RXD) dan kemudian tampilkan pada LCD 16x2. Baudrate 9600, tanpa parity dan 1 bit stop. Anggap frekuensi kristal 8 MHz. Gunakan metode interupsi.

.

/*
 * UART CONTOH 6 VERSI LCD.c
 *
 * Created: 02/02/2023 11:06:11
 * Author : DELL
 */ 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <string.h>
#include "LCD_16x2_H.h"

unsigned char kar;
char buffer[10];

ISR(USART_RXC_vect)
{
	LCD_String_xy(0, 0, "Terima UART Int.");
	kar = UDR;
	sprintf(buffer, "%c    ",kar);
	LCD_String_xy(1, 5, buffer);
}
int main (void)
{
	LCD_Init();
	//=== meng-enable penerimaan (receiver)===
	UCSRB = (1<<RXCIE)|(1<<RXEN); //atau bisa juga UCSRB = 0x90
	//=== data 8-bit, tanpa parity dan 1 bit stop ===
	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //atau bisa juga UCSRC = 0x86
	//baudrate 9600 dengan kristal 8 MHz
	UBRRL = 0x33;
	sei(); //set enable interrupt
	while(1);
	return(0);
}


Video Demo:


Program 7

Buatlah program pengiriman data karakter 'G' melalui port serial AVR (pin TXD). Baudrate 9600, tanpa parity dan 1 bit stop. Anggap frekuensi kristal 8 MHz. Gunakan metoda interupsi.

.

#include <avr/io.h>
#include <avr/interrupt.h>
ISR (USART_UDRE_vect)
{
	UDR = 'G';
}

int main (void)
{
	//=== meng-enable penerimaan (receiver)===
	UCSRB = (1<<UDRIE) | (1<<TXEN) ; //atau bisa juga UCSRB = 0x28
	//=== data 8-bit, tanpa parity dan 1 bit stop ===
	UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0) ; //atau bisa juga UCSRC = 0x86,
	//baudrate 9600 dengan kristal 8 MHz
	UBRRL = 0x33;
	sei (); //set enable interrupt
	while (1);
	return (0);
}

Video Demo:


Berikut ini link program-program di atas:

https://drive.google.com/file/d/1QO3543LBDehWFbHVTOQcbSpgOReIg0Tg/view?usp=sharing

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *