ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20140424 (시리얼 통신, USART블럭구조, 파일 입출력)
    부산IT학원/스마트컨트롤러 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" 파일을 열어봤다






Designed by Tistory.