問題:51單片機在與電腦軟件通訊的過程中,通訊了100多次 多200多次的時候會出現丟數的情況' ^6 J0 l* ^& _, e
原帖地址:http://bbs.eeworld.com.cn/thread-70030-1-5.html; u7 o/ H# F9 K0 z9 N2 T5 k
4 _( N9 q1 Y9 [4 j6 d3 `& Y, m
解決辦法:實際上數并沒有丟 只是可能電路有時候不穩 造成了波特率的波動 導致了同步有點問題
( {, `# {; A" x' j) u原來的單片機程序:, \' b+ L' E5 d" Y, v: y
void main()
+ Y/ F7 ~3 a1 N0 e' U/ v% i2 R4 O& W{
" I/ S, N( G9 t+ {. H* C# l2 A5 I* C
9 F- B/ L7 V4 a3 t W8 k P1=0xff;! R2 P) A2 W- M
main_init();& ?/ i6 e& k1 C( l% {. i5 m% f |
init_8253();
1 t8 a2 N1 m8 W, e8 e8 r8 {; @ serial_init();
) g) S* ?4 F0 i3 T6 Z( ~
/ Z, M; K, D" k! E) ?% h9 f7 Y8 q& X. z while(1)
/ j8 u" H- R8 R0 V3 P { E# s1 |; T" h* L' s
if(state >=3 ) //state代表接收的字節數 問題就出在這個判上, 0 K0 @' k* k M/ ^/ z* H
有時候就會發生 ) v% K6 J. |; }6 x8 L' y
{ state<3的情況,就是我所說* V) g& { W; d
的丟數,其實數并有丟 K$ E! j' q# B5 q
…… 我覺得從理論上講能通訊
1 f" P, S+ x+ V* S6 a# w 一次成功就通訊N次,, K5 b/ q+ E* y' U
因為同一個循環……事
m7 B) h/ R* @$ W. M9 Q2 C- S; p 實 證明錯了…… 6 B, ^9 |' ^; \# t4 l. @! B
}) m% g: F4 G/ Z. Q
}
- \+ x3 M3 j: n+ C4 j. o}. y+ z( `- e7 T& K7 I
8 L# a! f8 X! d$ @. J9 p, K3 u; M5 S, {+ W D, i, H
后來一直想為啥,在網上找了N久,終于發現有個類似的,于是在if之前多加了
* z: Q. |. | n0 K1 R. @' gfor(timeout=0;timeout<800;timeout++); 就好了) D- }" H: M2 c4 }0 a1 @/ W
* A4 _* u- [" A' i- m5 U把經歷寫出來,可能問題很簡單,我很菜鳥,不過還是希望和大家分享……
4 |& I% T3 x% A% {4 @6 b' f& G9 |: Q* z9 R$ o" N
[ 本帖最后由 卓信 于 2008-12-17 09:44 編輯 ] |