|
示波器發(fā)出一段波形,三個字節(jié),有起始位,1位停止位。
波形解碼如下
0000000001 0011110011 0100001011
用串口助手接收到的hex:009EA1
C++程序:
void com_init()
{
COMSTAT ComStat;
DWORD dwErrorFlags;
hCom = CreateFile("COM1",//COM1口
GENERIC_READ|GENERIC_WRITE, //允許讀和寫
0, //獨(dú)占方式
NULL,
OPEN_EXISTING, //打開而不是創(chuàng)建
0, //同步方式
NULL);
if (hCom == INVALID_HANDLE_VALUE)
CloseHandle(hCom);
SetupComm(hCom,1024,1024); //輸入緩沖區(qū)和輸出緩沖區(qū)的大小都是1024
COMMTIMEOUTS TimeOuts;
//設(shè)定讀超時
//在讀一次輸入緩沖區(qū)的內(nèi)容后讀操作就立即返回,
//而不管是否讀入了要求的字符。
TimeOuts.ReadIntervalTimeout = MAXDWORD;
TimeOuts.ReadTotalTimeoutMultiplier = 0;
TimeOuts.ReadTotalTimeoutConstant = 0;
//設(shè)定寫超時
TimeOuts.WriteTotalTimeoutMultiplier = 100;
TimeOuts.WriteTotalTimeoutConstant = 500;
SetCommTimeouts(hCom, &TimeOuts); //設(shè)置超時
DCB dcb;
GetCommState(hCom, &dcb);
dcb.BaudRate = 9600; //波特率為9600
dcb.ByteSize = 8; //每個字節(jié)有8位
dcb.Parity = NOPARITY; //無奇偶校驗(yàn)位
dcb.StopBits = ONESTOPBIT; //1個停止位
SetCommState(hCom, &dcb);
ClearCommError(hCom,&dwErrorFlags,&ComStat);
}
void test_Version()
{
int tbit = 0;
unsigned char OutBuffer[4] = {0XAA,0xF1,0,0};
unsigned char InBuffer[3]={0};
DWORD wCount = 3; //read bytes
DWORD dwBytesWrite = 4; //寫入字節(jié)數(shù)
memset(InBuffer, '\0', 3);
ReadFile(hCom,InBuffer,wCount,&wCount,NULL);
}
代碼也是之前人寫的,一知半解。我現(xiàn)在就想讀取到Inbuff[3](三個字節(jié)的對應(yīng)波形的值)
目前讀取出來的全部都是0,請大蝦幫忙指點(diǎn)迷津。
|
|