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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
最近在研究用51单片机写蓝牙程序,但在最后还是出错了。7 P2 k+ {- l7 G$ _* B6 y
我想输入“1”时,第一个led灯会以2秒持续闪烁,但是事实是第一个led灯一直亮。
& g2 L7 |1 ~4 s  G/ d; v求解。5 A. E/ e5 s5 h3 n
程序如下:# include <reg52.h># define uint unsigned int) P; X; E  y" y% I
# define uchar unsigned char
1 r  r/ q: t3 D3 f/ c/ M4 Suchar buf;
7 r( [, L  a9 H$ X2 s) bsbit led1 = P2^0;
: V$ ]( ?; S! Z2 q  q9 Xsbit led2 = P2^1;
1 c3 x- S1 H  R8 j# vsbit led3 = P2^2;
/ _9 G6 z1 P, Wvoid delayms(uint xms)* Y: j3 c( E' _9 J( R) w1 y
{
/ o& ^7 Z6 W% D. luint i,j;
2 c( H4 Q7 m9 B9 R- F7 C( b$ d2 |        for(i = xms; i > 0; i--)
! A# s1 s; G8 i+ t& k( s# d        for(j = 110; j > 0; j--);
7 i$ K9 f- ~: I( p- D: T) p' s/ z}
. P+ N% y8 u: \' ^! u, [9 p' P" H9 d
void UARTinit()' K6 b7 s; W8 [- @0 D* l
{8 E8 \% _5 E* H/ x2 _
TMOD = 0x20;3 z' S0 W8 k7 c/ ^' O( g) x
SCON = 0x50;+ `( a7 U% D5 O1 e. s" d, B
TH1 = 0xfd;
  i7 d* {0 _" g9 jTL1 = 0xfd;
2 l9 D  S* b; S; rPCON = 0x00;0 D/ G: m& [7 E) o) l8 N
EA = 1;4 ?7 V' X' ]0 j4 W! r* P# R
ES = 1;+ L3 _9 {1 z/ r  t$ k/ m
TR1 = 1;) r* B8 @/ ~7 x' ]0 m% C' [4 `7 v
}* k& X: O4 v: p% Y. X1 Y

+ \+ w( ~$ e" ]void send(uchar c)+ r5 c( V6 v3 l- N$ k( ~
{
* ~4 g' M8 t8 E9 A    SBUF = c;
9 s, J1 g! s" Z* o    while(!TI);4 @! i5 ~% }+ `* S5 D, O& d
    TI = 0;* e& m; f/ X# q0 v& g$ x( Q
}
1 [) v- Z. G- T6 K' j4 j% n
# l: M3 l; i+ g/ avoid main()
' g. s6 \' ~9 W# [{
8 T! ?, d7 w9 b# p/ J+ a+ ~        led1 = 1;+ k0 R: i1 V6 ^$ ]# Z
        led2 = 1;& e. y; _$ p: s$ s, v* z
        led3 = 1;* P. P8 \* _8 T! Q+ w* v, A
while(1)8 l7 X4 N: e& }- H  }$ U
{2 H' S8 S8 R+ O( \) M' n! l
UARTinit();
$ A" k4 h- ]+ u/ v2 K}
  p% T* [8 N: X3 H9 T: V}- ~; v2 T& P- \# }# U/ x! A% \! H

. U2 P3 b) e* fvoid UARTinterrupt() interrupt 46 X; T2 l, K3 I" c1 t
{
* Z( i( @/ {' `if(RI==1)8 m+ G! c: G* E+ k+ X$ N
{3 M6 d* T; q' ^5 t- E: F
RI = 0;
5 [* [- w3 X: c$ N( r+ y: c        buf = SBUF;4 j" I1 l* h7 d5 _5 G
        switch(buf)+ A; |& S/ x" o- j
        {8 K6 j- n: y9 J0 U9 d5 B: `/ @
                while(1)
. r+ o! w! p8 ~9 J' E! o6 n                {7 d5 `* c$ c) s3 Z0 G7 b: y
                case '1':
7 y" p" o4 Q) x* c                        led1 = 0;
0 I; O0 |$ U5 x  f; g) l/ [                delayms(2000);% D+ p6 R% R, Q
                led1 = 1;
, F) U6 t8 e! P' `                send(buf);
6 C8 H# Z+ Q. k$ h6 U0 K* y, F" c        }* N2 m/ u6 H. B" i6 b+ a  |
                break;
" ]7 y/ N% }: d, ~: P4 O" x9 Y5 z                case '2':  A6 C5 p8 T8 f) _/ ~7 f
                        led2 = 0;- j" H  W+ K0 l! H* _# q
                delayms(2000);, q+ c( a) V5 l
                led2 = 1;
4 H: P: S2 H$ u: s                send(buf);
& Q5 G, K; y2 r3 |                break;
/ a- r) u0 i5 I2 Q0 U                default:
+ }+ w3 \8 Q0 k. \                        led1 = 0;3 H. x3 A5 c0 A6 ?
                led2 = 0;8 L+ V) ]2 a0 J  E8 ~
                led3 = 0;
) r4 _1 a1 \8 G2 T                send(buf);. S  `: ~% u5 w& q8 x) t5 O
        }
! [  m. w6 u& `! P! A$ n. b  v( ~1 t}
, Y4 g5 m. f$ [}
8 G! K; X% l2 e; w
# v' V  u3 F9 ~) 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-10-11 13:59 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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