'Programming > Avr128' 카테고리의 다른 글
| AVR128 UART Baud Rate 레지스터 설정 (0) | 2009/12/21 |
|---|---|
| AVR128 USART0 예제 (0) | 2009/03/03 |


| AVR128 UART Baud Rate 레지스터 설정 (0) | 2009/12/21 |
|---|---|
| AVR128 USART0 예제 (0) | 2009/03/03 |
//PC의 키보드로 10개를 순차적으로 보내면 AVR이 통째로 10개를 PC에게 보내는 소스
#include <avr/io.h>
#include <avr/interrupt.h>
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define BUFF_SIZE 10
BYTE receive_data[BUFF_SIZE], num, program_stop;
#define SW0 0x01
#define CHECK_SERIAL '@' //ascii code 0x40
#define CLEAR_ALL 0x00
#define SELECT_TXD 0x20
#define BAUD_HIGH 00
#define BAUD_LOW 16 //57600 bps
#define ALL_FLAG_CLEAR 0x00
#define USATR_RECEIVER_ENABLE 0x10
#define USATR_TRANSMITTER_ENABLE 0x08
#define USATR_CHARACTER_SIZE 0x06 //8bit
#define RX_INT_EN 0x80
#define TX_INT_EN 0x40
#define NO_OF_CHAR 10
#define TRUE 1
#define FALSE 0
void delay(void);
void initialize_serial(void);
void serial_check(void);
void transmit_interrupt(void);
void delay(void){
BYTE i,j;
WORD ta;
j=4;
ta = 65535;
for(i=0; i<=j; i++){
while(ta--);
}
}
void initialize_serial(void){
UBRR0H = BAUD_HIGH;
UBRR0L = BAUD_LOW;
UCSR0A = ALL_FLAG_CLEAR;
UCSR0B = USATR_RECEIVER_ENABLE | USATR_TRANSMITTER_ENABLE | RX_INT_EN | TX_INT_EN;
UCSR0C = USATR_CHARACTER_SIZE ;
}
void serial_check(void){
PORTA = 0x33;
while((PIND & SW0)==0x00);
while((UCSR0A & 0x20) == 0x00);
UDR0 = CHECK_SERIAL;
}
void transmit_interrupt(void){
if(num < NO_OF_CHAR){
while((UCSR0A & 0x20) == 0x00);
UDR0 = receive_data[num];
num++;
}
else if(num == NO_OF_CHAR) num = 0;
}
SIGNAL(SIG_USART0_RECV){
receive_data[num] = UDR0;
if(receive_data[num] == '#') program_stop = TRUE;
num++;
if(num == NO_OF_CHAR){
num=0;
transmit_interrupt();
}
}
SIGNAL(SIG_USART0_TRANS){
transmit_interrupt();
}
int main(void){
DDRA = 0xff;
num = 0;
initialize_serial();
serial_check();
PORTA = CLEAR_ALL;
sei();
while(1){
PORTA = 0x33;
delay();
PORTA = 0xcc;
delay();
if(program_stop == TRUE) break;
}return 0;
}
| AVR128 UART Baud Rate 레지스터 설정 (0) | 2009/12/21 |
|---|---|
| AVR128 USART0 예제 (0) | 2009/03/03 |
댓글을 달아 주세요