问题:51单片机在与电脑软件通讯的过程中,通讯了100多次 多200多次的时候会出现丢数的情况& q, U9 \ r2 n. K1 i5 e
原帖地址:http://bbs.eeworld.com.cn/thread-70030-1-5.html
5 H/ s4 C8 ?! e/ r- T* o0 ~# j/ ~* l7 G. ?) T7 [
解决办法:实际上数并没有丢 只是可能电路有时候不稳 造成了波特率的波动 导致了同步有点问题
4 e) y1 b# c) S* b; v5 @ {原来的单片机程序:7 j' x+ k \! G# N! _
void main(). x1 g' j5 Q) Y% W4 C+ L
{4 J* m, t* a ^+ Z ^
$ \% q. r" K `
P1=0xff;* u7 l! T, N! s& g
main_init(); Y# B7 n- |. U, a
init_8253();# i3 \2 e) j+ R% c, b" J
serial_init();; n: O& }" ]/ X$ `% v" }
$ e9 n: D- U V% H& y! a* v
while(1)( Y& h3 C" l3 X( h
{; {% u4 W* ^4 q" x; B2 a( e
if(state >=3 ) //state代表接收的字节数 问题就出在这个判上, , Y8 o2 T( {" _2 t" M6 d8 U
有时候就会发生 5 C! M$ u4 ^; V
{ state<3的情况,就是我所说* h6 \% A) j3 ^1 @ @% q& [7 y
的丢数,其实数并有丢1 ?# x T6 E8 v( b. t6 @7 r
…… 我觉得从理论上讲能通讯9 U4 A% U; K% G' R1 R1 r
一次成功就通讯N次,9 ?! Y+ Z! X: G% R: M4 ?" \
因为同一个循环……事* ?( g4 i: C3 ^' n" e
实 证明错了…… 5 W. |7 e- l* \$ x- g% e
}
! x' ^% g$ C# m2 C }
+ n6 Q$ D k$ Q2 Q0 s}
; q4 d. J. r1 g6 Y
( r2 A5 m% v% p
* L1 F! B3 S: C3 p7 V# E6 a2 _后来一直想为啥,在网上找了N久,终于发现有个类似的,于是在if之前多加了6 b. B7 A) M6 V$ @0 H6 Q8 X
for(timeout=0;timeout<800;timeout++); 就好了
5 M( }, }$ F# Y1 Z' l2 C& P$ X6 q2 s$ z
把经历写出来,可能问题很简单,我很菜鸟,不过还是希望和大家分享……
0 Q5 w" u+ R) U9 E( ~% [, E% D, q& c; c; X5 }8 }$ p
[ 本帖最后由 卓信 于 2008-12-17 09:44 编辑 ] |