HC05单片机串口通信问题

求助!为什么我用蓝牙与51单片机通信,能实现改变key的值 但是if(key==1) 里面的内容却不执行
单独除去蓝牙的程序还是可以执行的

#include

#define uchar unsigned char
#define uint unsigned int

sbit key=P2^0;/* open */

uchar HighRH = 0; //¸ßµçƽÖØÔصĸß×Ö½Ú
uchar HighRL = 0; //
uchar LowRH = 0; //µÍµçƽÖØÔصĵÍ×Ö½Ú
uchar LowRL = 0; //
uchar receiveData;

void ConfigPWM(uint fr, uchar dc);//ÉèÖÃÕ¼¿Õ±È¡£µ÷½ÚתËÙ

void UsartInit()//´®¿ÚͨÐÅ
{
SCON=0X50; //ÉèÖÃΪ¹¤×÷·½Ê½1
TMOD=0X21; //ÉèÖüÆÊýÆ÷¹¤×÷·½Ê½2
//PCON=0X80; //²¨ÌØÂʼӱ¶/
TH1=0XFD; //¼ÆÊýÆ÷³õʼֵÉèÖã¬×¢ÒⲨÌØÂÊÊÇ4800µÄ
TL1=0XFD;
ES=1; //´ò¿ª½ÓÊÕÖжÏ
// EA=1; //´ò¿ª×ÜÖжÏ
TR1=1; //´ò¿ª¼ÆÊýÆ÷
}

void main()
{
key=0;

    UsartInit();
EA = 1; 

while(1)
{

if(key==1)
{
    实现  内容
}

}

}

/*open PWM,fr-ƵÂÊ,dc-Õ¼¿Õ±È */
void ConfigPWM(unsigned int fr, unsigned char dc){
uint high, low;
unsigned long tmp;

tmp = (11059200/12) / fr; //Ò»¸öÖÜÆÚËùÐè¼ÆÊýÖµ
high = (tmp*dc) / 100; //¸ßµçƵËùÐè¼ÆÊýÖµ
low = tmp - high; //µÍµçƽËùÐè¼ÆÊýÖµ
high = 65536 - high + 12; //¼ÆËã¸ßµçƽµÄÖØÔØÖµ
low = 65536 - low + 12;//

HighRH = (unsigned char)(high>>8); //¸ßµçƽÖØÔØ
HighRL = (unsigned char)high;
LowRH = (unsigned char)(low>>8); //µÍµçƽÖØÔØ
LowRL = (unsigned char)low;

//TMOD &= 0xF0; //?? T0 ????
    TMOD=0x21; // TMOD |= 0x01; //T0ÉèÖ÷½Ê½1/
TH0 = HighRH; //¸ßµçƽ
TL0 = HighRL;
ET0 = 1; 
TR0 = 1; 

   en1 = 1; //Êä³ö¸ßµçƽ

   en2 = 1; //Êä³ö¸ßµçƽ

}

/* close PWM */
void ClosePWM()
{
TR0 = 0;
ET0 = 0;

   en1 = 1; //Êä³ö¸ßµçƽ

   en2 = 1; //Êä³ö¸ßµçƽ

}

/* T0 ÖжÏ,²úÉú PWM */
void InterruptTimer0() interrupt 1
{

 if (en1 == 1&&en2==1)
    { 
    TH0 = LowRH;
    TL0 = LowRL;
    en1 = 0;
            en2 = 0;
}
    else
    { 
    TH0 = HighRH;
    TL0 = HighRL;
    en1 = 1;
          en2 = 1;
}

}

void Usart() interrupt 4 //´®¿ÚͨÐÅÖжÏ
{

receiveData=SBUF;//³öÈ¥½ÓÊÕµ½µÄÊý¾Ý
RI = 0;//Çå³ý½ÓÊÕÖжϱê־λ

if((receiveData-48)=='1')
            key= 1;  

SBUF=receiveData;//½«½ÓÊÕµ½µÄÊý¾Ý·ÅÈëµ½·¢ËͼĴæÆ÷
while(!TI);          //µÈ´ý·¢ËÍÊý¾ÝÍê³É
TI=0;                        //Çå³ý·¢ËÍÍê³É±ê־λ

}

3个回答

可能是你发送不成功,导致key的值不为1。稍微看了一下你的代码,也可能是死循环导致你的key接收不了值。没有写过单片机程序,只是简单的帮你分析。

LZCitlearner
LClearner 发送成功了啊 为什么死循环会导致key接受不了之
3 年多之前 回复

你可以在循环里更新一下key的值试试 ,key=P2^0;

用串口调试助手,看下单片机通过串口收回来的数据是否与程序判断逻辑的条件一致。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问