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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
最近在研究用51单片机写蓝牙程序,但在最后还是出错了。- I9 O; g) M. y
我想输入“1”时,第一个led灯会以2秒持续闪烁,但是事实是第一个led灯一直亮。
7 U4 S9 ^+ I+ J2 U: S. f求解。- M$ N/ I2 X: k) C& A8 w. g! c
程序如下:# include <reg52.h># define uint unsigned int9 I( S- k) C. E( y- o/ Y4 X
# define uchar unsigned char
( Q# T) i$ h9 G6 J7 Luchar buf;
1 X+ h2 Q# k1 ysbit led1 = P2^0;2 j; U" b/ F) o% ~3 n  z$ I! m2 |
sbit led2 = P2^1;
; J" p& J- M* a5 F; `! xsbit led3 = P2^2;8 h6 B2 W/ l/ q2 K2 M, N
void delayms(uint xms)
; C" h9 W. g, G$ e8 H) w{
( q* l* g& z+ W; G6 Auint i,j;
$ l1 Q8 x7 ~! x# x6 O6 R        for(i = xms; i > 0; i--)  T7 i( {' ^( g  x; w8 w7 O: l
        for(j = 110; j > 0; j--);$ \9 y4 A! G* @
}8 P: Y! t3 d; j3 e
" @! y; x7 s; w& D
void UARTinit()
2 B% f; v. x+ L: P0 K4 P1 O{
$ ?  O# W$ B/ [/ f" L8 g" F. z4 Z9 |TMOD = 0x20;
+ v3 v' w7 i: @* t3 Y& W- C! USCON = 0x50;
$ L) Q' `, |6 k+ R" G" ?TH1 = 0xfd;- `6 a# |$ h) X9 Z
TL1 = 0xfd;% s- |& c0 J1 P8 \5 |
PCON = 0x00;) u9 V/ ]5 X% P* [6 H% g; m
EA = 1;7 w# T5 [& b' j% |- N
ES = 1;0 S# c0 U4 @# y$ H2 E% F8 T5 N
TR1 = 1;
, V* N* J6 C  w$ K6 q" W6 |}% V( m3 J9 q5 T& |( C: L) M) Q1 d6 X
; ^% Q. ^9 Y1 n7 t, ~. N
void send(uchar c)
( [+ U, l- U7 `8 o( B$ O1 F{( G( f! |7 s! b6 D% _6 D
    SBUF = c;
+ H+ w+ W1 D$ T8 k' y    while(!TI);
! O3 j! ?5 M, M- B. Z# K    TI = 0;( X# W6 a) g- U7 @
}
  W; K. M" M( _; o
$ n+ G' J+ U# |8 V; C- y# Yvoid main()
& S& k3 t5 W5 a) M$ ~{, C" ?  M& [" e3 _; k8 E1 [
        led1 = 1;
8 W' i0 h7 O4 M* g' `: Q  K/ V        led2 = 1;
( n/ L- M8 g; \# K        led3 = 1;
9 N) @+ L* H% i4 Y1 X! K& Qwhile(1)
4 f& E& e) G0 @7 v1 k{% z! i% ^3 L2 S
UARTinit();( F! y# K( E& y! O
}
( t4 G7 n! K8 q3 P  C}) L' w, U$ y6 u0 C- h
7 U2 o! N$ y/ }& O" d- ]8 N
void UARTinterrupt() interrupt 4
' V0 T: A5 q: X{) d7 m4 |: p  z
if(RI==1). R( }+ h* j: E
{
7 p% ^: E2 g8 J) sRI = 0;% b! a, r* j$ |) z* C
        buf = SBUF;
1 x# ]8 J( f- x/ c3 {: G: F        switch(buf)
, ~" B' x3 U1 O& Q" I7 c1 q; \* D& |        {
- I: i4 e. ~0 L, f. S                while(1)( G  {2 ?! |5 ?" [7 j
                {" G: G0 D1 @! K3 j
                case '1':
  B* ~" `7 W9 K/ V* ~8 u9 @                        led1 = 0;' T0 N0 w( i3 X' h  d
                delayms(2000);$ s* S; m  X7 \- B8 [
                led1 = 1;6 `$ n5 E' s( _& B" w5 q9 S. V% f! T
                send(buf);" r) P- \# ?- b8 [3 [/ x
        }
+ R% X" I8 h7 L) B: L4 h) z! M                break;
  G0 W$ o! T* m                case '2':, \, v1 A, \+ {. h% V" x
                        led2 = 0;
9 {% q  }$ b! B" u                delayms(2000);- G: ^+ Q- l5 k  v: |7 ^2 e
                led2 = 1;
6 _3 E+ C! U# w$ I" N, j7 |3 u4 s9 r                send(buf);) L/ T; W6 ^, {( U0 R% A0 x6 ~; C
                break;
: g' L" a5 n1 [5 Y' D$ G8 i7 `                default:
( x' ?. E9 p; `- c! z; z" f' `6 V                        led1 = 0;* t5 G  ]# A( h' [1 t2 Z" E
                led2 = 0;
7 N/ A9 `5 C4 n! N( j4 A                led3 = 0;9 z" N% G% s/ F# w% m0 c5 h2 z7 q0 B
                send(buf);9 W" j5 D1 E3 D4 H; ]% O
        }
8 W- r6 z& A9 l}7 m+ [( z4 s: o/ }7 `
}
- k8 V0 l, d: J! j! t3 [( f
/ }- t+ N8 {, p$ i9 J5 H! L! e
  • 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-6-28 17:39 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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