全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3332
推到 Plurk!
推到 Facebook!

VB經由RS232,怎麼傳送大於128以上的數值到8051?

答題得分者是:src
nienwenhsun
一般會員


發表:1
回覆:4
積分:1
註冊:2009-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-29 14:17:07 IP:59.125.xxx.xxx 訂閱

小弟vb有將資料先轉成byte
com.output = ChrB ( 129 )
在傳送到51
只是51接收進來一樣是00

不知道有沒有方法能解決rs232傳送大於128以上的數值??
penguin5
資深會員


發表:116
回覆:317
積分:431
註冊:2004-05-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-29 15:09:36 IP:59.117.xxx.xxx 訂閱
 
將129改成16進位81在傳送到51,接收後再轉成10進位.
nienwenhsun
一般會員


發表:1
回覆:4
積分:1
註冊:2009-04-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-29 17:01:59 IP:59.125.xxx.xxx 訂閱
如果改成16進制再送
129變成81,VB送出去會先送8再送1,
51接收後
是可以先將8轉成2進制丟到高4位元
1就丟低4位元
不過這樣就變丟兩次
會增加時間

不知道還有沒有其它的好方法呢?
可以送一次就得到128以上的數值
感謝penguin5 大大的回答


===================引 用 penguin5 文 章===================
將129改成16進位81在傳送到51,接收後再轉成10進位.
編輯記錄
nienwenhsun 重新編輯於 2009-05-29 17:04:10, 註解 無‧
src
高階會員


發表:1
回覆:94
積分:154
註冊:2005-08-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-05-29 22:51:39 IP:61.217.xxx.xxx 訂閱

[code delphi]
Dim tx_byte(0) As Byte
Comm1.InputMode = 1
tx_byte(0) = (0→255) '要傳送的內容
Comm1.Output = tx_byte '傳送資料到RS-232C
Comm1.InputMode = 0
[/code]

===================引 用 nienwenhsun 文 章===================

小弟vb有將資料先轉成byte
com.output = ChrB ( 129 )
在傳送到51
只是51接收進來一樣是00

不知道有沒有方法能解決rs232傳送大於128以上的數值??
編輯記錄
src 重新編輯於 2009-05-29 22:55:10, 註解 無‧
src 重新編輯於 2009-05-29 22:56:25, 註解 無‧
nienwenhsun
一般會員


發表:1
回覆:4
積分:1
註冊:2009-04-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-05-30 08:42:39 IP:59.125.xxx.xxx 訂閱
如果pc對pc..src大大的方法是沒有問題
不過因為是pc對8051...
雖然output的data用byte送出
可是51接收進來的data還是錯誤
這也是我目前遇到的問題

感謝src大大方回答
不知道還有沒有其它的方法? thx..

===================引 用 src 文 章===================

[code delphi]
Dim tx_byte(0) As Byte
Comm1.InputMode = 1
tx_byte(0) = (0→255) '要傳送的內容
Comm1.Output = tx_byte '傳送資料到RS-232C
Comm1.InputMode = 0
[/code]
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-06-02 23:41:19 IP:219.84.xxx.xxx 訂閱
pc -> 8051 應該沒有所謂 128 的限制吧。

我記得以前做的時候,傳 0 - 255 都沒有問題啊。

是不是你兩邊的 BaudRate / Parity Check / ByteSize / Stopbit 沒有設一致




===================引 用 nienwenhsun 文 章===================
如果pc對pc..src大大的方法是沒有問題
不過因為是pc對8051...
雖然output的data用byte送出
可是51接收進來的data還是錯誤
這也是我目前遇到的問題

感謝src大大方回答
不知道還有沒有其它的方法? thx..

===================引 用 src 文 章===================

[code delphi]
Dim tx_byte(0) As Byte
Comm1.InputMode = 1
tx_byte(0) = (0→255) '要傳送的內容
Comm1.Output = tx_byte '傳送資料到RS-232C
Comm1.InputMode = 0
[/code]
nienwenhsun
一般會員


發表:1
回覆:4
積分:1
註冊:2009-04-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-06-03 08:55:20 IP:59.125.xxx.xxx 訂閱
兩邊的鮑率都設定一樣
如果設定不同
資料接收會不正確
目前傳0~127的資料都是正常
大於128以上就會變成0 (255是ok的)

VB目前試過用Bit & Byte輸出..
但51接收都不行
===================引 用 carstyc 文 章===================
pc -> 8051 應該沒有所謂 128 的限制吧。

我記得以前做的時候,傳 0 - 255 都沒有問題啊。

是不是你兩邊的 BaudRate / Parity Check / ByteSize / Stopbit 沒有設一致

編輯記錄
nienwenhsun 重新編輯於 2009-06-03 08:57:33, 註解 無‧
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-06-03 09:32:31 IP:203.79.xxx.xxx 訂閱
RS232 是用一個bit 一個bit在傳送,所以設定上不只是 baud rate 有關, Parity Check / ByteSize / Stopbit 的設定也都會影響傳送跟接收一致性。

另外你說 128 送會收到 0 ,但 255 送卻是正常。

128 -> 10000000 異常
256 -> 11111111 正常

這邏輯上似乎怎麼想都不通。有沒有可能是你 8051 上的接收程式處理邏輯有問題,導致收到訊息誤判為0。

===================引 用 nienwenhsun 文 章===================
兩邊的鮑率都設定一樣
如果設定不同
資料接收會不正確
目前傳0~127的資料都是正常
大於128以上就會變成0 (255是ok的)

VB目前試過用Bit & Byte輸出..
但51接收都不行
===================引 用 carstyc 文 章===================
pc -> 8051 應該沒有所謂 128 的限制吧。

我記得以前做的時候,傳 0 - 255 都沒有問題啊。

是不是你兩邊的 BaudRate / Parity Check / ByteSize / Stopbit 沒有設一致

nienwenhsun
一般會員


發表:1
回覆:4
積分:1
註冊:2009-04-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-06-03 16:49:45 IP:59.125.xxx.xxx 訂閱
這是我51的程式:
ORG 00H
START:
MOV SCON,#01010000B
MOV TMOD,#00100000B
MOV PCON,#10000000B
MOV TH1,#255
SETB TR1 MER1

MAIN:
JB RI,FINISH
JMP MAIN

FINISH:
MOV A,SBUF
MOV P1,A ;P1直接接LED燈
CLR RI
JMP MAIN
END


不知道51的程式設定上有沒有問題
煩請大大幫我看一下 THx.....
===================引 用 carstyc 文 章===================
RS232 是用一個bit 一個bit在傳送,所以設定上不只是 baud rate 有關, Parity Check / ByteSize / Stopbit 的設定也都會影響傳送跟接收一致性。

另外你說 128 送會收到 0 ,但 255 送卻是正常。

128 -> 10000000 異常
256 -> 11111111 正常

這邏輯上似乎怎麼想都不通。有沒有可能是你 8051 上的接收程式處理邏輯有問題,導致收到訊息誤判為0。
src
高階會員


發表:1
回覆:94
積分:154
註冊:2005-08-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-06-03 19:10:27 IP:59.117.xxx.xxx 訂閱
您好:
您的問題我之前也遇過,就是用下列方式解決。
先宣告陣列變數tx_byte(0)然後將tx_byte(0)=要傳送的內容,
在用陣列變數的名稱tx_byte傳送出去就可以。

Dim tx_byte(0) As Byte
Comm1.InputMode = 1
tx_byte(0) = (0255) '要傳送的內容
Comm1.Output = tx_byte '傳送資料到RS-232C
Comm1.InputMode = 0

===================引 用 nienwenhsun 文 章===================
這是我51的程式:
ORG 00H
START:
MOV SCON,#01010000B
MOV TMOD,#00100000B
MOV PCON,#10000000B
MOV TH1,#255
SETB TR1 MER1

MAIN:
JB RI,FINISH
JMP MAIN

FINISH:
MOV A,SBUF
MOV P1,A ;P1直接接LED燈
CLR RI
JMP MAIN
END


不知道51的程式設定上有沒有問題
煩請大大幫我看一下 THx.....
===================引 用 carstyc 文 章===================
RS232 是用一個bit 一個bit在傳送,所以設定上不只是 baud rate 有關, Parity Check / ByteSize / Stopbit 的設定也都會影響傳送跟接收一致性。

另外你說 128 送會收到 0 ,但 255 送卻是正常。

128 -> 10000000 異常
256 -> 11111111 正常

這邏輯上似乎怎麼想都不通。有沒有可能是你 8051 上的接收程式處理邏輯有問題,導致收到訊息誤判為0。
lishang83
初階會員


發表:12
回覆:44
積分:31
註冊:2005-07-30

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-06-07 23:32:42 IP:123.149.xxx.xxx 訂閱

[code vb]
Dim VSend(0 To 0) As Byte

VSend(0) = &H1
MSComm1.Output = VSend
MSComm1.Output = OutByte '送出数据
VSend(0) = &HAA
MSComm1.Output = VSend
End Sub

[/code]

------

☆☆ 网事如潮人如水,只叹世间人几回。 ☆☆
系統時間:2024-05-06 8:11:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!