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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
最近在研究用51单片机写蓝牙程序,但在最后还是出错了。
8 D+ E. x+ v! t. L/ Q) |我想输入“1”时,第一个led灯会以2秒持续闪烁,但是事实是第一个led灯一直亮。
: V0 W: O$ z8 [" U* p" @, I求解。+ n+ u4 j* Y$ U) D- I: L
程序如下:# include <reg52.h># define uint unsigned int  q: c  \: A$ d4 e2 ~
# define uchar unsigned char* m# e' p1 [) ]& Z. G1 V5 m
uchar buf;
( b5 y$ a2 `6 e7 ^9 G9 K0 d; jsbit led1 = P2^0;2 T$ J" p4 v! ^0 ?6 f1 {3 ~
sbit led2 = P2^1;
( X) y: s" k% n( vsbit led3 = P2^2;! `+ C# C  a! A# t
void delayms(uint xms)  E1 G6 s9 U% W* q( S1 ~
{0 `" ?) a0 J6 F4 t
uint i,j;5 L) P( n7 x  O! Z' X( ^: O, D
        for(i = xms; i > 0; i--)
) B9 |4 a5 S3 s0 f        for(j = 110; j > 0; j--);9 J9 t* i, g& p. g+ C* T# D& M
}
6 _; i$ N' \# I% O& ]; ?0 v) j7 D+ ~8 [& X
void UARTinit()/ E0 t5 x3 s: C9 G, B7 ~
{, G/ B( v* j4 v. f6 f. |
TMOD = 0x20;$ r  t2 x8 Z* ]9 b: `9 P! w( u
SCON = 0x50;; p; u4 @: B0 }5 h3 o2 l. u
TH1 = 0xfd;! ]' o) t. j1 x0 p5 A
TL1 = 0xfd;4 q" L! o* c2 x  V
PCON = 0x00;
5 W4 A( w. w7 u* ^EA = 1;
5 l6 ]" C- i6 I9 P4 ]4 E) q+ LES = 1;
9 S  Y8 w# Z  l# eTR1 = 1;* Y9 N" q$ e( F3 f# b7 Y7 a3 L
}8 J7 S# I, s7 _; i1 ]
  j6 Q8 G5 ], \' t6 J% K
void send(uchar c)
% D# \. V1 J3 C! V' p{
2 n1 X) v% d2 S) T+ V( f7 a2 b    SBUF = c;
* _) C6 o+ @' x, T    while(!TI);" d2 D! @$ g; K* Y* f
    TI = 0;5 v% K6 l' f  s# a0 a
}( U% T5 `2 T- z2 {! S  L( r. \
  `% P* R+ J6 l1 B( r& C
void main()) ^8 y- E$ t+ |, g% b+ C' O* h* a
{
1 e9 i. G( |: j9 \        led1 = 1;2 q( h% i( z- a
        led2 = 1;
' m2 G, v+ W2 L2 ~3 J        led3 = 1;
0 A& p: e# s3 t- I; Swhile(1)1 `( D4 H; K: l! ]! Q
{
) l! _( Q4 U2 aUARTinit();/ u2 V4 a! ?( _0 ~
}
9 ~" U9 t1 k( j& o( s7 d9 a- J}6 p# {: h& ~# K7 p/ ~) \$ n

% i( h! {7 N$ Zvoid UARTinterrupt() interrupt 4! w- B  s. q2 r2 }! R% J0 B
{
8 W8 G) z8 X/ [+ hif(RI==1)
2 p' F9 G4 R: ?' [{  E; B6 d* `* K8 _5 l% x
RI = 0;
1 f7 y* ~  q/ G* i        buf = SBUF;. K0 B& K" i* l3 v6 |
        switch(buf)/ G3 Y+ v( O' q2 M) G+ m9 n3 L
        {
; q0 s2 {1 ?' D                while(1)4 Z$ \# c, K6 Y7 u5 P- h$ u/ D" V
                {, v$ P) \7 h- b" L3 B( |, c7 ?9 B8 W  P
                case '1': 1 U/ V3 B0 A: c5 g7 s5 w
                        led1 = 0;
$ n0 j  l% A% J: H* o                delayms(2000);
' y) Z6 r9 L& y% j6 `                led1 = 1;
9 E7 ^0 a( j' B+ G4 B" E                send(buf);+ m9 [$ y4 m" V* C
        }' G+ c6 S/ M. D6 c1 J
                break;/ s  e8 |, U- T4 ~
                case '2':6 d! v' @% k; O/ C- F4 V( {' Y
                        led2 = 0;
8 G% x+ J0 s/ e. `, X                delayms(2000);* ^; X6 P7 j+ K3 F8 \4 ~, u
                led2 = 1;
+ h) V5 O* e  u8 [( L                send(buf);
. M# T# ~' U) e$ |8 l                break;
! A9 S" T. s6 t" l5 Y9 ]" |                default:
; L% p3 S3 u" R  W, D: e! M                        led1 = 0;
$ l; Z. V9 w# l' o                led2 = 0;' x/ j/ F6 D6 C* P6 o9 k
                led3 = 0;& k; q4 u: s) l* l+ h, X) B4 Y
                send(buf);
- e. i, i/ m& l' Y8 u% U        }
* b2 F# K! v7 Q}
; C  T; H2 t# K$ S}) R0 z$ `$ k9 E6 ~/ X, W! t

3 P# ?2 ~8 ~9 i  z; B" L
  • 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-8-13 10:40 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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