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

关于51单片机写蓝牙程序的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-11-15 09:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
最近在研究用51单片机写蓝牙程序,但在最后还是出错了。6 z* T% i# R# {5 Z
我想输入“1”时,第一个led灯会以2秒持续闪烁,但是事实是第一个led灯一直亮。
! w: Y" K+ @8 G+ p, \; I求解。
( m3 o% t& R* B( A9 s5 u程序如下:# include <reg52.h># define uint unsigned int0 r, R5 I* A4 B
# define uchar unsigned char4 ]5 ?* t) H( d& L2 j/ z
uchar buf;
2 H1 g6 }0 {) Vsbit led1 = P2^0;, [( h; W' k; `( n
sbit led2 = P2^1;* S$ |6 `/ T9 H3 r( J
sbit led3 = P2^2;
$ s# P; l/ Y+ \" W! @void delayms(uint xms)
1 G3 _! u) F# L1 E6 X) r2 L1 V/ O{  I% ^$ U! n; M" I( w
uint i,j;
8 V, q4 P: ?$ J: j" J& F3 T        for(i = xms; i > 0; i--)
. O( H4 C1 h2 R- t6 R! P        for(j = 110; j > 0; j--);: Y  ]+ F0 ~- I) y
}
. o1 ]: E) S  T
) O0 t) F+ q! B+ Vvoid UARTinit(); A3 [0 o: B7 a8 N' Q  K
{. j7 b( u( \" A  w& L% U
TMOD = 0x20;
/ p+ r! |7 @' n& gSCON = 0x50;
, C+ ?& ]3 a( a6 N, E* pTH1 = 0xfd;
: h- g* P, s0 v; ^TL1 = 0xfd;  _3 A% M3 U5 a  e/ v! r. U& ?
PCON = 0x00;. B  S" y) l1 b% W3 L, V1 `
EA = 1;0 ?# S, Q5 W! u& _$ V7 G
ES = 1;# @. X6 [- m  x, v7 p. j
TR1 = 1;
6 A" N4 A; x$ i7 D0 j( Y  x}
) l- N% v/ S5 B; ^6 O0 `  |. o; R( Q. u- ~: C3 E
void send(uchar c)
3 @( `! {) }5 o6 n1 Y$ G# K2 w& z3 ~( B{1 \0 ^- N6 W  V: p/ L
    SBUF = c;0 X2 S' d3 f3 A% S' `- D" [
    while(!TI);
$ M/ {8 [7 h0 [0 ~    TI = 0;
1 W& [; q+ V# |7 X4 t1 z; `0 L- Z}/ F3 X# {- |7 \; r3 c' Z/ |

+ T. q  ~8 I; g' Gvoid main()0 I: ^0 N, u$ R9 V
{8 ~8 x( p$ a1 _/ t5 t: R  j; X
        led1 = 1;
$ F5 s' s) J& c. f) q5 T: G        led2 = 1;( s  }+ a: ~5 ^; [+ n
        led3 = 1;2 t6 ]3 Q8 Y6 ~! e7 b  h
while(1)
4 L4 V9 C2 t" i+ F& M{
! {4 s/ k& B* ]+ Q" aUARTinit();
$ R- X1 `/ y  `% y9 t7 Y}
& a  y4 G! M) N}) X. j8 @: M. Z5 x
- J0 @' J9 ?2 k/ ^7 c5 O! r) g
void UARTinterrupt() interrupt 4
% W8 O$ A  ~4 t2 L/ J1 \$ W{- g$ M, Q; X$ V) v- B9 l/ ]& U! y
if(RI==1)
0 r1 S( u. S+ I{
+ U/ H! R! O( }) C* c9 vRI = 0;5 b( w; m: q9 n- R* r' w6 M$ P
        buf = SBUF;
; e6 u4 m1 {" ^# o0 |        switch(buf)
2 K! ~# ~/ n5 o1 Z" X        {: A  ?  ~5 K# X7 s) T) v
                while(1)# n1 x3 n4 c% f+ ?7 T- ~
                {* u% p6 p' i! i
                case '1': 0 |" ~, @$ O  }; p' R
                        led1 = 0;
7 e# _; [2 m, U: V' w3 x                delayms(2000);! ?! a" @, A$ K
                led1 = 1;9 z* z  K/ l- v4 t, G! ]
                send(buf);
4 [. W  w. U  S. z        }% @5 O- G2 |4 s: _' {, n
                break;5 l+ B( f( l: D6 z5 U  y  |( i
                case '2':  R4 H. E: ]% }/ j( L. l
                        led2 = 0;0 ?7 z: C" p7 R* m& k. b
                delayms(2000);
9 O0 T4 f) }6 K" _                led2 = 1;
5 ]- R1 W- e7 z                send(buf);
( R# j, f" q8 l: r* K- U                break;
" x: x+ B/ C8 \  d5 r, O; S                default:: a1 u+ I* |8 n' z' q
                        led1 = 0;3 H" g  T. |- [7 U* Z9 ?( w
                led2 = 0;
# j* B* N; b+ r3 F6 L                led3 = 0;
- O. j1 |( W6 v& b, H' T/ D                send(buf);( v- e; b) _, @2 ]
        }
6 [. r- S1 z* M) {6 f: M8 B5 p( q}
0 n6 D* e2 e& u% J# p: D}
) H+ P+ a* `: T) ?; a; h9 D0 g- n% D: h0 N+ P1 H* [
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2019-11-15 19:38 | 只看该作者
    你为什么要在串口中断里while循环啊,串口中断再收到1时,只会进入一次就出来了,事实上一直在main中循环啊,UARTinit();一直在串口初始化。。。。醉了

    该用户从未签到

    3#
    发表于 2019-11-15 19:45 | 只看该作者
    建议在中断中做最关键的事 剩下的留给主函数去处理
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-27 08:04 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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