/***Serial통신_3일차-RFID_도스용시리얼통신프로그램***/
어제하던 리눅스 시리얼 프로그래밍 마무으리
시리얼 통신 실습시 주의 사항
※ V3백신 프로그램을 사용하고 있다면
실습중에 종료해주면 시리얼 통신이 원활해집니다.
※ 리눅스 시리얼 통신 환경으로, 리눅스를 최신버전으로 업그레이드해주고
작업하는 것을 권장합니다.
/*--Non_Canonical.c--*/
#include<stdio.h>
#include<fcntl.h>
#include<termio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include "smart.h"
#define SPEED B19200
#define SPORT "/dev/ttyS0"
#define POLYNOM 0x8408
#define PRESET 0xFFFF
unsigned char ucAbeep[] = {0x0D, 0x00, 0x71, 0x00,
0x30, 0x00, 0x00, 0x00,
0x0A, 0x00, 0x00, 0x46, 0x41};
// int main1(void);
unsigned short CRC16(void * vpData , unsigned int uiLen);
int main1(void)
{
unsigned short usCRC = CRC16(ucAbeep, (ucAbeep[0] - 2) );
printf("%04x\n", usCRC);
return 0;
}
int main(void)
{
char cBuff[255];
int iDev = 0;
int iRet = 0;
struct termios stOldState;
struct termios stNewState;
iDev = open(SPORT, O_RDWR | O_NOCTTY);
if (0 > iDev)
{
perror(SPORT);
exit(-100);
}
tcgetattr(iDev, &stOldState);
bzero(&stNewState, sizeof(stNewState));
stNewState.c_cflag = SPEED | CRTSCTS | CS8 | CLOCAL | CREAD | PARENB;
stNewState.c_iflag = IGNPAR | ICRNL;
stNewState.c_oflag = 0;
stNewState.c_lflag = 0;
bzero(stNewState.c_cc, NCCS);
stNewState.c_cc[VTIME] = 0;
stNewState.c_cc[VMIN] = 10;
tcflush(iDev, TCIFLUSH);
tcsetattr(iDev, TCSANOW, &stNewState);
while (1)
{
getchar();
iRet = write(iDev, ucAbeep, ucAbeep[0]);
}
tcsetattr(iDev, TCSANOW, &stOldState);
close(iDev);
}
unsigned short CRC16(void * vpData , unsigned int uiLen)
{
unsigned int iCntX;
unsigned int iCntY;
unsigned short crc = PRESET;
unsigned char * DATA = vpData;
for (iCntX = 0; iCntX < uiLen; ++iCntX)
{
crc ^= DATA[iCntX];
for (iCntY = 0; iCntY < 8; ++iCntY)
{
if (crc & 0x0001)
{
crc = (crc >> 1)^POLYNOM;
}
else
{
crc = (crc >> 1);
}
}
}
return crc;
}
연결된 포트번호를 확인합니다. COM3
시리얼통신 도스프로그래밍 소스 :
/*---dos.c---*/
#include <Windows.h>
#include <stdio.h>
#define PRESET 0xFFFF
#define POLYNOM 0x8408
unsigned short CRC16(void * vpData, unsigned int uiLen);
int main(void)
{
u_char caString[255] = {0x0D, 0x00, 0x71, 0x00,
0x30, 0x00, 0x00, 0x00,
0x0A, 0x00, 0x00};
/*u_char caString[255] = {0x0D, 0x00, 0x71, 0x00,
0x30, 0x00, 0x00, 0x00,
0x0A, 0x00, 0x00, 0x46, 0x41}; */
DWORD dwCnt; // double world Written 쓰기 후 실제 쓴 바이트 수 저장 공간
DCB sPState; // struct Port State 시리얼 포트 상태 저장
HANDLE hComm // handle of Communication
= CreateFile("COM3"
, 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, 4096))
{
printf("버퍼 설정 에러\n");
CloseHandle(hComm);
return 0;
}
if (0 == PurgeComm(hComm, PURGE_TXABORT | PURGE_TXCLEAR))
{
printf("버퍼 초기화 에러\n");
CloseHandle(hComm);
return 0;
}
sPState.DCBlength = sizeof(sPState);
if (0 == GetCommState(hComm, &sPState))
{
printf("시리얼 상태 읽기 에러\n");
CloseHandle(hComm);
return 0;
}
sPState.BaudRate = CBR_38400; // 속도
sPState.ByteSize = 8; // 바이트 크기
sPState.Parity = EVENPARITY; // 패리티
sPState.StopBits = ONESTOPBIT; // 스톱 비트
if (0 == GetCommState(hComm, &sPState))
{
printf("시리얼 상태 설정 에러\n");
CloseHandle(hComm);
return 0;
}
*((unsigned short *)(caString + caString[0] - 2)) = CRC16(caString, caString[0] - 2);
WriteFile(hComm, caString, caString[0], &dwCnt, 0);
ReadFile(hComm, caString, 1, &dwCnt, 0);
ReadFile(hComm, caString + 1, caString[0] - 1, &dwCnt, 0);
printf("수신한 바이트 수는 %d 입니다.\n", dwCnt + 1); //
CloseHandle(hComm);
return 0;
}
unsigned short CRC16(void * vpData, unsigned int uiLen)
{
unsigned int iCntX;
unsigned int iCntY;
unsigned short crc = PRESET;
unsigned char * DATA = vpData;
for (iCntX = 0; iCntX < uiLen; ++iCntX)
{
crc ^= DATA[iCntX];
for (iCntY = 0; iCntY < 8; ++iCntY)
{
if (crc & 0x0001)
{
crc = (crc >> 1) ^ POLYNOM;
}
else
{
crc = (crc >> 1);
}
}
}
return crc;
}
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
2015.12.09_Dos Serial RFID_이량경 (5) | 2015.12.10 |
---|---|
20151209 임현수 업무일지 RFID 도스 시리얼 (5) | 2015.12.10 |
2015-12-10 RFID 개인업무일지 - 천정호 (4) | 2015.12.10 |
20151209_[안향진]_RFID_2 (5) | 2015.12.09 |
20151209 업무일지 -여지윤- RFID(Dos) (3) | 2015.12.09 |
20151209 - 홍준모 3일차 오전 : 가상 리눅스 RFID 시리얼 통신(실패), 오후 : 도스 RFID 시리얼 통신(성공) (4) | 2015.12.09 |
20151209 윤재희 Dos Serial 통신 (5) | 2015.12.09 |
20151209 수업 / RFID_2-남수진 (4) | 2015.12.09 |