-
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;
}'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글
20140430 (ADC, 컴파일 -D 옵션, extern, static) (0) 2014.04.30 20140429 (PC와 시리얼 통신으로 LCD 문자 찍기, 사용자 정의 폰트, fseek, ftell) (0) 2014.04.29 20140425 (UART Reg setting, c언어 파일 입출력, feof) (0) 2014.04.25 20140424 (시리얼 통신, USART블럭구조, 파일 입출력) (0) 2014.04.24 20140423 (LCD 속도 최적화, 직렬 병렬 통신, USART Reg, 열거형, 파일입출력, read, write) (0) 2014.04.23