|
|
发表于 2015-2-15 19:11:59
|
显示全部楼层
Hackerpro 发表于 2015-2-14 22:28 
有道理
不过这段程序的流程,这样写
SBUF = MESSAGE[a];//
由於我自己沒用過 51, 只好好奇看看, 如果有理解錯的地方, 請見諒.
我也明白你的思維是測試發送是否完成, 但問題在於第一個要發送的資料, 在發送之前並沒有做任何測試.
我在網上看到的解說 指 TI==1 代表 serial ready.
我的理解為 TI=0, 是告訴系統有資料要發送. 是在 SBUF 設定了數值後, 發送資料用.
在你的例子中, 發送完一個 byte 後, 再檢測 while (!TI); 待 TI 為 1 時, 再把它設定為 0, 就有可能出現第一個 char 重覆了.
假設在啟動時, serial 未 ready, TI 為 0, 由於你沒有檢查 TI 值就把第一個 byte 放到 SBUF, 然後等待.
結果系統就會把第一個 byte 發出去.
之後把 TI 設為 0, 當時 SUBF 不會被清除, 還是保留了第一個 byte 的值, 就會把它再發一次出去了.
之後在第一個 byte 重發後, 才去到再設定第二個 byte, 然後再一直執行下去. 就會得出第一個 byte 重複了的後果.
以上只是我憑空想像, 沒有驗證過的.
由於某止 arduino 板也有 serial 延遲的現象, 需要等待一下才可以使用, 所以我懷疑你的問題也可能相類似, 只是給果是多發了一次.
你有嘗試跟我的寫法把次序改變嗎? 看看是否可解決問題.
|
|