找回密码
 注册
关于网站域名变更的通知
查看: 218|回复: 2
打印 上一主题 下一主题

单片机串口接收数据 怎么接收一个判断一个?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-12-2 10:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
遥控接收部分  不想接收完整的数据后再判断接收的数据是否正确  想接收一个判断一个  接收判断的部分怎么写  要C语言的  我现在只能判断第一个  往后就不会写了   比如接收123456  1到5需要判断  6存到Temp里 ( ]$ @3 e9 O! l8 ^( u  g/ Z) u5 v
9 ?9 Q( g( E; \1 o
void UARTInterrupt(void) interrupt 4
9 t0 _- |1 T+ B$ F  q0 E  s+ \{# r; e4 }; k3 ?
        if(RI)  , l9 m  ~; E% [9 J; S# M" @
        {   RI=0;   " F" R7 G: t2 o; @. F1 E
                Receive=SBUF;                 9 B+ x) q) g5 U8 E% R( E: ]
                if(Receive=='1')
9 o( g. s( o: }                {          Temp=Receive;
; c2 s. ~! D) s; |: a                }
9 |9 Q$ k9 p5 y        }. x7 p/ }8 U2 p+ B: X( s
        else& L; `4 t+ Q+ T* Z3 ~; ]
        TI = 0;5 t& J. A* k" k- s+ x7 a
} , R$ O# e& W1 b5 s* q9 q1 ]( h
1 }7 O: P( C" w" ?
" ^8 v" `9 a7 t( f

该用户从未签到

2#
发表于 2021-12-2 13:18 | 只看该作者
建议存缓存,然后统一判断, 如果非要收一个判断一个的话, 接收的时候啥事都干不了了。, N  Z- P0 ^4 h- r+ [4 w

, G4 S5 [. `& L" y5 n3 V接收时判断如下:7 l* l- ~6 \5 Y3 [
* g' _" T' t! p* n: |8 T
void UARTInterrupt(void) interrupt 4& E( H3 @) O0 Z0 A: }
{
# b1 K1 W4 e9 N4 N        u8        i;
+ r/ e" y& n7 ]# }7 N* V# d        if(RI)  
7 l6 G* G$ e. i: s% S6 a0 x        {   
: S$ T4 K, b( j: z* B                RI=0;   1 ~. c3 T, Z2 C8 q
                Receive=SBUF;                 
1 W2 ]( K3 G- u/ T! Q                if(Receive=='1')                //如果第一个字节吻合'1'
& ^: E' V$ d  Q3 v  K, b                {         
4 u$ D5 U' O' [6 {5 b3 X1 @                        i = 255;* C& j) E4 w0 X" O; H! v  U' a+ h
                        while((--i > 0) && (!RI));
! M$ M6 [" \3 B* r/ i4 l$ D                        if(RI)
0 P5 m: ^( d! W1 Z/ I, l( L                        {
5 L8 N. t! y7 ~* F1 F  \                                RI=0;   / U0 s; J. |5 b$ J% C& J
                                Receive=SBUF;                 ( K9 ~8 b$ j/ ]7 |% o9 E! E
                                if(Receive=='2')        //如果第二个字节吻合'2'# X% f2 Y0 n5 I( F6 l
                                {; Z4 m: j  P8 k  g" T1 E# V: r  L
                                        i = 255;, _* d7 I# G. r( [
                                        while((--i > 0) && (!RI));
& B1 T' O- Y; r# G* B$ L& c: @& D                                        if(RI)5 u; L1 b/ m6 z* x1 Y. H* A2 k
                                        {
# n8 V- g" }. n% L                                                RI=0;   " C6 M+ \! K2 s% V, m
                                                Receive=SBUF;                 3 j) B( G' T. C) _
                                                if(Receive=='3')        //如果第三个字节吻合'3'
0 t' g. m6 r, c5 d                                                {
7 R& c9 Z' S/ }                                                        i = 255;# e, r$ m/ Z. t' B  s4 ?9 D( Q, C
                                                        while((--i > 0) && (!RI));
1 u5 e: \6 N+ k, [4 X; z                                                        if(RI)+ Q+ F  I" Z: Q$ q
                                                        {2 s# L- W. z, c
                                                                RI=0;   
# A7 r9 T9 |6 |1 k8 X/ m                                                                Receive=SBUF;                 
. T( C/ U3 @& f* k5 m# ^8 d) z8 U                                                                if(Receive=='4')        //如果第四个字节吻合'4'/ \4 }7 s) H& m, L, [9 K
                                                                {
1 q& b- B: S! V) s                                                                        i = 255;5 i+ B: l9 X" L( w5 f7 H
                                                                        while((--i > 0) && (!RI));
$ R. x  a" c1 O0 A0 G                                                                        if(RI)4 k  u( a/ H' Z: }
                                                                        {, c6 S* ?  v, e% P9 R
                                                                                RI=0;   ; ~( m" q. X6 _; i$ g5 |
                                                                                Receive=SBUF;                 
! v- t( y3 d- S- s# n, F# v                                                                                if(Receive=='5')        //如果第五个字节吻合'5'  K  m8 i( v# y1 }
                                                                                {' `$ v! o' M& A7 @# }
                                                                                        i = 255;
, X/ B* I* Y  K, }1 w& n( c                                                                                        while((--i > 0) && (!RI));
+ R9 F4 k( C+ ]8 L6 Z                                                                                        if(RI)! M7 m4 j# r) `9 Q
                                                                                        {, [% W# {& ]% d2 h8 c3 l
                                                                                                RI=0;   
( X" P9 R. n$ j" V3 }                                                                                                My_Buf=SBUF;     //保存第六个字节到缓存并返回. @" g, G( ]- k( F5 ?  w
                                                                                                Recive_Ok = 1;: M: G0 i/ z; x( U1 t0 [" B; o
                                                                                        }
! b, |* Z; ^5 j1 S! u+ v8 a: p                                                                                }
# y* \% ~( B* P3 ?, s                                                                        }' h! N, k, Q7 _. B7 n% |
                                                                }+ G' U, w9 V( ]1 E
                                                        }2 t+ U. l3 b$ J1 K  a
                                                }& T/ w% V7 W& s$ o' B6 V
                                        }5 s0 g* z' C* w7 {
                                }9 k9 i+ o7 L1 f9 {" w
                        }! d, ]+ q2 @4 `( M, c
                }
" ~; q" j" d4 w1 N4 Q" U: B        }# Q$ J; h( k4 i! _2 E  ~' E% B
        else  C7 C5 W+ o9 E' M# G( p! n% w0 S
        TI = 0;6 j3 d9 U: ]8 X! R" ~9 |# N
}6 O. c* Y5 ?  @% z. ^, r
. d, [* Y% v5 }* X

2 R$ N0 f$ z. ?7 l+ \再你代码的基础上写的,i用来判断超时, i 的值取决于你的波特率,波特率越高i可以越小,反之i 可能需要增大。
# K& J; J) u& [. y+ ~' v, x4 f1 f
最后,这种方法非常不建议。可能的话,还是推荐用缓冲池方式。
+ X8 [$ v" O! q9 r* ?- ^回复

该用户从未签到

3#
发表于 2021-12-2 13:59 | 只看该作者
对于数据接收,建立一个环形缓存,在接收数据的时候,把数据push进缓存中,在外部(while大循环中)一直检测缓存是否有数据,有数据则读取出来,类似生产者消费者模式
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-20 17:49 , Processed in 0.109375 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表