問題:51單片機在與電腦軟件通訊的過程中,通訊了100多次 多200多次的時候會出現丟數的情況, S; ~1 B- U8 Q
原帖地址:http://bbs.eeworld.com.cn/thread-70030-1-5.html# X' d8 u+ Y: x" P
0 \: v1 \9 e6 I8 f解決辦法:實際上數并沒有丟 只是可能電路有時候不穩 造成了波特率的波動 導致了同步有點問題 9 _& [( f. ~: s$ p; j6 E
原來的單片機程序:& ^: D% E" s2 p e( O1 ~- w
void main()) _+ E% n0 m: \
{
5 f- j; ]( D# z5 g4 v k4 x. S5 W9 i: t4 |, k, O' u! I4 f$ z; M
P1=0xff;
( L# x+ B3 k O, b k9 x main_init();7 y( ~5 P, x. y/ I3 A
init_8253();
$ @( }4 T% f; o% ?5 F! O- u' a serial_init();
+ _! d0 q9 H; [* W$ f- B5 m+ s& t8 J( O' }/ |7 s0 U& A2 @
while(1)7 z7 M; \7 b( F3 Q k
{
- F/ G" Z0 H C# m if(state >=3 ) //state代表接收的字節數 問題就出在這個判上, 7 ]1 T5 i6 Y& @4 n' m! ?% ^+ y7 B; }
有時候就會發生 1 F6 @, r& j2 @3 N; @5 k) V
{ state<3的情況,就是我所說
; X$ j, s1 f4 B5 v5 |+ E1 x 的丟數,其實數并有丟
1 B9 j9 \; Q, u5 ^3 i# L7 G% u& F …… 我覺得從理論上講能通訊$ u( K0 _, M$ _, `/ a5 D1 c$ Q
一次成功就通訊N次,
0 b0 g. C6 E0 _# B- |. @ 因為同一個循環……事
2 U b. s" J( |. t, t8 t 實 證明錯了……
7 J- @ w' C4 t8 v! B( c }
) p4 O8 J# n. f3 N* V }. _" V( E7 E# Y6 q: p; g6 {" y
}6 E6 G2 T0 p X. h: Q u* ~
1 b# D0 C5 R5 j- \9 d
8 g! f& S8 C4 \
后來一直想為啥,在網上找了N久,終于發現有個類似的,于是在if之前多加了0 ~) t& X1 Q# H1 B8 v
for(timeout=0;timeout<800;timeout++); 就好了/ h/ d3 o& z& Y
3 ]* ]$ k2 h/ }6 i; t+ i1 g把經歷寫出來,可能問題很簡單,我很菜鳥,不過還是希望和大家分享……& E6 ^: V" t4 h
. g3 X8 C) k# f4 H q3 z+ \
[ 本帖最后由 卓信 于 2008-12-17 09:44 編輯 ] |