问题:51单片机在与电脑软件通讯的过程中,通讯了100多次 多200多次的时候会出现丢数的情况- F2 d; y" g: s7 |- w6 l3 @( C
原帖地址:http://bbs.eeworld.com.cn/thread-70030-1-5.html
; x& l* F! s7 x5 ?# s) s5 K. E" w/ D* S X6 D% Z* Q( m
解决办法:实际上数并没有丢 只是可能电路有时候不稳 造成了波特率的波动 导致了同步有点问题 * ~8 T$ ?& F, W j- S
原来的单片机程序:- X0 n4 ?* m+ e( C4 p) P
void main()
' I! A- T' n7 n5 {( G# F. c! b. R{
3 x6 |8 h+ ?, C/ d
# J$ X. y- C, j3 w8 x P1=0xff;
# D9 {6 } ?/ \6 K' c8 K, q main_init();
! |7 \- w( G8 t, } init_8253();
1 i8 D# a+ b+ ?8 Z& E% Q6 `7 y8 b serial_init();% F# a7 h$ v6 d( i$ p
' }8 Q$ B3 v9 g1 j" P! i! t
while(1)% p: O$ r4 V, _8 O; Y& R* `7 y' y V
{
* l; h% n' s' m3 Q# G% b; s! v if(state >=3 ) //state代表接收的字节数 问题就出在这个判上,
+ ]( t [ F9 |$ a! W0 g( j 有时候就会发生 ! @5 `/ o2 d: W5 {/ D8 M4 z7 m
{ state<3的情况,就是我所说
+ r( Q1 Z3 Z' S, r 的丢数,其实数并有丢
' s! Y. D3 w# J3 }. d …… 我觉得从理论上讲能通讯1 r+ W2 y+ N1 B0 [! u
一次成功就通讯N次,
E2 f+ ^; `. P# ?( j( s+ x$ i9 T, ~ 因为同一个循环……事6 r1 ^# z8 w2 \7 ~: K* D2 g" @$ q: c
实 证明错了…… 8 s* ^! O4 B5 U1 X. H8 n# |
}
& h$ S( M! C3 Y2 c }3 s/ f3 x9 a+ w7 D
}
: q7 ^' l3 P2 d' I$ N3 x$ p7 a7 z; y+ a+ E
" j- l- P c: h! U( I6 Q后来一直想为啥,在网上找了N久,终于发现有个类似的,于是在if之前多加了
1 j9 |8 p- j5 ^0 Lfor(timeout=0;timeout<800;timeout++); 就好了
i! j+ }, M3 }# p8 ]% Z! Y; g3 P- s# U0 i
把经历写出来,可能问题很简单,我很菜鸟,不过还是希望和大家分享……; x# `, D) q$ c+ q% R* f& }
% l6 n! p9 r+ t; ]1 Z, ?4 ~6 F* U% O[ 本帖最后由 卓信 于 2008-12-17 09:44 编辑 ] |