xu3u4rmp4 發表於 2009-11-26 17:21:05

VB6-->RS232-->8051 寫51端程式盲點

我要做VB串列控制伺服馬達遇到問題
問題:
VB端Command1按下   丟出3筆串列資料
Private Sub Command1_Click()
   MSComm1.Output = Chr$(1)
    MSComm1.Output = Chr$(2)
    MSComm1.Output = Chr$(3)
End Sub

問題是51的部分
while (RI==0);{RI=0,a=SBUF;}   //把VB端1給a此時a=1
while (RI==0);{RI=0,b=SBUF;}   //把VB端2給b此時b=1
while (RI==0);{RI=0,c=SBUF;}   //把VB端3給c此時c=1
我的8051接收連續的3筆資料這樣可以順利的接收嗎?
我的51程式要怎樣才能接收連續的3筆資料?

miaoichi 發表於 2009-12-30 10:38:40

這樣寫是對的,但是應該每收完1BYTE就要去處理,而不是連續收3BYTE
可以while (RI==0);{RI=0,a=SBUF;}之後加一行處理
因為接收程式不應該是一筆一筆地收,這樣一來不彈性,二來會容易錯

mac1 發表於 2009-12-30 14:52:42

不考慮用中斷作嗎?
在中斷裡也是一個byte看一次,
這樣就不一定只收 3 byte
而且在中斷也不會把全部 mcu 資源都耗在 while裡

逃避不作 中斷是沒有用的
遲早都會遇見用中斷的機會
如果功能越來越多的時候
會用中斷才會進步阿.......

miaoichi 發表於 2009-12-30 16:59:12

本帖最後由 miaoichi 於 2009-12-30 17:01 編輯

這樣感覺你對8051的中斷可能不熟
因為你在接收時,buf滿8位元後,會產生
一個中斷,然後會跳到一個中斷副程式
把你要的判斷或功能寫在裡面,
這樣就不會有問題了
因為mcu中斷一次然後處理完,第2個byte都還沒滿
比你想像中的還快,所以不會有這樣的問題


補充一下,你的mcu是會處理正常情況下,當rx收到data時,會一個bit的存起來
直到8個位元,然後產生一個中斷,處理完又回到正常狀態,又下一個中斷來
再去執行,這樣週而復始。

wendy0023 發表於 2012-3-6 17:37:36

親愛的朋友,
其實你可以賺得比現在快10倍,
錢賺得少不是你的錯,只是還沒找到方法!

誠心跟大家分享一個很棒的網路事業!!
讓智慧型自動化網路賺錢系統加倍你的收入!!
立即點入下列網址,免費試用系統90天〈需年滿20歲,無誠勿試〉
歡迎跟我一起打拼賺錢>> http://litailhsu.blogspot.com/
                              >> http://litailhsu.blogspot.com/


(註冊成功後,請每天務必查收信箱重要信息!!)



---------
頁: [1]
查看完整版本: VB6-->RS232-->8051 寫51端程式盲點