728x90
반응형
★★★★★★.★★★ RFID ★★★★★★★★★★★★★★★★
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TestCRC.C 파일과 MAIN.C 파일 맨아래 참조!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
EX)문제
* 초록불 : FLASH
* 빨간불 : ON
* 비트음 : FLASH
* 8HZ로 2초간.
TestCRC.C
1번 0X0D 는 13줄을 뜻함
2번 0X00 은 COM-Adr을 뜻하는데 항상 00으로 만들어주면된다.(PPT참조)
3번 0X71 은 0X71 SET OUTPUT을 참조하라는뜻으로 PPT 에서 참조하여 4번부터의 값을 정한다.(0X71은 48쪽)
4번 0X00 0X37은 OS값으로
BEEPER 를 FLASH로 하라고 지정하여 11 을 대입하니 3이 됨.
LED RED를 ON 하고, LED GREEN을 FLASH로 하라하여 01, 11 대입하여 0111 = 7 이된다.
5번 0X00 0X00은 OSF값으로
8HZ를 지정하여 00 대입하여 00, 00, 00 대입하니 00 0000 = 00 이 된다.
6번 0X00 0X14는 시간값으로
2초로 지정하여 20을 16진수로 바꾸니 14 가된다.
7번 0X00 0X00값은 항상 00으로 지정하여주고
8번 0XC7 0X76값은 TestCRC.C를 컴파일하여 나온 CRC값이다.
TestCRC.C를 컴파일 한후 실행시킨 CRC 값
Oxc776
ox00c7
등의 값이 나오면 위 0xC776의 값을 main.c 안 아래와같이 0XC7 , 0X76을 추가입력한다.
u_char caString[] = { 0X0D, 0X00, 0X71, 0X00, 0X37, 0X00, 0X00, 0X00, 0X14, 0X00,
0X00, 0XC7, 0X76 };
그리고 main.c를 실행.
아래 화면이 뜨면서 RFID 동작 한다
★★★★★★.★★★ RFID 파일 ★★★★★★★★★★★★★★★★
///////////////////////// TestCRC.C
#include <windows.h>
unsigned short MecCRC(void *arg)
{
unsigned short i;
unsigned short j;
unsigned short cnt;
unsigned short crc=0xFFFF;
unsigned short temp;
unsigned char *buf = arg;
cnt = (*buf) - 2;
#ifdef DEBUG
printf("### rfid_crc : SIZE = [%d]\n", cnt);
#endif //DEBUG
for(i=0 ; i < cnt ; ++i)
{
crc^= *(buf + i);
for(j=0 ; j < 8 ; ++j){
if(0 != (crc&0x0001))
{
crc=(crc>>1)^0x8408;
}
else
{
crc=(crc>>1);
}
}
}
#ifdef DEBUG
printf("### rfid_crc : Result = [0x%04X]\n", crc);
#endif //DEBUG
return crc;
}
int main()
{
// RFID 리더기 시리얼 셋팅:1초간 LED 깜빡임, 소리 내기
u_char caString[] = { 0X0D, 0X00, 0X71, 0X00, 0X37,
0X00, 0X00, 0X00, 0X50, 0X00,
0X00};
unsigned short ret = MecCRC(caString);
printf("0x%02X%02X\n", ((unsigned char *)&ret)[0], ((unsigned char *)&ret)[1]);
printf("0x%02X%02X\n", caString[11], caString[12]);
}
//////////////////////// MAIN.C
//예를 들어 4Hz로 8초간 빨간불이 깜박이고 초록불은 안켜진 상태에서 소리가 나도록 한다면 ?
//0D 00 71 00 3C(3E) 00 15 00 50
#include <windows.h>
//#include <stdio.h>
int main()
{
// RFID 리더기 시리얼 셋팅:1초간 LED 깜빡임, 소리 내기
u_char caString[] = { 0X0D, 0X00, 0X71, 0X00, 0X37, 0X00, 0X00, 0X00, 0X14, 0X00,
0X00, 0XC7, 0X76 };
DWORD dwWritten; // 쓰기 후 실제 쓴 바이트 수 저장 공간
DCB SerialState; // 시리얼 상태 저장
HANDLE hComm = CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
if (INVALID_HANDLE_VALUE == hComm)
{
printf("포트 열 수 없음\n");
return 0;
}
if(0 == SetupComm(hComm, 4096, 3096))
{
printf("버퍼 설정 에러\n");
CloseHandle(hComm);
return 0;
}
if(0 == PurgeComm(hComm, PURGE_TXABORT | PURGE_TXCLEAR))
{
printf("버퍼 초기화 에러\n");
CloseHandle(hComm);
return 0;
}
SerialState.DCBlength = sizeof(SerialState);
if(0 == GetCommState(hComm, &SerialState))
{
printf("시리얼 상태 읽기 에러\n");
CloseHandle(hComm);
return 0;
}
SerialState.BaudRate = CBR_38400; // 속도
SerialState.ByteSize = 8; // 바이트 크기
SerialState.Parity = EVENPARITY; // 패리티
SerialState.StopBits = ONESTOPBIT; // 스톱 비트
if (0 == SetCommState(hComm, &SerialState))
{
printf("시리얼 상태 설정 에러\n");
CloseHandle(hComm);
return 0;
}
if (0 == WriteFile(hComm, caString, sizeof(caString), &dwWritten, 0))
{
printf("쓰기 에러\n");
}
else
{
printf("쓰기 성공\n");
}
dwWritten =6;
ReadFile(hComm, caString, dwWritten, &dwWritten, 0);
printf("%02x %02x %02x %02x %02x\n", caString[0], caString[1], caString[2], caString[3], caString[4]);
CloseHandle(hComm);
return 0;
}
------------------------------------------------------------------------------------------------------
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TestCRC.C 파일과 MAIN.C 파일 맨아래 참조!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
EX)문제
* 초록불 : FLASH
* 빨간불 : ON
* 비트음 : FLASH
* 8HZ로 2초간.
TestCRC.C
1번 0X0D 는 13줄을 뜻함
2번 0X00 은 COM-Adr을 뜻하는데 항상 00으로 만들어주면된다.(PPT참조)
3번 0X71 은 0X71 SET OUTPUT을 참조하라는뜻으로 PPT 에서 참조하여 4번부터의 값을 정한다.(0X71은 48쪽)
4번 0X00 0X37은 OS값으로
BEEPER 를 FLASH로 하라고 지정하여 11 을 대입하니 3이 됨.
LED RED를 ON 하고, LED GREEN을 FLASH로 하라하여 01, 11 대입하여 0111 = 7 이된다.
5번 0X00 0X00은 OSF값으로
8HZ를 지정하여 00 대입하여 00, 00, 00 대입하니 00 0000 = 00 이 된다.
6번 0X00 0X14는 시간값으로
2초로 지정하여 20을 16진수로 바꾸니 14 가된다.
7번 0X00 0X00값은 항상 00으로 지정하여주고
8번 0XC7 0X76값은 TestCRC.C를 컴파일하여 나온 CRC값이다.
TestCRC.C를 컴파일 한후 실행시킨 CRC 값
Oxc776
ox00c7
등의 값이 나오면 위 0xC776의 값을 main.c 안 아래와같이 0XC7 , 0X76을 추가입력한다.
u_char caString[] = { 0X0D, 0X00, 0X71, 0X00, 0X37, 0X00, 0X00, 0X00, 0X14, 0X00,
0X00, 0XC7, 0X76 };
그리고 main.c를 실행.
아래 화면이 뜨면서 RFID 동작 한다
★★★★★★.★★★ RFID 파일 ★★★★★★★★★★★★★★★★
///////////////////////// TestCRC.C
#include <windows.h>
unsigned short MecCRC(void *arg)
{
unsigned short i;
unsigned short j;
unsigned short cnt;
unsigned short crc=0xFFFF;
unsigned short temp;
unsigned char *buf = arg;
cnt = (*buf) - 2;
#ifdef DEBUG
printf("### rfid_crc : SIZE = [%d]\n", cnt);
#endif //DEBUG
for(i=0 ; i < cnt ; ++i)
{
crc^= *(buf + i);
for(j=0 ; j < 8 ; ++j){
if(0 != (crc&0x0001))
{
crc=(crc>>1)^0x8408;
}
else
{
crc=(crc>>1);
}
}
}
#ifdef DEBUG
printf("### rfid_crc : Result = [0x%04X]\n", crc);
#endif //DEBUG
return crc;
}
int main()
{
// RFID 리더기 시리얼 셋팅:1초간 LED 깜빡임, 소리 내기
u_char caString[] = { 0X0D, 0X00, 0X71, 0X00, 0X37,
0X00, 0X00, 0X00, 0X50, 0X00,
0X00};
unsigned short ret = MecCRC(caString);
printf("0x%02X%02X\n", ((unsigned char *)&ret)[0], ((unsigned char *)&ret)[1]);
printf("0x%02X%02X\n", caString[11], caString[12]);
}
//////////////////////// MAIN.C
//예를 들어 4Hz로 8초간 빨간불이 깜박이고 초록불은 안켜진 상태에서 소리가 나도록 한다면 ?
//0D 00 71 00 3C(3E) 00 15 00 50
#include <windows.h>
//#include <stdio.h>
int main()
{
// RFID 리더기 시리얼 셋팅:1초간 LED 깜빡임, 소리 내기
u_char caString[] = { 0X0D, 0X00, 0X71, 0X00, 0X37, 0X00, 0X00, 0X00, 0X14, 0X00,
0X00, 0XC7, 0X76 };
DWORD dwWritten; // 쓰기 후 실제 쓴 바이트 수 저장 공간
DCB SerialState; // 시리얼 상태 저장
HANDLE hComm = CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
if (INVALID_HANDLE_VALUE == hComm)
{
printf("포트 열 수 없음\n");
return 0;
}
if(0 == SetupComm(hComm, 4096, 3096))
{
printf("버퍼 설정 에러\n");
CloseHandle(hComm);
return 0;
}
if(0 == PurgeComm(hComm, PURGE_TXABORT | PURGE_TXCLEAR))
{
printf("버퍼 초기화 에러\n");
CloseHandle(hComm);
return 0;
}
SerialState.DCBlength = sizeof(SerialState);
if(0 == GetCommState(hComm, &SerialState))
{
printf("시리얼 상태 읽기 에러\n");
CloseHandle(hComm);
return 0;
}
SerialState.BaudRate = CBR_38400; // 속도
SerialState.ByteSize = 8; // 바이트 크기
SerialState.Parity = EVENPARITY; // 패리티
SerialState.StopBits = ONESTOPBIT; // 스톱 비트
if (0 == SetCommState(hComm, &SerialState))
{
printf("시리얼 상태 설정 에러\n");
CloseHandle(hComm);
return 0;
}
if (0 == WriteFile(hComm, caString, sizeof(caString), &dwWritten, 0))
{
printf("쓰기 에러\n");
}
else
{
printf("쓰기 성공\n");
}
dwWritten =6;
ReadFile(hComm, caString, dwWritten, &dwWritten, 0);
printf("%02x %02x %02x %02x %02x\n", caString[0], caString[1], caString[2], caString[3], caString[4]);
CloseHandle(hComm);
return 0;
}
------------------------------------------------------------------------------------------------------
728x90
'코스웨어 > 10년 시스템제어' 카테고리의 다른 글
시스템제어 6월10일 보고서 (0) | 2010.06.11 |
---|---|
[시스템제어] 6월 9일 업무일지_1 20번 이창민 (0) | 2010.06.11 |
[시스템제어] 19번 이상은 (0) | 2010.06.08 |
6월 4일 보고서 17번 유성민 (1) | 2010.06.04 |
네트워크 프로젝트 (0) | 2010.06.03 |
시스템제어 [15번] 신관식 (0) | 2010.06.01 |
[시스템제어]0531_보고서 (14번 선동환) (0) | 2010.05.31 |
시스템제어 보고서 12번 박철민 (0) | 2010.05.27 |