问题:51单片机在与电脑软件通讯的过程中,通讯了100多次 多200多次的时候会出现丢数的情况
3 E$ U- C! z' \% K% `原帖地址:http://bbs.eeworld.com.cn/thread-70030-1-5.html8 A2 o* F# {+ n; p" R/ ` J4 M3 T
0 M$ w' w t- N2 _! T! \
解决办法:实际上数并没有丢 只是可能电路有时候不稳 造成了波特率的波动 导致了同步有点问题
( v' a9 q6 d: d! n7 I原来的单片机程序:
0 }4 H: `: e9 e ~( g& tvoid main()7 |1 o* V- h% S8 l
{
~( u3 \- R+ b o( D1 d2 N+ N. ]6 J5 b
P1=0xff;9 T' |/ i7 M6 h8 C& V
main_init();
" y1 f6 f3 Y# m6 q init_8253();
) u/ T Y$ z7 V1 b- X, Y$ ^ serial_init();
) B ^+ ~& g a' e: c" f6 p6 f- Y& G5 L; u) V3 e5 i/ v G- `
while(1)6 G+ {! O% x0 j
{
+ l5 N( `$ l: b if(state >=3 ) //state代表接收的字节数 问题就出在这个判上, 8 R4 c8 {: L. M- Q- {5 ^
有时候就会发生
; }, S- H/ ~! z; B8 r { state<3的情况,就是我所说; h6 p' M9 @9 c: l! t3 l4 m
的丢数,其实数并有丢
2 D5 ]5 r( E4 A# n3 N' d; U …… 我觉得从理论上讲能通讯3 |: v B# ~& m" u
一次成功就通讯N次,# S1 d( l2 C5 d
因为同一个循环……事
9 E6 k/ i! w' Y 实 证明错了…… 7 P# r1 z$ |% m7 P5 m3 P. w5 O {
}5 m/ l2 I$ ?* t
}
% e$ H1 V3 | C6 T& l$ L# {}, ^ g7 k0 u4 e$ K
6 k% D! [3 V! k2 G: A7 R8 R' F) A3 T
后来一直想为啥,在网上找了N久,终于发现有个类似的,于是在if之前多加了% j6 m( k, T& C% D0 ^, k
for(timeout=0;timeout<800;timeout++); 就好了
/ G+ M8 K. Y( k8 `$ C
; j! {9 c2 K0 M8 g% o把经历写出来,可能问题很简单,我很菜鸟,不过还是希望和大家分享……6 i. Y& t* H4 K1 ~& m
5 }$ a# l& R, N, ^( ~
[ 本帖最后由 卓信 于 2008-12-17 09:44 编辑 ] |