본문 바로가기
코스웨어/10년 시스템제어

시스템제어-안태민(16번)_6월3일

by 알 수 없는 사용자 2010. 6. 3.
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로 하라하여 0111 대입하여 0111 = 7 이된다.


5번 0X00 0X00은 OSF값으로 
  8HZ를 지정하여 00 대입하여 000000 대입하니 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, 0X000X710X000X370X000X000X000X140X00,
              0X000XC7, 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, 0X000X710X000X37
    0X000X000X000X500X00,
    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, 0X000X710X000X370X000X000X000X140X00,
              0X000XC7, 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, 40963096))
  {
    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