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

請問如何使用BCB,將RS232利用2次傳送,接收訊號

尚未結案
kevinchou
一般會員


發表:1
回覆:6
積分:1
註冊:2005-04-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-28 14:15:34 IP:140.124.xxx.xxx 未訂閱
各位大大: 因為初學者,對BCB部是很了解,我有一個程式,應用到單晶片,其作動的方式是使用BCB先傳送訊號給單晶片,在將單晶片所變化的數值傳給BCB,顯示在電腦螢幕上,因接收的訊號從0~66356 ,它傳送的方式,是利用2個8 bit傳送,先傳送低位元,在傳送高位元,所以在接收方面,需分兩次傳送,程式方面,目前只會使用一次傳送,所以只有0~255,請問要如何將程式更改,才能編成兩次傳送,達到16 BIT,會使用的大大,可以幫忙一下ㄇ,謝謝! unsigned char get_value(void) { String Temp; unsigned char inbuff[2]; DWORD nBytesRead, dwEvent, dwError; COMSTAT cs; ClearCommError(hComm,&dwError,&cs); if (cs.cbInQue > sizeof(inbuff)) { PurgeComm(hComm, PURGE_RXCLEAR); return(0); } ReadFile(hComm, inbuff,cs.cbInQue,&nBytesRead,NULL); inbuff[1]= '\0'; return(inbuff[0]); }
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-28 14:58:10 IP:221.169.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58630
kevinchou
一般會員


發表:1
回覆:6
積分:1
註冊:2005-04-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-28 16:25:49 IP:140.124.xxx.xxx 未訂閱
暗黑破壞神:    若有使用元件則要如何更改ㄋ,下面程式只能傳送一次,如何改成可傳送2次,以達到16BIT    //---------------------------------------------------------------------------    #include  #pragma hdrstop #include "data_trans.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HANDLE hComm; char index=0; void send_command(char i); unsigned char get_value(void); //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { char *ComNo; DCB dcb; String Temp; Temp = "COM" IntToStr(RadioGroup1->ItemIndex 1); ComNo = Temp.c_str(); hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); if (hComm == INVALID_HANDLE_VALUE) { MessageBox(0, "COM Port Open Error!!","Comm Error",MB_OK); return; } GetCommState(hComm,&dcb); dcb.BaudRate = CBR_9600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; if (!SetCommState(hComm, &dcb)) { MessageBox (0, "COM Setup Error!!!","Set Error",MB_OK); CloseHandle(hComm); return; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { if (hComm!=INVALID_HANDLE_VALUE) CloseHandle(hComm); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { if (hComm==0) return; Timer1->Enabled=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { Timer1->Enabled=false; Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { send_command(index); switch (index) { case 0: LabeledEdit1->Text=IntToStr(get_value());break; case 1: LabeledEdit2->Text=IntToStr(get_value());break; } if(index<2) index ; else index=0; } //--------------------------------------------------------------------------- void send_command(char i) { String Temp; char *SendData; int ln; unsigned long lrc,BS; if (hComm==0) return; Temp=i; SendData = Temp.c_str(); BS = Temp.Length(); WriteFile(hComm,SendData,BS, &lrc,NULL); } //--------------------------------------------------------------------------- unsigned char get_value(void) { String Temp; unsigned char inbuff[2]; DWORD nBytesRead, dwEvent, dwError; COMSTAT cs; ClearCommError(hComm,&dwError,&cs); if (cs.cbInQue > sizeof(inbuff)) { PurgeComm(hComm, PURGE_RXCLEAR); return(0); } ReadFile(hComm, inbuff,cs.cbInQue,&nBytesRead,NULL); inbuff[1]= '\0'; return(inbuff[0]); }
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-28 16:39:36 IP:221.169.xxx.xxx 未訂閱
1.誰送給誰? 2.我給你的網址。你去讀過了沒有?
kevinchou
一般會員


發表:1
回覆:6
積分:1
註冊:2005-04-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-28 17:21:07 IP:140.124.xxx.xxx 未訂閱
暗黑破壞神: 1.先是電腦送0、1的訊號,當送0的訊號,則接收單晶片所傳送的訊號,當送1的訊號,則接收單晶片 另一個腳位所傳送的訊號 2.您所給我的網址,我有去看過了!
kevinchou
一般會員


發表:1
回覆:6
積分:1
註冊:2005-04-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-28 17:24:22 IP:140.124.xxx.xxx 未訂閱
暗黑破壞神:    1.先是電腦送0、1的訊號,如下程式,當送0的訊號,則接收單晶片所傳送的訊號,當送1的訊號,則接收單晶片 另一個腳位所傳送的訊號 2.您所給我的網址,我有去看過了!    void __fastcall TForm1::Timer1Timer(TObject *Sender) {    send_command(index); switch (index) { case 0: LabeledEdit1->Text=IntToStr(get_value());break; case 1: LabeledEdit2->Text=IntToStr(get_value());break;    }    if(index<2) index ; else index=0; } ..................
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-28 17:54:12 IP:221.169.xxx.xxx 未訂閱
引言: 1.先是電腦送0、1的訊號,如下程式,當送0的訊號,則接收單晶片所傳送的訊號,當送1的訊號,則接收單晶片 另一個腳位所傳送的訊號 2.您所給我的網址,我有去看過了!
1.不要期待我會看你的程式。通常超過五行的程式,我就會有閱讀障礙了。 所以。請你把你的動作,講清楚說明白。 不要不清不楚的。 什麼叫"先是電腦送0、1的訊號"? 什麼叫”送0的訊號,則接收單晶片所傳送的訊號" 什麼叫”送1的訊號,則接收單晶片”這個跟上一行又有何不同? 發問,要把自己的問題講清楚。 不要讓人看那一大串的程式。程式是要自己寫。 我們只能跟你說觀念,概念。 2.你看過了。那他是怎麼做傳輸的?你看了嗎?
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-28 18:41:41 IP:210.68.xxx.xxx 未訂閱
kevinchou您好: PO程式碼的方式請參考版規說明,煩請修改謝謝您的配合 < href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58991">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58991
kevinchou
一般會員


發表:1
回覆:6
積分:1
註冊:2005-04-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-04-28 20:27:42 IP:140.124.xxx.xxx 未訂閱
版主: 謝謝您的意見,想請問的是,若要從單晶片傳送給電腦,bytesize 設定為 8-bit,目前所做的是,一次只接收一個byte,如果一次要接收2個byte,則要分2次傳送,想請教的是,分2次傳送,則程式修改的觀念為何,謝謝您!
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-04-28 20:48:06 IP:221.169.xxx.xxx 未訂閱
引言: 謝謝您的意見,想請問的是,若要從單晶片傳送給電腦,bytesize 設定為 8-bit,目前所做的是,一次只接收一個byte,如果一次要接收2個byte,則要分2次傳送,想請教的是,分2次傳送,則程式修改的觀念為何,謝謝您!
好吧。我問你答吧。 你的問題是出在那邊? 1.PC 送出你不會送? 2.單晶片送出你不會送? 3.PC 接收你不會接收? 4.單晶片接收你不會接收? 另請問一下單晶片是那一顆?
kevinchou
一般會員


發表:1
回覆:6
積分:1
註冊:2005-04-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-04-28 21:04:24 IP:140.124.xxx.xxx 未訂閱
版主: 謝謝您,目前的問題為PC接收,之前PO的程式已經可以接收訊號,只是可接收的值只有8-bit(0~255),想將可接收的範圍變成16-bit(0 ~ 66356),所以分2次傳送即可完成,問題所在點為如何傳送2次,是寫迴圈還是...,不好意思,打擾你納麼久。
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-04-28 21:30:37 IP:221.169.xxx.xxx 未訂閱
引言: 謝謝您,目前的問題為PC接收,之前PO的程式已經可以接收訊號,只是可接收的值只有8-bit(0~255),想將可接收的範圍變成16-bit(0 ~ 66356),所以分2次傳送即可完成,問題所在點為如何傳送2次,是寫迴圈還是...,不好意思,打擾你納麼久。
PC 接收要變成 16 bit? 你去看看 union 把收到的分別丟進上跟下位元。 就可以了。 或是你收到的上位元 * 256 下位元。 這樣不就是了嗎?????
kevinchou
一般會員


發表:1
回覆:6
積分:1
註冊:2005-04-28

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-04-28 22:42:17 IP:140.124.xxx.xxx 未訂閱
版主:    謝謝您的指導,我知道如何用了...謝謝你!^_^...< >< >
friendlly
高階會員


發表:22
回覆:144
積分:103
註冊:2003-04-08

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-05-02 18:02:51 IP:220.139.xxx.xxx 未訂閱
引言:
引言: 謝謝您,目前的問題為PC接收,之前PO的程式已經可以接收訊號,只是可接收的值只有8-bit(0~255),想將可接收的範圍變成16-bit(0 ~ 66356),所以分2次傳送即可完成,問題所在點為如何傳送2次,是寫迴圈還是...,不好意思,打擾你納麼久。
PC 接收要變成 16 bit? 你去看看 union 把收到的分別丟進上跟下位元。 就可以了。 或是你收到的上位元 * 256 下位元。 這樣不就是了嗎?????
看了你的問題與版主的回答,應該你已得到要的答案了吧.. 不過你問的怪怪: 問題所在點為如何傳送2次 <--------??? 應該是: 如何處理接收到的2筆資料吧? Right??? 發表人 - friendlly 於 2005/05/02 18:04:54
系統時間:2024-04-19 23:45:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!