問題:51單片機在與電腦軟件通訊的過程中,通訊了100多次 多200多次的時候會出現(xiàn)丟數(shù)的情況
) W8 b* J9 u/ |$ N1 o原帖地址:http://bbs.eeworld.com.cn/thread-70030-1-5.html# J @, @# T+ J; a
" r# i) |# C7 _3 j$ d+ G$ h9 v# T解決辦法:實際上數(shù)并沒有丟 只是可能電路有時候不穩(wěn) 造成了波特率的波動 導致了同步有點問題
: j! Z. `+ W' `& Q2 g原來的單片機程序: B0 e/ X5 |" k, W
void main() z' }" X2 Q( d5 ~4 `, J
{4 ^- s5 x7 p1 D( s: H& |
# t A+ ` {: F; u
P1=0xff;
4 b: w/ D& G% a# l4 H main_init();
. ^1 S: U4 y1 m' s" ?2 T7 {" w init_8253();' j) b" B5 x/ ~1 t3 q
serial_init();
5 u. h9 i1 O% V& u N1 o" o! b! {5 ~- j3 e1 ^9 R
while(1)
, z. F9 \9 T* g! H {
" m b- c! e. S: ]( w/ m$ s if(state >=3 ) //state代表接收的字節(jié)數(shù) 問題就出在這個判上,
- c9 u: ]' Q$ f; N# m 有時候就會發(fā)生
' E5 e$ E/ h1 u { state<3的情況,就是我所說
! _ ^# c8 C3 q3 N! _7 `0 p% u 的丟數(shù),其實數(shù)并有丟
: |' X$ x! a2 j: L9 f" ` …… 我覺得從理論上講能通訊9 @6 g: M% n8 L, K5 y0 B
一次成功就通訊N次,
4 U6 M* p) C J5 ~* l 因為同一個循環(huán)……事* |# q: h- R' j, h, D4 g; R; M j
實 證明錯了…… A/ Y5 q9 y' d4 U- p
}
. z/ ~+ F, L, x' Q5 A B }: |. U) w5 w$ f/ X" O& L ]4 s+ J
}
/ B" M# U2 S3 B: P- D) U. X( q0 n, [+ [2 }
$ A J$ z: c8 P; h- K# p4 h: x( v/ n后來一直想為啥,在網(wǎng)上找了N久,終于發(fā)現(xiàn)有個類似的,于是在if之前多加了
- W4 ^' |1 i, ~0 d7 lfor(timeout=0;timeout<800;timeout++); 就好了
3 w: s: N0 p. R8 `5 j
7 b8 ^6 w N5 O& d8 P! a3 W7 N把經(jīng)歷寫出來,可能問題很簡單,我很菜鳥,不過還是希望和大家分享……
+ U" B9 h7 I5 e9 U0 h( ], u6 x
8 J3 v, T' b l, t' I[ 本帖最后由 卓信 于 2008-12-17 09:44 編輯 ] |