Minggu, 09 Agustus 2009

Komunikasi rs232 UART/KOMPUTER

Kenapa Judulnya UART /KOMPUTER ?,

karena biasanya untuk pemula kita ingin bermain-main dengan data yang bisa hubungan dengan komputer.

Untuk dapat komunikasi dengan kmptr maka AVR menggunakan protokol rs232 kita dapat menggunakan chip max232 berikut gambarnya.



selanjutnya kita masukkan programmnya dngan menggunakan sourcecode berikut ini program untuk attiny2313; Program ini akan mengirim karakter A terus dan ketika kita masukkan data akan dibalas oleh mikro

#include

#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<#define PARITY_ERROR (1<#define DATA_OVERRUN (1<#define DATA_REGISTER_EMPTY (1<#define RX_COMPLETE (1<

// USART Transmitter buffer =======================================================
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE<256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif

// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
if (tx_counter)
{
--tx_counter;
UDR=tx_buffer[tx_rd_index];
if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
};
}

#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
// USART Transmitter buffer =======================================================

char i_dt;
char data_cmd[10];
//char flag3=0;


// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{


putchar(data);


};
}




#include
#include


// char SYNC=0x00;
// char addr=0x23;
// char cmd1=0x31;
// char cmd2=0x32;
// char cmd3=0x33;
// char cs;

void init_devices(void);


void main(void)
{
init_devices();

while(1){
putchar('A');
delay_ms(100);

}

}




void init_devices(void)
{
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0xFF;

PORTD=0x00;
DDRD=0x00;


// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Baud rate: 1200
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x06;
UBRRH=0x01;
UBRRL=0xA0;

// Global enable interrupts
#asm("sei")

}

dan jangan lupa untuk RX_TTC/TX_TTC dihubungkan dengan komputer sedang RX_TTC2OBDH/TX_TTC2OBDH ke AVR.

Selamat mencoba.

Tidak ada komentar: