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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
遥控接收部分  不想接收完整的数据后再判断接收的数据是否正确  想接收一个判断一个  接收判断的部分怎么写  要C语言的  我现在只能判断第一个  往后就不会写了   比如接收123456  1到5需要判断  6存到Temp里
* u) L2 f/ f3 R& ~7 S% \/ g! V2 ~) [" p& e
void UARTInterrupt(void) interrupt 4
; A* O& L4 i/ B! Q9 E{
( H& E- \; h0 e7 l: H$ s) M        if(RI)  
- u  O% n# L' L- S- ~. ?        {   RI=0;   7 B7 h* f# E% @0 A+ f/ M* ]
                Receive=SBUF;                 ) B7 Z1 L0 d2 w- ^
                if(Receive=='1'). Z- L# l& S7 V/ u+ _& _
                {          Temp=Receive;  E% W5 B# G' h  \
                }
- S9 X5 a# N1 m) ]- t5 N        }
  Y+ L5 t( u& Y9 y        else: y$ {( F9 Y1 ~9 p2 @
        TI = 0;1 G7 G" z! ~9 C
}
3 m1 s) {* X, U5 ^& q' n) H; Y% |. W  k: s& W1 N3 j" N& }

1 m" {$ ?" B% b) g

该用户从未签到

2#
发表于 2021-12-2 13:18 | 只看该作者
建议存缓存,然后统一判断, 如果非要收一个判断一个的话, 接收的时候啥事都干不了了。
  b$ F: h6 a- y0 I+ l2 p, Q; F! j& U1 u
# O4 b( C. p" j3 w5 F接收时判断如下:& Q5 X3 @0 C$ q

. N* i7 s( Q1 F5 O+ z0 X# Jvoid UARTInterrupt(void) interrupt 42 G$ ]2 ^. N& W% V9 I) E( G* K
{: F$ `( w$ {+ O( \0 b# L
        u8        i;9 g, T7 X; N! P
        if(RI)  
+ j4 F6 s1 \3 {* \5 c" E        {   ( ^7 n( T3 `* ?1 [
                RI=0;   1 D" h$ h, v/ N' V
                Receive=SBUF;                 - ^! }1 M; U0 V" Z5 y5 Y
                if(Receive=='1')                //如果第一个字节吻合'1'
4 h6 b, [$ f4 x                {          ' O# L, A0 g( s9 _% V
                        i = 255;
; C, h! L6 W' W9 `# J6 p                        while((--i > 0) && (!RI));% ?! L) ^7 J3 J; e+ a
                        if(RI)
# }- m3 x* ]# W, s2 G, T                        {# q" T' w+ u( q  v! u
                                RI=0;   / c1 f  b8 ?7 A) [2 I
                                Receive=SBUF;                 
  y+ Y8 }) z9 G$ ^9 _# b8 ]3 R                                if(Receive=='2')        //如果第二个字节吻合'2'
/ Y& ~. f4 i0 }; u( m" ^8 E$ S                                {
2 ~% S' u! ]" X/ q: U                                        i = 255;
1 `+ r( _  p0 V( v1 O                                        while((--i > 0) && (!RI));
' W" ]9 o) I) P0 l3 S                                        if(RI)% h, V8 u2 g1 w. R+ E9 Q
                                        {
7 `0 a+ V5 G2 G' u* z( m( D. R, x                                                RI=0;   . b6 A- @* T- R* J! V$ i! E8 z% |
                                                Receive=SBUF;                 4 L: |2 V# f$ L$ {/ S0 r
                                                if(Receive=='3')        //如果第三个字节吻合'3'
; a3 }" d' V$ t, a) [( n                                                {
8 t3 o  j, m. Y                                                        i = 255;
" N( b' d5 Q  c1 A                                                        while((--i > 0) && (!RI));  c. {9 z, r1 l# m+ m) s5 z; }( p# r
                                                        if(RI)# K  @2 D' Q& q7 s2 }
                                                        {+ Y3 q; v: X" F3 ?( e
                                                                RI=0;   
1 {; E" A- {, s  ?) e, p; f                                                                Receive=SBUF;                 0 X7 ^! n" n# @$ N: h# e7 l
                                                                if(Receive=='4')        //如果第四个字节吻合'4'* U- }5 U  [- @( M' D; j0 }
                                                                {0 R8 u' I& n) w/ C1 I/ {
                                                                        i = 255;& k, z4 h2 n0 Q+ }8 ?
                                                                        while((--i > 0) && (!RI));
" z7 K- F2 A7 j' V                                                                        if(RI)
+ r: c, |0 _2 y2 Q3 E% d9 d                                                                        {0 N2 s  u; A& n2 I
                                                                                RI=0;   : E: q7 J: W+ `2 d. y9 @# g5 v+ z: Z
                                                                                Receive=SBUF;                 & a) I! d# v& B$ A# S  m
                                                                                if(Receive=='5')        //如果第五个字节吻合'5'
3 e) u, F5 v% ]$ X  N4 [5 v                                                                                {
! S% v* P* S# q! }                                                                                        i = 255;& x: c: x6 V6 C" l
                                                                                        while((--i > 0) && (!RI));8 _+ E# }( [, k; Z' G# k9 a3 F$ W
                                                                                        if(RI)
/ P& i7 P3 ^  \$ W: K3 _                                                                                        {+ y5 _+ V) O$ d) v' r; A+ z
                                                                                                RI=0;   7 S. u; L5 B2 R, `% d# @1 ~: e
                                                                                                My_Buf=SBUF;     //保存第六个字节到缓存并返回9 `% W: F6 W/ L! r
                                                                                                Recive_Ok = 1;
9 p% Q8 b5 F1 `5 `7 {* n( N3 r                                                                                        }
/ v$ z! p; {; c7 P                                                                                }% D, _. r! d7 _7 @
                                                                        }3 z8 s' i" n$ N: U; ^
                                                                }
0 n* Q. k+ `; A  h                                                        }
: E7 r* J# E# J: e" X5 e' l4 H                                                }
# ?$ c' {8 X8 h1 D" B& |0 R                                        }1 a" P. |1 J) F/ M
                                }3 `1 [) L. N. `, T& j3 L
                        }
# N. R+ z" p+ e7 j' b6 P; p' d' x                }
/ R6 Q. X+ r# y8 u; s4 K6 F        }
! V. A+ M, p9 E. H: ~        else
6 G& w/ }) I( _& M7 H. U, V        TI = 0;
7 h; n: h) v4 K7 c" V- u7 L}
) B. O% o! O& Y
$ Z0 y) j9 E! X1 ?  [. F) i( {" `4 @" R3 ^# n$ _7 `5 B
再你代码的基础上写的,i用来判断超时, i 的值取决于你的波特率,波特率越高i可以越小,反之i 可能需要增大。, ]. a1 I# I- W: P4 h# d
8 o* n: z& X" M6 ~. Y
最后,这种方法非常不建议。可能的话,还是推荐用缓冲池方式。2 P5 G6 T; Z# s7 e) d2 h/ v2 v
回复

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 13:30 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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