線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2072
推到 Plurk!
推到 Facebook!

用RS-232傳送資料

缺席
leeli
初階會員


發表:57
回覆:55
積分:27
註冊:2003-06-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-07 14:56:51 IP:210.80.xxx.xxx 未訂閱
Draes:   小弟我寫了一段用RS-232傳送資料的程式碼,如下: >>>> > > >>
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
dotdot
版主


發表:29
回覆:142
積分:64
註冊:2002-08-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-09 10:12:48 IP:211.22.xxx.xxx 未訂閱
給你如下程式碼 希望對你有幫助    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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-09 12:32:54 IP:61.222.xxx.xxx 未訂閱
你在 "PurgeComm(hComm, PURGE_RXCLEAR);" 這一行設一個"中斷點"在你把資料傳送出去之後.會不會在這個地方 停止,我是猜測 ClearCommError(hComm,&dwError,&cs); if (cs.cbInQue > sizeof(inbuff)) { PurgeComm(hComm, PURGE_RXCLEAR); return; } 在這一段程式,如果你的輸入緩衝器的字元數都一直大於你的buffer,那 你自然就不會有任何的資料在Memo出現了..
系統時間:2024-04-19 17:03:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!