목차
1. 실험 목적
2. 실험 부품
3. 관련이론
4. 프로그램 소스 해석 (AVR TO PC)
5. 실험결과
6. 추가 실험(AVR TO AVR)
7. 결론 및 고찰
2. 실험 부품
3. 관련이론
4. 프로그램 소스 해석 (AVR TO PC)
5. 실험결과
6. 추가 실험(AVR TO AVR)
7. 결론 및 고찰
본문내용
<0x40) str[i]에 data가 존재할 때까지
LCD_data_write(str[i]); //LCD에 data를 출력
}
usart.c
#include
#include"usart.h"
// 폴링을 이용한 문자 송수신을 위한 USART 초기화
void USART_init(unsigned char ch, unsigned int ubrr_baud)
{
if( ch == USART0){ // USART0 통신
UCSR0B |= 1< 수신핀
// TXEN0=1, USARTn 송신기능 활성화, TxDn핀 -> 송신핀
UBRR0H = ubrr_baud >> 8;
UBRR0L = ubrr_baud; // 입력받은 UBRR의 값을 UBRR0H와 UBRR0L에 나누어 저장
}else if(ch == USART1){ //USART1 통신
UCSR1B |= 1< 수신핀
// TXEN1=1, USARTn 송신기능 활성화, TxDn핀 -> 송신핀
UBRR1H = ubrr_baud >> 8;
UBRR1L = ubrr_baud;// 입력받은 UBRR의 값을 UBRR0H와 UBRR0L에 나누어 저장
}
}
// 폴링에 의한 문자 송신 함수
void USART1_send(char data)
{
while ( !( UCSR1A & (1<
UDR1 = data; // UDRn 레지스터에 값을 기록
}
// 폴링에 의한 문자 수신 함수
unsigned char USART1_receive()
{
while ( !(UCSR1A & (1<
return UDR1; // UDRn 레지스터에서 값을 읽는다
}
- 메인 프로그램
main.c
#include
#include
#include"lcd.h"
#include"usart.h"
#defineF_CPU16000000UL // 16MHz 클럭주파수사용
#include
intmain(void)
{char lcd_string[2][MAX_LCD_STRING]; // LCD에 디스플레이할 2차원 배열
LCD_init(); // LCD 초기화함수
USART_init(USART1, 12); // USART 초기화 함수( 초기프레임 포맷 설정)
// 비동기 통신 모드 / 8비트 / 패리티 없음 / 1 정지비트
// USART1 보오레이트 = 76800 (UBRR=12) , 16MHz
sprintf(lcd_string[0], " USART1 Test ");// LCD에 출력
LCD_str_write(0, 0, lcd_string[0]); // (0,0)의 위치에 lcd_string[0]을 출력
unsigned char cnt = 0; // 송신할data 변수 초기화
unsigned char rx_data; // 수신하data 변수 선언
while(1){
cnt++; // cnt 1증가
if(cnt>=255) { // cnt가 255이상이면 0으로 초기화
cnt = 0;
}
USART1_send(cnt); // 폴링을 이용하여 cnt 송신
rx_data = USART1_receive(); // 폴링을 이용하여 문자를 수신한 후 rx_data에 저장
sprintf(lcd_string[1], "RX=%3d", (int)rx_data); // 수신한 data를 lcd_string[]에 저장
LCD_str_write(1, 0, lcd_string[1]); // 수신한 data를 lcd에 디스플레이
_delay_ms(500); // delay
}
return 0;
}
실행 과정
1) 폴링을 이용한 문자 송신, 수신함수
2) sprinf() 함수로 입력받은 정수를 연산하여 LCD창에 출력
실험결과
1443 - 9 조와 1443 - 4조 함께 실험하였습니다.
Rx1핀과 Tx1핀을 서로 연결하여 비동기 USART통신을 수행하였으며 송신하고 수신한 값을 LCD에 출력하였다.
RX값이 1씩 증가되며 디스플레이 되어 송수신이 이루어진다는 것을 확인할 수 있다
7. 결론 및 고찰
ATmega128보드의 비동기 USART 통신 실험을 통하여 비동기모드 USART 통신 방법을 이해할 수 있었다. 폴링을 이용한 문자 송수신 함수를 작성하고 이해하였으며, sprintf() 함수로 입력받은 정수를 LCD_str_write() 함수를 이용하여 LCD창에 출력시키는 동작을 수행하고 그 원리를 이해하였다.
USART 통신은 동기 모드와 비동기모드의 두 가지 방식을 가지며, 이번 실험에서는 비동기 모드 USART 통신을 수행하였다. ATmega128의 Rx핀과 Tx핀을 연결하여 ATmega128에서 data를 송신하고 다시 수신 받는 형태로 진행하였다. USART 초기화 함수, USART_init() 함수를 통하여 기본적인 프레임 포맷을 설정하였다. 초기화를 통하여 비동기 통신모드, 8비트, 패리티 없음, 1 정지비트로 설정하고, 입력받은 UBRR값으로 원하는 보오레이트 값을 설정하였다. 또한 폴링을 이용한 문자 송신과 수신 함수를 사용하였다. 문자 송신함수는 UDR레지스터의 UDREn 비트가 1이 될 때까지, 즉 UDR 레지스터가 빌 때까지 폴링한 후 UDR 레지스터에 값을 기록하였으며, 문자 수신함수는 RXCn 레지스터에 문자 수신을 검사하여 RXCn 비트가 1이 될 때까지 폴링한 후 UDR 레지스터의 값을 읽어 들였다. sprintf()함수를 이용하여 송수신한 data를 lcd_string[]배열에 저장한 후 LCD_str_write()함수를 통하여 LCD에 디스플레이 하였다. data를 내보내고 data를 수신 받는 형태인 ATmega128 보드에서의 USART 통신 과정을 LCD에 디스플레이 함으로써 결과를 정확히 확인하고 이해할할 수 있었다.
LCD_data_write(str[i]); //LCD에 data를 출력
}
usart.c
#include
#include"usart.h"
// 폴링을 이용한 문자 송수신을 위한 USART 초기화
void USART_init(unsigned char ch, unsigned int ubrr_baud)
{
if( ch == USART0){ // USART0 통신
UCSR0B |= 1<
// TXEN0=1, USARTn 송신기능 활성화, TxDn핀 -> 송신핀
UBRR0H = ubrr_baud >> 8;
UBRR0L = ubrr_baud; // 입력받은 UBRR의 값을 UBRR0H와 UBRR0L에 나누어 저장
}else if(ch == USART1){ //USART1 통신
UCSR1B |= 1<
// TXEN1=1, USARTn 송신기능 활성화, TxDn핀 -> 송신핀
UBRR1H = ubrr_baud >> 8;
UBRR1L = ubrr_baud;// 입력받은 UBRR의 값을 UBRR0H와 UBRR0L에 나누어 저장
}
}
// 폴링에 의한 문자 송신 함수
void USART1_send(char data)
{
while ( !( UCSR1A & (1<
}
// 폴링에 의한 문자 수신 함수
unsigned char USART1_receive()
{
while ( !(UCSR1A & (1<
}
- 메인 프로그램
main.c
#include
#include
#include"lcd.h"
#include"usart.h"
#defineF_CPU16000000UL // 16MHz 클럭주파수사용
#include
intmain(void)
{char lcd_string[2][MAX_LCD_STRING]; // LCD에 디스플레이할 2차원 배열
LCD_init(); // LCD 초기화함수
USART_init(USART1, 12); // USART 초기화 함수( 초기프레임 포맷 설정)
// 비동기 통신 모드 / 8비트 / 패리티 없음 / 1 정지비트
// USART1 보오레이트 = 76800 (UBRR=12) , 16MHz
sprintf(lcd_string[0], " USART1 Test ");// LCD에 출력
LCD_str_write(0, 0, lcd_string[0]); // (0,0)의 위치에 lcd_string[0]을 출력
unsigned char cnt = 0; // 송신할data 변수 초기화
unsigned char rx_data; // 수신하data 변수 선언
while(1){
cnt++; // cnt 1증가
if(cnt>=255) { // cnt가 255이상이면 0으로 초기화
cnt = 0;
}
USART1_send(cnt); // 폴링을 이용하여 cnt 송신
rx_data = USART1_receive(); // 폴링을 이용하여 문자를 수신한 후 rx_data에 저장
sprintf(lcd_string[1], "RX=%3d", (int)rx_data); // 수신한 data를 lcd_string[]에 저장
LCD_str_write(1, 0, lcd_string[1]); // 수신한 data를 lcd에 디스플레이
_delay_ms(500); // delay
}
return 0;
}
실행 과정
1) 폴링을 이용한 문자 송신, 수신함수
2) sprinf() 함수로 입력받은 정수를 연산하여 LCD창에 출력
실험결과
1443 - 9 조와 1443 - 4조 함께 실험하였습니다.
Rx1핀과 Tx1핀을 서로 연결하여 비동기 USART통신을 수행하였으며 송신하고 수신한 값을 LCD에 출력하였다.
RX값이 1씩 증가되며 디스플레이 되어 송수신이 이루어진다는 것을 확인할 수 있다
7. 결론 및 고찰
ATmega128보드의 비동기 USART 통신 실험을 통하여 비동기모드 USART 통신 방법을 이해할 수 있었다. 폴링을 이용한 문자 송수신 함수를 작성하고 이해하였으며, sprintf() 함수로 입력받은 정수를 LCD_str_write() 함수를 이용하여 LCD창에 출력시키는 동작을 수행하고 그 원리를 이해하였다.
USART 통신은 동기 모드와 비동기모드의 두 가지 방식을 가지며, 이번 실험에서는 비동기 모드 USART 통신을 수행하였다. ATmega128의 Rx핀과 Tx핀을 연결하여 ATmega128에서 data를 송신하고 다시 수신 받는 형태로 진행하였다. USART 초기화 함수, USART_init() 함수를 통하여 기본적인 프레임 포맷을 설정하였다. 초기화를 통하여 비동기 통신모드, 8비트, 패리티 없음, 1 정지비트로 설정하고, 입력받은 UBRR값으로 원하는 보오레이트 값을 설정하였다. 또한 폴링을 이용한 문자 송신과 수신 함수를 사용하였다. 문자 송신함수는 UDR레지스터의 UDREn 비트가 1이 될 때까지, 즉 UDR 레지스터가 빌 때까지 폴링한 후 UDR 레지스터에 값을 기록하였으며, 문자 수신함수는 RXCn 레지스터에 문자 수신을 검사하여 RXCn 비트가 1이 될 때까지 폴링한 후 UDR 레지스터의 값을 읽어 들였다. sprintf()함수를 이용하여 송수신한 data를 lcd_string[]배열에 저장한 후 LCD_str_write()함수를 통하여 LCD에 디스플레이 하였다. data를 내보내고 data를 수신 받는 형태인 ATmega128 보드에서의 USART 통신 과정을 LCD에 디스플레이 함으로써 결과를 정확히 확인하고 이해할할 수 있었다.
추천자료
정보처리기능사 기출문제 암기요약
반도체 메모리 종류와 기능
가부장적 성윤리가 성매매에 미치는 영향
가설공사, 토공사, 기초공사의 신공법의 조사
[ADSL]ADSL(비대칭디지털가입자회선)의 특징, ADSL(비대칭디지털가입자회선)의 추진배경, ADS...
미래사회와 조직 - 미래사회의 과학기술과 영향력
안드로이드 음성인식을 이용한 ATmega RC카 제어(블루투스 통신)
챗봇의 개념 활용사례 및 시장전망 [챗봇인공지능4차산업chatbot음성비서챗봇사례왓슨]
[e-비즈니스 공통] 1 인터넷 주소 체계 중에서 도메인 네임(Domain Name)은 통상 네 묶음의 ...
소개글