问题:51单片机在与电脑软件通讯的过程中,通讯了100多次 多200多次的时候会出现丢数的情况
5 [4 Q! Q( U5 t3 z. U原帖地址:http://bbs.eeworld.com.cn/thread-70030-1-5.html
: h) A! H* R( U. t) `
0 H6 A, c, X. Q6 P, w6 {/ R. |" B1 @解决办法:实际上数并没有丢 只是可能电路有时候不稳 造成了波特率的波动 导致了同步有点问题 ; J5 U( T5 f: C9 D
原来的单片机程序:
1 f$ _8 L% J2 U& Y3 d+ svoid main()8 ?" @* a$ D* Q' ?/ d
{( n/ b- Z' J% C# C$ W" L+ u9 l
" d- U$ M9 ]0 K: K P1=0xff;5 ^" X* r) Z: X. F3 ~
main_init();& B( e1 C2 z1 w7 ]# B
init_8253();! \) X) A' x. y
serial_init();
. L$ N/ t3 p2 b+ [% o
( y3 O5 {) h; l9 W3 w while(1)
5 ]$ x7 Y! O6 T! K! _" ^ {
' j/ Z1 D% `% e, }) I( g if(state >=3 ) //state代表接收的字节数 问题就出在这个判上, - n- v, D5 t' \5 t0 @( m
有时候就会发生 ! {+ X( x7 T& |, p' v, N3 w L
{ state<3的情况,就是我所说+ f. }% l" L( J) E- T, l) I
的丢数,其实数并有丢1 \( _" [9 Y) @ T% d8 e
…… 我觉得从理论上讲能通讯
9 h9 V/ ~0 Z0 E4 X3 p7 \ 一次成功就通讯N次,
. T# I4 s* w8 V3 n/ N 因为同一个循环……事
5 T9 l# c6 h# I 实 证明错了……
# |5 Y, V4 f, h+ b+ X4 G }3 }" o. h" Q/ G/ [' S0 o
}: ^6 p; q6 B9 n0 \' m
}
8 A9 q4 p1 ~1 G3 H7 N5 W% J, z! N2 g, x0 ^( I
0 ^9 F, h1 |! }, d, O后来一直想为啥,在网上找了N久,终于发现有个类似的,于是在if之前多加了
1 x) g4 q3 T" q7 e3 Ifor(timeout=0;timeout<800;timeout++); 就好了
- `9 L& `* W& f4 h# b' ?4 x' j+ W7 \% z
把经历写出来,可能问题很简单,我很菜鸟,不过还是希望和大家分享……' k" H5 W1 [$ v7 T# V' U
7 o+ ~. [+ g; w
[ 本帖最后由 卓信 于 2008-12-17 09:44 编辑 ] |