< 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의 전원을 끄고 켤 때 마다 프로그램이 수행되며 직렬포트로 전송하고 중료된다.
'IT_etc > dk-128 (ATmega128)' 카테고리의 다른 글
[스크랩] 8-2. avr 직렬 양방향 통신 (0) | 2009.08.25 |
---|---|
[스크랩] 7-2. 윈도우 기반 직렬 양방향 통신 (0) | 2009.08.25 |
[스크랩] 7-1. 윈도우 기반 직렬 단방향 통신 (0) | 2009.08.25 |
[스크랩] 6. 외부 EEPROM (0) | 2009.08.25 |
[dk-128] 내부 EEPROM 사용하기 (타이머 카운터 사용) (0) | 2009.07.06 |