프로그래밍/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 |