rs485半雙工軟體程式設計實現
方法1:讓作業系統正確的控制
rts訊號。
hcom = createfile(...)
...dcb dcb;
memset( &dcb, 0, sizeof(dcb) );
dcb.dcblength = sizeof(dcb);
dcb.fbinary = true; // binary mode, no eof check
dcb.fparity = false; // enable/disable parity checking
dcb.foutxctsflow = false; // cts output flow control
dcb.foutxdsrflow = false; // dsr output flow control
dcb.fdtrcontrol = dtr_control_disable; // dtr flow control type dtr_control_handshake;
dcb.fdsrsensitivity = false; // dsr sensitivity
dcb.ftxcontinueonxoff = false; // xoff continues tx
dcb.foutx = false; // xon/xoff out flow control
dcb.finx = false; // xon/xoff in flow control
dcb.ferrorchar = false; // enable error replacement
dcb.fnull = false; // enable null stripping
dcb.fabortonerror = false; // abort on error
dcb.baudrate = ...; // current baud rate
dcb.bytesize = ...; // number of bits/byte, 4-8
dcb.parity = ...; // 0-4=no,odd,even,mark,space
dcb.stopbits = ...; // 0,1,2 = 1, 1.5, 2
dcb.frtscontrol = rts_control_toggle;//
關鍵啊,什麼意思請參考
msdn
setcommstate( hcom, &dcb );
...然後就可以使用
readfile/writefile
執行rs485
的收發了。 方法
2: 人工控制。當有特殊要求,不能採用系統控制時採用。
2.a)
空閒時,讓串列埠進入接收狀態。必須使用
comsend
代替writefile
dcb.frtscontrol = rts_control_disable;//
關鍵啊,什麼意思請參考
msdn
setcommstate( hcom, &dcb );
int comsend( handle hcom, const void* pbuf, int ibufsize )
2.b)
空閒時,讓串列埠進入傳送傳送狀態,進入接收狀態時清除
rts,退出接收狀態時設定
rts。
這種流程要複雜一些,有這種要求的不多吧?自己參照上面的辦法去做吧。
使用以上這些辦法,完全可以相容3、
5、7、
9線制232和
485,422
,軟體不用關心串列埠的工作模式。
最後,如果板子上的
485傳送、接收使能沒有連到
rts上,你可得向賣板子的問清楚,如何設定這些使能端。否則,你就是改驅動,也無從下手啊。
wince RS485半雙工實現
rs485半雙工軟體程式設計實現 方法1 讓作業系統正確的控制 rts訊號。hcom createfile dcb dcb memset dcb,0,sizeof dcb dcb.dcblength sizeof dcb dcb.fbinary true binary mode,no eof che...
RS 485半雙工延時問題
學習485匯流排時,遇到延時問題,困擾很久。通過學習知道了485半雙工收發時必須延時,以保證系統的穩定性 可靠性。好多資料都介紹了485 防靜電 抗干擾電路。惟獨沒提 每一幀收發停止位 或第9位 的延時和 半雙工匯流排收發切換延時 問題。我覺得在半雙工狀態下 485 幀的收發和 匯流排的收發狀態切換...
RS485資料全雙工 半雙工的定義與應用
在序列通訊中,資料通常是在兩個站 如終端和微機 之間進行傳送,按照資料流的方向可分成三種基本的傳送方式 全雙工 半雙工 和單工,但單工目前已很少採用。1 全雙工方式 full duplex 當資料的傳送和接收分流,分別由兩根不同的傳輸線傳送時,通訊雙方都能在同一時刻進行傳送和接收操作,這樣的傳送方式...