Robofun 機器人論壇

標題: VB6-->RS232-->8051 寫51端程式盲點 [打印本頁]

作者: xu3u4rmp4    時間: 2009-11-26 17:21
標題: 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
這樣寫是對的,但是應該每收完1BYTE就要去處理,而不是連續收3BYTE
可以while (RI==0);{RI=0,a=SBUF;}之後加一行處理
因為接收程式不應該是一筆一筆地收,這樣一來不彈性,二來會容易錯
作者: mac1    時間: 2009-12-30 14:52
不考慮用中斷作嗎?
在中斷裡也是一個byte看一次,
這樣就不一定只收 3 byte
而且在中斷也不會把全部 mcu 資源都耗在 while裡

逃避不作 中斷是沒有用的
遲早都會遇見用中斷的機會
如果功能越來越多的時候
會用中斷才會進步阿.......
作者: miaoichi    時間: 2009-12-30 16:59
本帖最後由 miaoichi 於 2009-12-30 17:01 編輯

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


補充一下,你的mcu是會處理正常情況下,當rx收到data時,會一個bit的存起來
直到8個位元,然後產生一個中斷,處理完又回到正常狀態,又下一個中斷來
再去執行,這樣週而復始。
作者: wendy0023    時間: 2012-3-6 17:37
親愛的朋友,
其實你可以賺得比現在快10倍,
錢賺得少不是你的錯,只是還沒找到方法!

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


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



---------




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2