[마이크로 컴퓨터] PC와 ATmega128 보드의 비동기 USART 통신
본 자료는 6페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
해당 자료는 6페이지 까지만 미리보기를 제공합니다.
6페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

[마이크로 컴퓨터] PC와 ATmega128 보드의 비동기 USART 통신에 대한 보고서 자료입니다.

목차

1. 실험 목표

2. 실험이론

3. 회로도

4. 프로그램해석

5. 실험 결과 및 결론

본문내용

/결정한 숫자를 디스플레이하기 위해 출력되는 값을 배열로 선언
volatile unsigned long req[NUM_REQ] = {0, 0}; // REQ 초기화
double ms_ov_cycle; // 1회 오버플로에 소요되는 시간 저장
// 타이머/카운터0 인터럽트 서비스 루틴
SIGNAL(SIG_OVERFLOW0)
{ int i;
timer0++;// 오버플로마다 1씩 증가
PORTC = (timer0 % 2 == 0) ? led[(number % 100) / 10] : led[number%10]; // 오버플로 횟수가 짝수일 때 10자리, 홀수일 때 1자리 디스플레이
PORTD = (PORTD |0xC0) & ~(1<<((timer0 % 2 == 0) ? PD7 : PD6)); // 짝수일 때 PD7->1(십의 자리), 홀수일 때 PD6->1(일의 자리)선택
for(i=0; i if( req[i] > 0)// REQ 요청이 있을 때 만¸
req[i]--;// 시간 지연 경과 응답
}
// ms_interval초 시간 지연을 위한 오버플로 횟수 계산 함수
unsigned long ms_req_timer0(unsigned long ms_interval)
{return ( ms_interval <= 0) ? 0 : \
+ (unsigned long)(ms_interval / ms_ov_cycle);
}
intmain(void)
{
DDRC = 0xFF;
DDRD |= 1< DDRB |= 1< DDRB &= ~(1< PORTB |= 1< TCCR0 = 1< TCCR0 |= 1< TCCR0 |= 1< TIMSK |= 1< timer0 = 0;
sei();
ms_ov_cycle= MS_OVERFLOW_CYCLE;
OCR0 = 0;
number = OCR0*100/256;// OCR0 값과 number 값을 일치
while(1){
if( (req[REQ_UP]==0) && !(PINB & (1< req[REQ_UP] = ms_req_timer0(DEBOUNCE_CYCLE);
OCR0 = (OCR0 == 255) ? 255 : OCR0 + 1; //OCR0값이 0이 아니면 계속 1씩 증가시킴.
}
if( (req[REQ_DOWN]==0) && !(PINB & (1< req[REQ_DOWN] = ms_req_timer0(DEBOUNCE_CYCLE);
OCR0 = (OCR0 == 0) ? 0 : OCR0 - 1; //OCR0값이 0이 아니면 계속 1씩 빼줌.
}
number = OCR0 * 100/256;
}
return 0;
}
고속 PMW를 이용한 응용실험
#include
#include
#include "lcd.h"
#include "usart.h"
#define OC0 PB4
volatile unsigned int number;
static FILE usart1_stdio = FDEV_SETUP_STREAM(USART1_send, USART1_receive, _FDEV_SETUP_RW);
// main 함수
int main(void)
{ char lcd_string[2][MAX_LCD_STRING];
int x;
LCD_init();
USART_init(USART1, 25); // USART1 보오레이트 : 38400(UBRR=12), 8MHz
DDRC = 0xFF;
DDRB |= 1< TCCR0 = 1< TCCR0 |= 1< TCCR0 |= 1< sprintf(lcd_string[0], "USART1_Motor"); // LCD에 출력
LCD_str_write(0, 0, lcd_string[0]);
stdin = stdout = stderr = &usart1_stdio;
printf("%s", lcd_string[0]); // USART1에 테스트문자 출력
OCR0 = 0;
while(1){
printf("\r\nMotor Control 0-255, OCR0=?.?");
scanf("%d", &x); // 정수 x 입력
OCR0=x;
number=OCR0*100/256;
sprintf(lcd_string[1], "\r\nDuty Ratio=%-4d ", number);
printf("%s", lcd_string[1]); // 상대방에 문자 *로 되돌려 줌
LCD_str_write(1, 0, lcd_string[1]);
}
return 0;
}
5. 실험 결과 및 결론
이번 실험은 PC와 ATmega128 혹은 ATmega128 두개를 연동시킨 후 폴링을 이용하여 문자 송신, 수신을 해보는 실험이었다. 폴링이란 통신에서 폴링은 한 프로그램이나 장치에서 다른 프로그램이나 장치들이 어떤 상태에 있는지를 지속적으로 체크하는 전송제어 방식이다. 우리 조는 PC와 ATmega128을 연결하였는데 하이퍼 터미널이 처음에 뜨지 않았다. 실험자체가 굉장히 생소하고 이해가 잘되지 않았지만 회로를 살펴보고 rx와 tx를 바꿔 끼우니 제대로 나왔다. 고속 PMW를 이용한 모터 응용 실험도 하였는데 소스에 따라서 하이퍼 터미널과 LCD에도 값이 잘 나왔다.

키워드

  • 가격1,200
  • 페이지수18페이지
  • 등록일2014.11.15
  • 저작시기2013.9
  • 파일형식한글(hwp)
  • 자료번호#950331
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니