久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4038|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

藍(lán)牙&超聲波結(jié)合的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:402202 發(fā)表于 2018-10-5 20:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
500黑幣
本帖最后由 YQLSun 于 2018-10-5 22:22 編輯

謝謝前輩們!
解決問題,并且回復(fù)了正確的源碼,懸賞500黑幣


想實現(xiàn)功能:藍(lán)牙遙控的時候,小車檢測前方障礙,如果遇到障礙,小車自動停止,并且不能前進(jìn)。


遇到的問題:小車無法行動,猜測是在中斷3的地方只能判斷出a = 0,無法判斷出 a = 1;

代碼:
#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char
        
bit flag = 0;                                                        //用來標(biāo)志定時器0溢出
uchar a;                                                                        //用來判斷藍(lán)牙的通信是否運(yùn)行
uint time  = 0;                                                //用來儲存定時器0的值
unsigned long S = 0;                        //用來儲存距離
uchar tempbuf = 0;                                //用來儲存SBUF

//L298N端口聲明
sbit IN1 = P2^0;
sbit IN2 = P2^1;
sbit IN3 = P2^2;
sbit IN4 = P2^3;
sbit ENA = P2^4;
sbit ENB = P2^5;

//超聲波端口聲明
sbit TRIG = P1^0;
sbit ECHO = P1^1;

//延時函數(shù)單位:ms
void delay(uint MS)
{
        uint i,j;
        for(i = MS; i > 0; i--)
        {
                for(j = 114; j > 0; j--);
        }
}

//小車運(yùn)動函數(shù)
void TZ()                                        //停止
{
  IN1 = 0;   
         IN2 = 0;
        IN3 = 0;
        IN4 = 0;
}
void QJ()                                        //前進(jìn)
{
  IN1 = 0;   
         IN2 = 1;
        IN3 = 1;
        IN4 = 0;
}
void HT()                                        //后退
{
  IN1 = 1;   
         IN2 = 0;
        IN3 = 0;
        IN4 = 1;
}
void ZZ()                                        //左轉(zhuǎn)(雙輪)
{
  IN1 = 1;   
         IN2 = 0;
        IN3 = 1;
        IN4 = 0;
}

void YZ()                                        //右轉(zhuǎn)(雙輪)
{
  IN1 = 0;   
         IN2 = 1;
        IN3 = 0;
        IN4 = 1;
}

//定時器0和串口中斷初始化函數(shù)
void Init()
{
        TMOD = 0x21;                        //定時器0:方式1,定時器1:方式2
        SCON = 0x50;                        //0101 0000 串行口控制寄存器
        PCON = 0x00;                        //波特率不加倍
        
        TH0 = 0x00;                                //定時器0初始值設(shè)定
        TL0 = 0x00;
        
        TH1 = 0xfd;                                //計數(shù)器1初始值設(shè)置,波特率9600
        TL1 = 0xfd;
        
        ET0 = 1;                                        //允許T0中斷
        ET1 = 1;                                        //允許T1中斷
        
        ES = 1;                                                //打開接收中斷
        EA = 1;                                                //打開總中斷
        TR1 = 1;                                        //打開計數(shù)器1
}

//超聲波啟動函數(shù)
void USStart()
{
        TRIG = 1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        TRIG = 0;
}

//超聲波測距函數(shù)
void USCount()
{
        time = TH0 * 256 + TL0;        //讀取脈寬長度
        TH0 = 0;
        TL0 = 0;
        S = (time * 1.7) / 100; //算出來是CM
}
//定時器0中斷,用來儲存溢出
void DSQzd0() interrupt 1
{
        flag = 1;
}

//定時器1中斷,用來給a賦值,讓串行口中斷判斷如何運(yùn)行
void DSQzd1() interrupt 3
{
        if((S >= 25)||(flag == 1))
        {
                a = 1;
                flag = 0;
        }
        else
        {
                a = 0;
        }
}
//根據(jù)a來進(jìn)行判斷并處理串口的數(shù)據(jù)
void CXKzd() interrupt 4
{
        if(a == 0)
        {
                tempbuf = SBUF;
                RI = 0;
                TZ();
                switch(tempbuf)
                {
                        case'b': HT(); break;
                        case'c': ZZ(); break;
                        case'd': YZ(); break;
                        case'e': TZ(); break;
                }
        }
        else
        {        
                tempbuf = SBUF;
                RI = 0;
                switch(tempbuf)
                {
                        case'a': QJ(); break;
                        case'b': HT(); break;
                        case'c': ZZ(); break;
                        case'd': YZ(); break;
                        case'e': TZ(); break;
                }
        }
}

void main()
{
        Init();
        while(1)
        {
                USStart();
                while(!ECHO);                //當(dāng)RX為零時等待
                TR0 = 1;                          //開啟計數(shù)
                while(ECHO);                //當(dāng)RX為1計數(shù)并等待
                TR0 = 0;                                //關(guān)閉計數(shù)
    USCount();                        //計算
                delay(100);                        //100MS
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:246251 發(fā)表于 2018-10-6 09:30 | 只看該作者
在中斷外把flag a啥的打印出來看看,確定是哪個條件沒滿足
回復(fù)

使用道具 舉報

板凳
ID:330198 發(fā)表于 2018-10-6 10:25 | 只看該作者
無法判斷出a=1是因為你超聲波測的距離有問題,回頭看看你的測距S = (time * 1.7) / 100; 這個我覺得應(yīng)該是S=time/58;你改下試試看。
回復(fù)

使用道具 舉報

地板
ID:402202 發(fā)表于 2018-10-9 13:18 | 只看該作者
zhanghyg 發(fā)表于 2018-10-6 10:25
無法判斷出a=1是因為你超聲波測的距離有問題,回頭看看你的測距S = (time * 1.7) / 100; 這個我覺得應(yīng)該是S ...

不對哦
回復(fù)

使用道具 舉報

5#
ID:402202 發(fā)表于 2018-10-9 13:18 | 只看該作者
new_hand 發(fā)表于 2018-10-6 09:30
在中斷外把flag a啥的打印出來看看,確定是哪個條件沒滿足

flag 和 a都沒有問題啊
回復(fù)

使用道具 舉報

6#
ID:387733 發(fā)表于 2018-10-9 20:55 | 只看該作者
        S = (time * 1.7) / 100;                         //算出來是CM

把這個語句改成:

               S = (time * 17) / 1000;                

跟蹤一下,看看是不是希望的結(jié)果       
回復(fù)

使用道具 舉報

7#
ID:303383 發(fā)表于 2018-10-10 09:47 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
回復(fù)

使用道具 舉報

8#
ID:402202 發(fā)表于 2018-10-10 18:56 | 只看該作者
小貓貓愛吃魚 發(fā)表于 2018-10-10 09:47
最主要的問題,應(yīng)該是中斷有沖突了

對呀,問題就是中斷3和中斷4上面
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产传媒在线观看 | 一区二区三区回区在观看免费视频 | 色综合桃花网 | 一区二区av | 久久伊人精品 | 国产精品99久久免费观看 | 91影库| 国产婷婷 | 久久精品国产免费高清 | 粉嫩国产精品一区二区在线观看 | 国产精品国产三级国产aⅴ无密码 | 国产精品福利一区二区三区 | 免费精品一区 | 91观看| 天堂一区 | 国产美女精品视频免费观看 | 农夫在线精品视频免费观看 | 一区二区国产在线观看 | 亚洲精品一区在线观看 | 久久机热| 中文字幕视频在线 | 国产高清一区二区 | a在线视频 | 国产91精品久久久久久久网曝门 | 国产亚洲精品精品国产亚洲综合 | 国产成人在线观看免费 | 大象一区 | 国产成都精品91一区二区三 | 欧美一区二 | 国产一极毛片 | 精品日韩一区二区三区av动图 | 国产精品一区二区久久精品爱微奶 | 日韩中文字幕在线观看 | 久久av一区 | 在线播放国产一区二区三区 | 五月天综合影院 | 欧美极品一区二区 | 亚洲色综合 | 国产九九精品视频 | 欧美精品影院 | 婷婷99|