问题:51单片机在与电脑软件通讯的过程中,通讯了100多次 多200多次的时候会出现丢数的情况
1 B0 e, f* U1 ~4 |! }原帖地址:http://bbs.eeworld.com.cn/thread-70030-1-5.html
5 G) @. Y: S7 r
7 m& R. i# O2 S! ~解决办法:实际上数并没有丢 只是可能电路有时候不稳 造成了波特率的波动 导致了同步有点问题 ! c: h8 D" k" U- p5 v' \7 m# Z
原来的单片机程序:
! c) G) _, ] [# u6 {7 w& {4 Bvoid main()
: Y- ?- r% b8 N& B, _{
+ c! l3 ]* M. r5 d8 e# K
3 E6 r$ q" P4 y# r; i P1=0xff;
% f# L1 ]0 f0 X7 o main_init();0 h8 Z+ y6 M- P/ V
init_8253();" `# E* L7 D6 Q2 [
serial_init();
0 |/ w K: w: m( Z
4 w* x5 A* I, g while(1)7 s j2 P: Z: O
{
" S# D, j4 m& K6 n4 N3 B# t, b if(state >=3 ) //state代表接收的字节数 问题就出在这个判上, 7 A- [ i- D8 |: }# P
有时候就会发生 & v; q% _- _: G, J9 _
{ state<3的情况,就是我所说
1 v3 m( ~, G2 L: b4 Z 的丢数,其实数并有丢
/ L& |! X( t; w# H) l% N3 Q! m …… 我觉得从理论上讲能通讯( P. L& V8 l( Q# A4 |4 @
一次成功就通讯N次,
; o2 P* n* k2 e k4 \& p0 ^. D8 p2 X 因为同一个循环……事
! v$ W \4 v/ f. H" t* Y3 K5 A" q 实 证明错了…… 3 }& \5 }/ P. }0 n# B; e. M6 D1 J
}* ^. ~1 y+ Y! P8 q6 a$ h
}* a) c* ]* h- l. b
}
% T: e" P& I! O6 t+ a8 S! q: f0 W
9 o% I+ W, j z6 ], Q# I0 w' R1 r9 D3 j6 y
后来一直想为啥,在网上找了N久,终于发现有个类似的,于是在if之前多加了
/ Y- h) Y9 z( ]3 \% Sfor(timeout=0;timeout<800;timeout++); 就好了
# y, u$ i4 a2 f. F5 v
8 {$ F& p; Z2 y1 S4 q( y把经历写出来,可能问题很简单,我很菜鸟,不过还是希望和大家分享……
2 G( r( Q& k7 z+ Y7 a- Q V: Y1 v, e. ?- u [; W
[ 本帖最后由 卓信 于 2008-12-17 09:44 编辑 ] |