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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4038|回復: 7
打印 上一主題 下一主題
收起左側

藍牙&超聲波結合的問題

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

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


想實現功能:藍牙遙控的時候,小車檢測前方障礙,如果遇到障礙,小車自動停止,并且不能前進。


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

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

#define uint unsigned int
#define uchar unsigned char
        
bit flag = 0;                                                        //用來標志定時器0溢出
uchar a;                                                                        //用來判斷藍牙的通信是否運行
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;

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

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

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

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

//超聲波啟動函數
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;
}

//超聲波測距函數
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;
        }
}
//根據a來進行判斷并處理串口的數據
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);                //當RX為零時等待
                TR0 = 1;                          //開啟計數
                while(ECHO);                //當RX為1計數并等待
                TR0 = 0;                                //關閉計數
    USCount();                        //計算
                delay(100);                        //100MS
        }
}

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

不對哦
回復

使用道具 舉報

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

flag 和 a都沒有問題啊
回復

使用道具 舉報

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

把這個語句改成:

               S = (time * 17) / 1000;                

跟蹤一下,看看是不是希望的結果       
回復

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级做a爰片性色毛片视频停止 | www.亚洲| 国产国拍亚洲精品av | 日韩高清三区 | 婷婷国产一区 | 黄色一级免费 | 亚洲乱码一区二区 | 美女爽到呻吟久久久久 | 成人国产精品色哟哟 | 中文字幕 欧美 日韩 | 国产专区免费 | 91看片官网| 午夜三级视频 | 99精品视频免费在线观看 | 久久99视频免费观看 | 国产精品久久久久久久7777 | 亚洲综合第一页 | 91视频进入| 亚洲国产高清免费 | 午夜天堂 | 欧美视频免费 | 久久精品无码一区二区三区 | 国产九九av| 成人在线视频观看 | 精品国产黄a∨片高清在线 www.一级片 国产欧美日韩综合精品一区二区 | 小早川怜子xxxxaⅴ在线 | 天天干天天玩天天操 | 在线成人 | 少妇一级淫片免费放播放 | 视频三区 | 日本一道本 | 精品九九| 欧美日韩国产一区二区三区 | 国产99久久精品一区二区永久免费 | 又黄又色| 国产成人精品一区二区三区视频 | 干干干操操操 | 久久久妇女国产精品影视 | 日韩高清国产一区在线 | 国产精品日产欧美久久久久 | 欧美videosex性极品hd |