본문 바로가기
임베디드

AVR실습 직렬통신

by 꿀꿀이냐옹이 2009. 7. 14.
반응형



#include<avr/io.h>

#define CPU_CLOCK     16000000         //MCU의 속도
#define BAUD_RATE   19200            //동신시 이용할속도?
#define BAUD_RATE_L   (CPU_CLOCK / (16l * BAUD_RATE)) -1                
#define BAUD_RATE_H   ((CPU_CLOCK / (16l * BAUD_RATE)) -1) >> 8
/* 통신속도의 결과 값을 입력하기 위해 상위 비트로 구분
 161은 16+L이며, 연산시 값이 너무 커져 OVERFLOW가 발생하므로
 32비트연산을 위해 16에 Long을 의미하는 l을 붙인다.*/

void uart_send_byte(unsigned char byte) //1비트전송 함수
{
 while (!(UCSR1A & (1 << UDRE))); //전송 버퍼가 빌때 까지 기다린다.
 UDR1 = byte; //문자 1개를 전송한다. 
}

int main(void)
{
 unsigned char buf[] = "Hello DK128!"; //전송할 문자열
 unsigned int i;
 
 UBRR1L = (unsigned char)BAUD_RATE_L;
 UBRR1H = (unsigned char)BAUD_RATE_H;
 
 //no parity, 1 stop bit, 8bit 설정
 UCSR1C = (0 << UPM1) | (0 <<UPM0) | (0 <<USBS) |
     (1 << UCSZ1) | (1 << UCSZ0);
 
 //rx/tx interrupt 설정 , 8bit 설정
 UCSR1B = (1 << TXEN) | (1 << RXEN) | (0<< UCSZ2);
 
 for(i=0;i < sizeof(buf);i++)//문자단위로 전체 문자열 전송
 {
  uart_send_byte(buf[i]);//문자 1개를 직렬포트로전송
 }
 return 1;//종료
}

반응형

댓글