IT_etc/dk-128 (ATmega128)

[스크랩] 8-1. avr 직렬 단방향 통신

JJun ™ 2009. 8. 25. 15:57

 < Hello world 문자열 DK과 하이퍼 터미널 주고 받기 >

 

 

 #include<avr/io.h>

 

#define CPU_CLOCK 16000000

#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

/*통신속도의 결과값을 입력하기 위해 상하위 비트로 구분

16l은 16+L이며, 연산시 값이 너무 커져 overflow가 발생하므로 32비트 연산을

위해 16에 Long을 의미하는 l을 붙인다.*/

 

void uart_send_byte(unsigned char byte)                      //1 byte 전송함수

{

           while(!(UCSR1A&(1<<UDRE)));                        //전송 버퍼가 빌 때까지 기다린다.

           UDR1=byte;                                                    //문자 1개를 전송한다.

}

 

int main(void)

{

           unsigned char buf[]="Hello DK128!";                   //전송 할 문자열

           unsigned int i;                                               //반복 제어 변수

 

           UBRR1L=(unsigned char)BAUD_RATE_L;             //baud rate 설정

           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;                  //종료

}

===================================================================================

< 실행 및 결과 >

윈도우의 하이퍼 터미널은 미리 열어둔다.

-파라미터 : Baud 19200, no parity, 1stop bit, 8byte size, no flow control

-DK128의 전원을 끄고 켤 때 마다 프로그램이 수행되며 직렬포트로 전송하고 중료된다.

 

출처 : 단 한번의 선택이라도 후회없이 하자!!
글쓴이 : 꼬리치는늑대 원글보기
메모 :