Sasakala Board adalah sebuah AVR Development Board dari Embedtronix yang berbasis microcontroler Atmel AVR ATmega32 dilengkapi dengan RS232 Level Converter, jadi tidak perlu converter RS232 lagi bila ingin berkomunikasi dengan PC lewat serial port.
Berikut contoh program USART pada Sasakala Board dengan menggunakan AVR Studio 4 dan WinAVR. Untuk menggunakan AVR Studio dan Win AVR silakan baca tutorialnya disini.
/*
== AVR-Sasakala Demo ==
************************************************
Hardware:
[Sasakala Board]
ATmega32 @16MHz with Level convertor
on RX/TX line Connected to PC via RS232
PC Software:
Hyperterminal @ 19200 baud
No Parity,1 Stop Bit,
Flow Control = NONE
************************************************
Bubaka - Embedtronix (C)2010
*/
#include <avr/io.h>
#include <inttypes.h>
//Initialize the USART
void USARTInit(uint16_t ubrr_value)
{
//Set Baud rate
UBRRL = ubrr_value;
UBRRH = (ubrr_value>>8);
/*Set Frame Format
>> Asynchronous mode
>> No Parity
>> 1 StopBit
>> char size 8
*/
UCSRC=(1<<URSEL)|(3<<UCSZ0);
//Mengaktifkan receiver and transmitter serial
UCSRB=(1<<RXEN)|(1<<TXEN);
}
//Membaca data dari buffer USART.
//program akan menunggu hingga ada data.
char USARTReadChar()
{
//Menunggu hingga ada data
while(!(UCSRA & (1<<RXC)))
{
//menunggu…
}
//USART sudah mendapatkan data dari host
//dan tersimpan di buffer
return UDR;
}
//Fungsi untuk mengirimkan data (huruf) ke host PC
//melalui jalur TX serial RS232
void USARTWriteChar(char data)
{
//engunggu hingga transmitter siap
while(!(UCSRA & (1<<UDRE)))
{
//menunggu …
}
//menyimpan data ke buffer USART
UDR=data;
}
//Fungsi untuk mengirimkan data (kata) ke host PC
//melalui jalur TX serial RS232
void SerialString(const char *msg)
{
while(*msg!='\0')
{
USARTWriteChar(*msg);
msg++;
}
}
void WriteTitle()
{
SerialString("AVR32 USART Demo ");
}
//Fungsi utamavoid main()
{
char data;
/*
Initialisasi USART untuk Baudrate = 19200bps,
maka UBRR diberi nilai = 51
*/
USARTInit(51); //UBRR = 51
//dari sini program akan berulang terus menerus
while(1)
{
//Membaca data dari buffer serial
data=USARTReadChar();
/*
Mengirimkan kembali data yang diterima dengan penambahan tanda ‘[‘
serta tulisan judul. Contohnya ‘AVR USART Demo [a]'.
*/
WriteTitle();
USARTWriteChar('[');
USARTWriteChar(data);
USARTWriteChar(']');
USARTWriteChar(0x0A); //Mengirimkan tanda ganti baris
}
}
Selamat mencoba…!
Tidak ada komentar:
Posting Komentar