問題:51單片機在與電腦軟件通訊的過程中,通訊了100多次 多200多次的時候會出現(xiàn)丟數(shù)的情況1 b g( z! `/ r& ?, q) f6 ~
原帖地址:http://bbs.eeworld.com.cn/thread-70030-1-5.html6 f M5 f/ R; c3 p
8 | I- I3 G6 u' c解決辦法:實際上數(shù)并沒有丟 只是可能電路有時候不穩(wěn) 造成了波特率的波動 導(dǎo)致了同步有點問題 5 d! k7 \+ }: N7 A
原來的單片機程序:
- H( c5 W7 \0 U% Y9 rvoid main()
& Q. c" e1 k% j7 D( N{3 [+ M5 h6 {9 T% N5 h
8 ~( ?- e% J0 k: x l
P1=0xff;
3 f) d; B0 _$ w main_init();
8 P! E# }2 Y3 j4 w% l( w& t init_8253();& d/ u z% t) W8 g1 q- Q
serial_init();
3 l& A% x) S. I6 J6 i
p# ^, {+ F8 W7 }! u" ` while(1). f2 W# w/ u, L& s% a" A
{( l# p! |1 M1 S5 \: S
if(state >=3 ) //state代表接收的字節(jié)數(shù) 問題就出在這個判上, 6 O" c- o) K! ]9 E5 @
有時候就會發(fā)生
3 A) ]3 f% V3 e { state<3的情況,就是我所說
6 H V x$ p% m _ k 的丟數(shù),其實數(shù)并有丟; b3 d+ L; }. z" B" c7 v8 q
…… 我覺得從理論上講能通訊9 l+ i, O0 ?' s; k9 U+ n: d, a
一次成功就通訊N次,
, }. h7 f7 h& |8 B* r1 d, [ 因為同一個循環(huán)……事
3 N; Z7 K! u" m2 B" O) y+ X 實 證明錯了……
% m/ ]4 T8 V3 F }% w+ c" D: B; u1 I0 S& B: b
}
$ \# y; j! m/ S' n. F}
/ k) w7 ^( o0 c) l/ b/ u: U4 t
/ Q8 U5 i G. }" s
7 L3 q/ d" M+ b1 ?3 @8 D$ R后來一直想為啥,在網(wǎng)上找了N久,終于發(fā)現(xiàn)有個類似的,于是在if之前多加了
+ ?# I. z7 ~% r9 g8 G. d. @0 h% sfor(timeout=0;timeout<800;timeout++); 就好了' q2 g& w2 o& e: k! A
) _. n: c* ?7 Q. I3 T6 s
把經(jīng)歷寫出來,可能問題很簡單,我很菜鳥,不過還是希望和大家分享……
' _+ B7 D( J+ E0 i+ E
; z1 X5 n# D, s) T7 ] J[ 本帖最后由 卓信 于 2008-12-17 09:44 編輯 ] |