부산IT학원/스마트컨트롤러

20140424 (시리얼 통신, USART블럭구조, 파일 입출력)

EHOzlO 2014. 4. 24. 12:46

49일차






-----------------------

ATMega128 직렬통신

-----------------------



- PIN 당 몇 가지 기능을 가지고 있음.


1번 핀은 1가지 기능

2, 3번 핀은 3가지 기능

15, 16번 핀은 2가지 기능

한가지 기능을 사용 중이면 다른 기능은 사용할 수 없다.



- 시리얼 통신 RS-232 (UART 표준)

3선 - Tx (Transmitter 송신부)

     - Rx (Receiver 수신부)

     - G (Ground)


RS-232방식을 사용하는 장비와 통신할 때

다른 방식으로 작동하는 장비는 꼭 변환기를 거쳐야

장비에 손상을 주지 않고 통신할 수 있다



ATMega128의 경우

동기직렬통신(USART)도 가능하게 했다.


동기 통신의 경우 선이 더 추가되니 비용이 비싸지지만

속도가 빠르다.


비동기 통신의 경우 비용이 싸지지만 패리티bit(오류검출용)와

시작 신호, 끝 신호를 함께 보내기 때문에 속도도 느리다.





- USART 블럭 구조


- XCK 는 동기 통신할 경우 사용하는 신호선


- PARITY bit는 H의 갯수가 짝수로 맞출지 홀수로 맞출지에 따라서

그 갯수를 맞춰서 오류 검출용으로 사용하는 bit이다.

ex) 0110 1011로 정보를 보냈는데 parity를 짝수로 맞췄다면

      parity bit에 1을 넣어주고

     홀수로 맞췄다면 parity bit에 0을 넣어줘서

     이 정보가 중간에 바뀌지 않았는지 오류 검출할 수 있다.


그러나 이것도 한 bit만 바뀌었을 경우 오류 판별할 수 있으나

두 bit이상 바뀌었을 경우 오류 판별은 힘들어진다.






- 소스 분할

  각각 관련된 것끼리 분할하여 관리하기 더 쉽게 나눴다.

smart.h

Lcd.h

Lcd.c

Usart.h

Usart.c

main.c

makefile

....

# Target file name (without extension).
TARGET = main

# Object files directory
#     To put object files in current directory, use a dot (.), do NOT make
#     this an empty or blank macro!
OBJDIR = .

# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c Lcd.c Usart.c

.....

        추가된 부분으로, 컴파일할 소스를 추가할 수 있다.

makefile은 스크립트 파일로

     # 은 주석

     L-value는 변수

     R-value는 값

이다.






- C

------------------------

파일 입출력

------------------------


- fopen, fclose

파일을 열고 닫는 함수이다.

stdin, stdout, stderr도 일종에 파일로 인식한다.

ex) 소스

#include <stdio.h>

int main()
{
  fclose(stdout);

  fprintf(stdout, "This is first test.\n");

  return 0;
}

출력화면을 보면 아무것도 안나온다.

원래라면 화면에 출력되어야 하는데

fclose로 표준출력(stdout)을 닫아 버렸기 때문이다.



이번에는 텍스트 파일에 출력을 해보자

ex) 소스

#include <stdio.h>

int main()
{
  FILE * fp;

  fp = fopen("test.txt""w");

  fprintf(fp, "This is first test.\n");

  fclose(fp);

  return 0;
}

출력 화면엔 아무것도 안나오고

"test.txt" 파일을 열어봤다