问题:51单片机在与电脑软件通讯的过程中,通讯了100多次 多200多次的时候会出现丢数的情况8 u. R1 O, k8 ^# d
原帖地址:http://bbs.eeworld.com.cn/thread-70030-1-5.html
g( o3 {8 i) h6 \5 q6 U0 n( h n4 E7 X, Z: j; _( U
解决办法:实际上数并没有丢 只是可能电路有时候不稳 造成了波特率的波动 导致了同步有点问题
+ o4 z( o$ V* K; i原来的单片机程序:
* _) n" S1 R8 s( avoid main()
) @5 t( T9 P7 X* B4 K8 E{
4 \6 B" Z3 l! v; _
2 i6 Q2 {5 i+ U. m P1=0xff;$ i, E2 }! V9 W m
main_init();( E$ t0 y' M+ ]8 v A
init_8253();9 Q: z9 |0 k- o1 z
serial_init();; c- E& Y; j( V
- C" Z" @! _7 d
while(1)% u: z$ B R" n5 ?3 w5 h. z+ L: h
{
/ s7 C5 D1 L! q if(state >=3 ) //state代表接收的字节数 问题就出在这个判上, c! S+ z4 G, Q+ m w* @) G n
有时候就会发生
- k* s+ v' E2 u* v0 ?5 E3 f6 c6 R { state<3的情况,就是我所说
6 [6 i$ |% J3 [( R0 l 的丢数,其实数并有丢
. Q+ x% H3 g( S! I& h9 i* `; K …… 我觉得从理论上讲能通讯$ V# Y+ w1 g, `' V; |# i! F4 P
一次成功就通讯N次,
2 O% F4 K7 F k. g" p- w0 E 因为同一个循环……事 @+ z, K" x6 ?- a1 V
实 证明错了…… & u% w5 O) v5 r8 p' L6 K, e* v
}
4 _5 \) ]4 k9 @ }( c4 t' y5 s4 n: o# ^( O3 D, g
}/ `" \# E4 F3 y3 l* H0 d3 Y
. Z: T q3 n! \6 g0 |5 S) ^2 O5 u! \) j
后来一直想为啥,在网上找了N久,终于发现有个类似的,于是在if之前多加了! K% r( e3 H! O9 j
for(timeout=0;timeout<800;timeout++); 就好了
: ]! A+ n# u, C8 @! R( {) l4 m
1 l4 t- ?& [! {$ M7 \) e/ j: M把经历写出来,可能问题很简单,我很菜鸟,不过还是希望和大家分享……
" s! b1 \8 R* V
4 m& i# P2 B/ E r% m! ~: z[ 本帖最后由 卓信 于 2008-12-17 09:44 编辑 ] |