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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4085|回復(fù): 7
收起左側(cè)

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

[復(fù)制鏈接]
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)牙的通信是否運行
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--);
        }
}

//小車運動函數(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賦值,讓串行口中斷判斷如何運行
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
        }
}

回復(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ù)

使用道具 舉報

ID:402202 發(fā)表于 2018-10-9 13:18 | 顯示全部樓層
new_hand 發(fā)表于 2018-10-6 09:30
在中斷外把flag a啥的打印出來看看,確定是哪個條件沒滿足

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

使用道具 舉報

ID:387733 發(fā)表于 2018-10-9 20:55 | 顯示全部樓層
        S = (time * 1.7) / 100;                         //算出來是CM

把這個語句改成:

               S = (time * 17) / 1000;                

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

使用道具 舉報

ID:303383 發(fā)表于 2018-10-10 09:47 | 顯示全部樓層
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
回復(fù)

使用道具 舉報

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一区二区三区 | 亚洲视频免费一区 | 黄色大片视频 | 精品一区二区三区91 | 中文视频在线 | 精品中文字幕一区二区三区 | 日韩中文字幕视频在线观看 | 中文字幕第三页 | 懂色av色香蕉一区二区蜜桃 | www.久久精品视频 | 久久麻豆精品 | 亚洲欧美第一视频 | 亚洲最新在线视频 | 亚洲国产精品久久人人爱 | 国产日韩欧美一区 | 亚洲欧美激情精品一区二区 | 99久久精品国产一区二区三区 | 国产成人a亚洲精品 | 欧美一区二区三区在线观看 | 最新国产视频 | 天啪 | 高清一区二区 | 亚洲性视频 | 亚洲看片| 成人免费视频 | 国产91丝袜在线熟 | 97色在线视频 | 国产三级 | 日韩精品一区二区三区在线播放 | 日韩a视频| 国产我和子的乱视频网站 | 精品av| 成年人精品视频在线观看 | 天天干在线播放 | 天天干狠狠干 | 精品久久国产 | 黄色片在线免费看 | 在线看黄免费 |