Saad's Blog (Riset, Jual, Konsultan)

Untuk Pertanyaan Seputar Blog ini / Mau memesan modul elektronika langsung lewat YM atau BBM. Jarang Cek Blog….

Komunikasi USART di AVR ATMEGA8535

3 Comments

Apa itu USART (Universal Synchronous Asynchronous serial Receiver and Transmitter) mendengar namanya aja dah bingung pasti klo yang awam :D. Tapi pada postingan ini  gak akan ngebahas teori-teorinya. Cukup cara konfigurasinya dan sintak pengiriman (transmitter)  dan penerimaan (receiver) . Simpel, mudah dan sederhana.

Bahan-bahan

1. Modul uC AVR ATMEGA 8535

2. LCD (2×16)

3. CodevisionAVR

Konfigurasi CodeVisionAVR

1. Buka CodeVisionAVR

2. Pilih File>>New>>Project Klik Ok  Klik Yes

3. Atur seperti gambar di bawah

4. Pilih File>>Generate, Save and Exit —> simpan dengan nama yang sama

5. Masukkan sintaks

void main(void)
{
// Declare your local variables here
char k; //Masukkan Tipe data K sebagai Character

————————————————————————————————-

while (1)
{
// Place your code here
k=getchar(); //Perintah untuk mengambil data
putchar(k); //Perintah untuk kirim data
lcd_putchar(k);//Perintah untuk menampilkan data pada LCD

};
}

6. Program lengkapnya

/*********************************************
This program was produced by the
CodeWizardAVR V1.24.0 Standard
Automatic Program Generator
© Copyright 1998-2003 HP InfoTech s.r.l.

http://www.hpinfotech.ro

e-mail:office@hpinfotech.ro

Project :
Version :
Date    : 1/1/2002
Author  : F4CG
Company : F4CG
Comments:

Chip type           : ATmega8535
Program type        : Application
Clock frequency     : 4.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 128
*********************************************/

#include <mega8535.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0×15
#endasm
#include <lcd.h>

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];
unsigned char rx_wr_index,rx_rd_index,rx_counter;
// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
#pragma savereg-
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
#asm
push r26
push r27
push r30
push r31
in   r26,sreg
push r26
#endasm
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
#asm
pop  r26
out  sreg,r26
pop  r31
pop  r30
pop  r27
pop  r26
#endasm
}
#pragma savereg+

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm(“cli”)
–rx_counter;
#asm(“sei”)
return data;
}
#pragma used-
#endif

// USART Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];
unsigned char tx_wr_index,tx_rd_index,tx_counter;

// USART Transmitter interrupt service routine
#pragma savereg-
interrupt [USART_TXC] void usart_tx_isr(void)
{
#asm
push r26
push r27
push r30
push r31
in   r26,sreg
push r26
#endasm
if (tx_counter)
{
–tx_counter;
UDR=tx_buffer[tx_rd_index];
if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
};
#asm
pop  r26
out  sreg,r26
pop  r31
pop  r30
pop  r27
pop  r26
#endasm
}
#pragma savereg+

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm(“cli”)
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
{
tx_buffer[tx_wr_index]=c;
if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
++tx_counter;
}
else
UDR=c;
#asm(“sei”)
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here
char k; //Masukkan Tipe data k sebagai Character
// Input/Output Ports initialization
// Port A initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTA=0×00;
DDRA=0×00;

// Port B initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTB=0×00;
DDRB=0×00;

// Port C initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTC=0×00;
DDRC=0×00;

// Port D initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTD=0×00;
DDRD=0×00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0×00;
TCNT0=0×00;
OCR0=0×00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0×00;
TCCR1B=0×00;
TCNT1H=0×00;
TCNT1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0×00;
TCCR2=0×00;
TCNT2=0×00;
OCR2=0×00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0×00;
MCUCSR=0×00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 19200
UCSRA=0×00;
UCSRB=0xD8;
UCSRC=0×86;
UBRRH=0×00;
UBRRL=0x0C;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0×80;
SFIOR=0×00;

// LCD module initialization
lcd_init(16);

// Global enable interrupts
#asm(“sei”)

while (1)
{
// Place your code here
k=getchar(); //Perintah untuk mengambil data
putchar(k); //Perintah untuk kirim data
lcd_putchar(k);//Perintah untuk menampilkan data pada LCD

};
}

Semoga Bermanfaat !!!!!!

About these ads

Author: Mr. S

Saya SMA di SMA Negeri 7 Bekasi. Sejak SMA lah mulanya saya senang mengenai seluk-beluk komputer. Ya.. , walaupun waktu itu masih tahap awam. Namun saya bertekat untuk mendalami bidang komputer ini. selepas saya lulus SMA, Dengan mendapatkan Beasiswa yang ditawarkan oleh pihak gunadarma.Memotifasi saya untuk kuliah di kampus tersebut.

3 thoughts on “Komunikasi USART di AVR ATMEGA8535

  1. mas, scematik buat rangkainanya seperti apa yah?

  2. mas kalo udah jadi nampak outputnya di LCD nya kaya gimana ya mas?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.