標(biāo)題: 這是我寫的藍(lán)牙模塊二驅(qū)小車,但程序響應(yīng)一次就不能在響應(yīng)了,希望大佬可以幫我 求... [打印本頁]

作者: 一生所愛王大俠    時(shí)間: 2018-12-11 19:35
標(biāo)題: 這是我寫的藍(lán)牙模塊二驅(qū)小車,但程序響應(yīng)一次就不能在響應(yīng)了,希望大佬可以幫我 求...
#include "reg52.h"            
typedef unsigned int u16;
typedef unsigned char u8;
sbit B1B=P3^7;
sbit B1A=P3^6;
sbit A1B=P3^5;
sbit A1A=P3^4;
sbit led=P2^4;
void GO()
{
A1A=1;
    A1B=0;
B1A=1;
B1B=0;
}
void RIGHT()
{
A1A=1;
A1B=0;
B1A=0;
B1B=0;
}
void LEFT()
{
A1A=0;
A1B=0;
B1A=1;
B1B=0;
}
void BACK()
{
A1A=0;
A1B=1;
B1A=0;
B1B=1;
}
void STOP()
{
A1A=0;
A1B=0;
B1A=0;
B1B=0;
}
/*******************************************************************************
* ??????         :UsartInit()
* ????????     :???????
* ????           : ??
* ???           : ??
*******************************************************************************/
void UsartInit()
{
SCON=0X50;   //????????????1
TMOD=0X20;   //???ü????????????2
PCON=0X80;   //????????
TH1=0XF3;    //????????????????????????4800??
TL1=0XF3;
ES=1;      //???????ж?
EA=1;      //?????ж?
TR1=1;     //????????
}

void main()
{
  UsartInit();
while(1);

   
  
}

void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF;//??????????????
RI = 0;//????????ж???λ
switch(receiveData)
{
  case 'A':RIGHT();break;
  case 'B':GO();break;
  case 'C':LEFT();break;
  case 'D':BACK();break;
  case 'E':STOP();break;
}
TI=0;       //????????????λ
}



作者: HC6800-ES-V2.0    時(shí)間: 2018-12-12 08:31
我做過這個(gè),你的程序和我的程序不同之處是:
你的程序,在串口中斷程序中使用了控制小車的函數(shù)。
我的做法是:在串口中斷程序中,只記錄藍(lán)牙發(fā)來的數(shù)據(jù),這個(gè)數(shù)據(jù)的判斷,留在main()中去判斷。

我的思路是:在中斷中調(diào)用其它函數(shù),就不好判斷程序執(zhí)行到哪里去了——若出現(xiàn)上次中斷服務(wù)程序沒執(zhí)行完,又來了一次中斷,就只能等待,這次中斷沒法執(zhí)行,程序就卡住了。而中斷最麻煩的,就是不知道程序執(zhí)行到哪里了出現(xiàn)中斷。
這是高手教我的哦。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1