用RS-232傳送資料 |
缺席
|
leeli
初階會員 發表:57 回覆:55 積分:27 註冊:2003-06-25 發送簡訊給我 |
|
dotdot
版主 發表:29 回覆:142 積分:64 註冊:2002-08-09 發送簡訊給我 |
給你如下程式碼
希望對你有幫助 BOOL OpenComm()
{
DCB dcb;
COMMTIMEOUTS TimeOut; //if(hCOM != INVALID_HANDLE_VALUE)
// return false; hCOM = CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL); if(hCOM != INVALID_HANDLE_VALUE)
{
ZeroMemory(&dcb,sizeof(dcb));
dcb.DCBlength = sizeof(dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if(!SetCommState(hCOM,&dcb)){
CloseHandle(hCOM); return false;}
if(!SetupComm(hCOM,1024L,4096L)){
CloseHandle(hCOM); return false;} TimeOut.ReadIntervalTimeout = 0;
TimeOut.ReadTotalTimeoutMultiplier = 0;
TimeOut.ReadTotalTimeoutConstant = 500;
TimeOut.WriteTotalTimeoutMultiplier = 0;
TimeOut.WriteTotalTimeoutConstant = 500; if(!SetCommTimeouts(hCOM,&TimeOut)){
CloseHandle(hCOM); return false;} CommFlash();
return true;
}
else
return false;
} BOOL CommFlash()
{
if(hCOM != INVALID_HANDLE_VALUE)
{
PurgeComm(hCOM,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
return true;
}
else
return false; } BOOL tx_byte(BYTE data)
{
DWORD ByteCount;
BYTE temp[2]; if(hCOM == INVALID_HANDLE_VALUE)
return false; temp[0]= data; WriteFile(hCOM,temp,1,&ByteCount,NULL); if(ByteCount ==1)
return true;
else
return false; } BYTE rx_byte()
{
DWORD ByteCount;
BYTE temp;
unsigned long j; if(hCOM == INVALID_HANDLE_VALUE)
return false; for(j=0;j<0xfffffff;j )
{
ReadFile(hCOM,&temp,1,&ByteCount,NULL);
if(ByteCount ==1)
return temp;
// else
// return false;
}
return false;
} void __fastcall TForm1::FormCreate(TObject *Sender)
{
if(!OpenComm())
Label1->Caption=" Open Serial Port Error"; }
//--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender)
{
CloseHandle(hCOM);
Close();
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
BYTE data;
char buf[2]; if(!tx_byte(0x55))
Label1->Caption="Send char error"; data=rx_byte();
sprintf(buf,"%x",data); Label2->Caption= buf;
} 發表人 - dotdot 於 2003/07/09 10:14:54
|
kylechen
一般會員 發表:1 回覆:3 積分:0 註冊:2003-04-23 發送簡訊給我 |
你在 "PurgeComm(hComm, PURGE_RXCLEAR);"
這一行設一個"中斷點"在你把資料傳送出去之後.會不會在這個地方
停止,我是猜測
ClearCommError(hComm,&dwError,&cs);
if (cs.cbInQue > sizeof(inbuff))
{
PurgeComm(hComm, PURGE_RXCLEAR);
return;
}
在這一段程式,如果你的輸入緩衝器的字元數都一直大於你的buffer,那
你自然就不會有任何的資料在Memo出現了..
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |