问题:51单片机在与电脑软件通讯的过程中,通讯了100多次 多200多次的时候会出现丢数的情况
3 e* |. C, p3 L8 c, ?0 S原帖地址:http://bbs.eeworld.com.cn/thread-70030-1-5.html) D& v. K6 F8 @5 x& \% X/ f8 F
$ p7 j( K4 a7 o* ^* S7 v# P
解决办法:实际上数并没有丢 只是可能电路有时候不稳 造成了波特率的波动 导致了同步有点问题 9 l, Y( `5 _- _2 u Q9 U; X- H
原来的单片机程序:1 r4 e' l9 ?1 b/ K. m
void main()1 P1 H( A/ n! {1 e' E7 z- ^
{$ w, [3 c3 J U6 ]& b# K+ ?+ o
- f; W# U, N# K3 k( n1 l P1=0xff;
/ Q7 M2 s4 H/ |9 m) i3 D main_init();" x" _/ k9 ~6 E2 q! p
init_8253();
) v3 ]! }4 y5 f H- N serial_init();
2 P5 W8 x2 h) o$ X2 l& O
7 l2 {: S2 G2 j1 A8 B b while(1); I+ ]4 E# M$ P. d* N
{
# b* F2 g) @8 h if(state >=3 ) //state代表接收的字节数 问题就出在这个判上, ' u1 P+ d( }: {: G9 `- |$ c: d- x
有时候就会发生
4 X s) B' n* X- W: L { state<3的情况,就是我所说) |6 N" X" r8 R# i
的丢数,其实数并有丢4 c3 F7 L2 f7 _& g% [- M" I
…… 我觉得从理论上讲能通讯
7 v8 ?5 P0 q- H 一次成功就通讯N次,
! c+ U4 r3 C; o+ }8 h) `- z 因为同一个循环……事
9 F. k& ^0 R2 u+ s 实 证明错了……
) T6 [$ T' M" o) m' G: } }; `+ a. W- z; c8 c/ K6 r
}: c; G! n: ~/ E, k2 H
}
/ c0 E( b6 ]/ s! X9 p% b$ k4 y; ] m6 V4 I& d
' z% D) V# W" y% g% b+ k后来一直想为啥,在网上找了N久,终于发现有个类似的,于是在if之前多加了( t9 Z, p: |" t/ y6 @
for(timeout=0;timeout<800;timeout++); 就好了7 ^) s. }8 u- q5 R
5 s$ R! I- B" x4 x+ ?把经历写出来,可能问题很简单,我很菜鸟,不过还是希望和大家分享……3 D4 |; B/ Q5 v( I
% w6 h7 l' \9 X5 ~1 m[ 本帖最后由 卓信 于 2008-12-17 09:44 编辑 ] |