본문 바로가기
코스웨어/16년 스마트컨트롤러

20160321_김가연_업무일지_데이터시트, 시리얼통신

by 알 수 없는 사용자 2016. 3. 22.
728x90
반응형

데이트 시트 수업이 긴 날이었습니다...!

이해하기 어려운 부분이지만

이해하려고 노력중입니다,.

TxDRxD를 봐둡니다.

 

오늘은 컴파일을 하면서 변수값 선언을 하는 것컴퓨터 간의 통신에 대해 배웠습니다.

 

일단,

컴파일을 하면서 변수값 선언을 하는 법을 먼저 보면

#include <stdio.h>


int main()
{
  printf("%d\n",F_CPU);



  return 0;
}

위와 같이 F_CPU라는 변수를 프린트하는데 변수의 값을 지정하지 않았으니

결과는

 

다음과 같은 에러 메세지가 나타나면서 컴파일 불가한 상태라는 결론이 나옵니다.

그렇지만 다른방법으로 한번 컴파일 해볼까요?

 

 

 

다음과 같이 입력하고 컴파일하면 컴파일이 가능합니다.

일단 저는 16000000을 입력하여 보았습니다.

그리고 실행시킨 후 결과를 보면

 

다음과 같이 입력한 값이 나옵니다.

 

 

일단 오늘 수업의 핵심은 통신에 관한것 입니다.

이론 수업을 통해서 통신에 시리얼패러럴이 있는것을 (어느정도)숙지하고 나서

기존에 프로그래밍 하던 디랙토리와 같은 디렉토리에 Usart.c 파일과 그에 대한 헤더파일을 만듭니다.

데이터 시트를 참고하여 메인 헤더파일에

#define  UBRR0H  (*((volatile unsigned char *)0xC5))
#define  UBRR0L  (*((volatile unsigned char *)0xc4))
#define  UBRR1H  (*((volatile unsigned char *)0xCD))
#define  UBRR1L  (*((volatile unsigned char *)0xCC))
#define  UBRR2H  (*((volatile unsigned char *)0xD5))
#define  UBRR2L  (*((volatile unsigned char *)0xD4))
#define  UBRR3H  (*((volatile unsigned char *)0x135))
#define  UBRR3L  (*((volatile unsigned char *)0x134))

#define  UDR0    (*((volatile unsigned char *)0xC6))
#define  UDR1    (*((volatile unsigned char *)0xCE))
#define  UDR2    (*((volatile unsigned char *)0xD6))
#define  UDR3    (*((volatile unsigned char *)0x136))

#define  UCSR0A  (*((volatile unsigned char *)0xC0))
#define  UCSR0B  (*((volatile unsigned char *)0xc1))
#define  UCSR0C  (*((volatile unsigned char *)0xC2))

#define  UCSR1A  (*((volatile unsigned char *)0xC8))
#define  UCSR1B  (*((volatile unsigned char *)0xC9))
#define  UCSR1C  (*((volatile unsigned char *)0xCA))

#define  UCSR2A  (*((volatile unsigned char *)0xD0))
#define  UCSR2B  (*((volatile unsigned char *)0xD1))
#define  UCSR2C  (*((volatile unsigned char *)0xD2))

#define  UCSR3A  (*((volatile unsigned char *)0x130))
#define  UCSR3B  (*((volatile unsigned char *)0x131))
#define  UCSR3C  (*((volatile unsigned char *)0x132))

를 추가합니다.

그에따라서 설정해야하는 값을

<Usart.c>에

#include "usart.h"


void USART0_Init()
{
  UBRR0H=((OSC/(16*BAUD))-1)>>8;//분리가능
  UBRR0L=((OSC/(16*BAUD))-1);
  //UCSR0A=(0<<RXC)|(0<<TXC)|(0<<UDRE)|(0<<FE)|(0<<DOR)|(0<<UPE)|(0<<U2X)|(0<<MPCM);
  UCSR0A=(0<<RXCIE)|(0<<TXCIE) |(0<<UDRIE) |(1<<RXEN) |(1<<TXEN) |(0<<UCSZ2) |(0<<RXB8) |(0<<TXB8);
  UCSR0C=(0<<UMSEL1)|(0<<UMSEL0)|(1<<UPM1)|(1<<UPM0)|(1<<USBS)|(0<<UCSZ1)|(1<<UCSZ0)|(1<<UCPOL);


}

위처럼 데이터시트를 참고하여 작성하고

<Usart.h>는

#ifdef __USART_H__
#define __USART_H__

#include "main.h"

#define OSC F_CPU
#define BAUD 115200

#endif //__USART_H__

위처럼 디파인 해줍니다.

 

그후 위의 데이터 시트에서 기억해둔 TxD와 RxD를 옆 컴퓨터와 교차해서 연결합니다. 그라운드도 서로 연결합니다.

 

 

위의 사진을 참고 합니다.

728x90