ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20140428 (PC, ATMega128 간 시리얼 통신, fread, fwrite)
    부산IT학원/스마트컨트롤러 2014. 4. 28. 17:35

    51일차









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

    ATMega128 시리얼 통신

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



    --- ATMega128 -> PC로 데이터 보내기

    ex) 소스


    - main.c


    - Usart.h


    - Usart.c


    출력 화면




    계속 통신을 시험했을 때 오류가 났었는데

    ATMega128로 프로그램을 넣을 때 변환해 주는 칩을 낀 상태로 실행을 하니

    제대로 실행이 안됐었다.

    알고 보니 그 칩에도 TxD0, RxD0가 연결되어 보내는 신호가 잘 안됐었다.



    - UBRR (((F_OSC)/((BAUD)*16L))-1)

        여기서 L을 붙인 이유는 ATMega128은 8bit이기 때문에 2byte가 넘는 수는

        계산할 수 없다. 그래서 4byte 데이터인 Long 형으로 캐스팅 해준다는 뜻.


    - Usart_Tx(), Usart_Rx() 함수를 보면

    현재 송신이 끝났는지, 수신이 끝났는지 확인(while문)하고 데이터를 사용한다.






    - C

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

    파일 읽기 쓰기

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



    - fread, fwrite

    원형

    size_t fread(void * buf, size_t size, size_t count, FILE * stream);

    size_t fwrite(const void * buf, size_t size, size_t count, FILE * stream);

    성공시 전달인자 count, 실패 또는 파일 끝 도달시 count보다 작은 값 반환.


    buf는 말 그대로 메모리 공간(정보 저장된 곳 or 정보 저장할 곳)

    size, count는 서로 곱해서 buf 크기 만큼 나오면 된다.

    stream은 쓰거나 읽을 파일 스트림을 말한다.



    ex) 소스

    #include <stdio.h>

    typedef struct _smart
    {
      int iNum;
      char a;
      int iNum2;
      char b;
      short c;
    }Smart;

    int main()
    {
      FILE * fp;
      Smart test;
      Smart test2;

      printf("%d \n"sizeof(Smart) );

      fp = fopen("AA.bin""wb");

      test.iNum = 0x41424344;
      test.a = 'Z';
      test.iNum2 = 0x45464748;
      test.b = 'Y';
      test.c = 0x494A;

      fwrite(&test, sizeof(Smart), 1, fp);

      fclose(fp);



      fp = fopen("AA.bin""rb");

      fread(&test2, sizeof(Smart), 1, fp);

      printf("%08X \n", test2.iNum);
      printf("%c \n", test2.a);
      printf("%08X \n", test2.iNum2);
      printf("%c \n", test2.b);
      printf("%04X \n", test2.c);

      fclose(fp);

      return 0;
    }



Designed by Tistory.