프로그래밍/ATMega128

(ATMega128) PC와의 UART통신

길가다주운노트 2016. 7. 10. 19:11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/********************************************************************
 파일명 : UART_Echo.c
 
 동작  
 PC에서 보내는 데이타를 그대로 MCU에서 돌려보낸다.
 포트연결
 UART모듈의 RX에는 PE0를 TX에는 PE1를 연결한뒤 UART모듈을 컴퓨터 포트에 연결한다.
 소스 설명
 1) UART0로 한 문자를 전송한다.
 2) UART0로 한 문자를 받아온다.
 3) 출력할 문자열을 선언한다.
 4) UART0 통신을 선언한다.
 송수신 사용선언,No parity bit, 1 Stop bit, 115200bps
 5) 문자열의 끝을 의미하는 '\0' 가 올때까지 한문자씩 전송한다.
 6) 한문자씩 받아와서 다시 전송한다. 이때 '1'일 경우 특정 문자열을 출력한다.
********************************************************************/
#include<avr/io.h>
//1)
void putch(unsigned char data)
{
 while((UCSR0A & 0x20== 0);  //전송준비가 될때까지 대기 
 UDR0 = data;
 UCSR0A |= 0x20;      //UCSR0A 레지스터 중에서 5번째 비트(UDREn)를 세트하여 UDRE0를 클리어 함.
}
//2)
unsigned char getch()
{
 unsigned char data;
 while((UCSR0A & 0x80== 0);        //데이터를 받을 때까지 대기 
 data = UDR0;
 UCSR0A |= 0x80;      //UCSR0A 레지스터 중에서 7번째 비트를 세트하여 RXC0를 클리어 함.
 return data;
}
int main()
{
//3)
 unsigned char text[] = "\r\nWelcome! HONGGI TESTER!!!!!\r\n";
 unsigned char echo[]="ECHO >> ";
 unsigned char text1[]="blog.naver.com/ghdrl95 신홍기\n";
 unsigned char i=0;
//4)
 DDRE=0XFE;       //Rx(입력 0),Tx(출력,1)
 UCSR0A=0X00;
 UCSR0B=0X18;      //Rx, Tx enable
 UCSR0C=0X06;      //비동기 방식, No Parity bit, 1 Stop bit
 UBRR0H=0X00;
 UBRR0L=0X03;      //7.3728 MHz 에서 115200bps
//5)     
 while(text[i]!='\0')
  putch(text[i++]);
 i=0;
 while(echo[i]!='\0')
  putch(echo[i++]);
//6)
 while(1){
  unsigned char data=getch();
  if(data=='1')
  {
   i=0;
   while(text1[i]!='\0')
    putch(text1[i++]);
  }
  else
  {
   putch(data);
  }
 }
 return 0;
}
cs