欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 請問有沒有大佬用過單片機超聲波啊,可不可以指點一下 [打印本頁]

作者: 合體    時間: 2022-4-14 13:01
標題: 請問有沒有大佬用過單片機超聲波啊,可不可以指點一下
就是我寫的這段超聲波的代碼不知道為啥用不了
思路:用超聲波返回高電平的時間計算距離然后用串口發送到電腦上
#include <STC15F2K60S2.H>
#include "intrins.h"
sbit TRIG = P1^1; //單片機2.7針腳對應 trig
sbit ECHO = P1^2; //單片機2.6針腳對應 echo
int S;
int time;
void Delay30us()                //@11.0592MHz
{
        unsigned char i;

        _nop_();
        _nop_();
        i = 80;
        while (--i);
}

void init()
{        

        AUXR=0x40;
        SCON=0x50;
        TMOD=0x00;//定時0,1為模式0
        TL0 = 0xF7;                //設置定時初值1um
        TH0 = 0xFF;                //設置定時初值
        TL1 = 0xE0;                //波特率9600
        TH1 = 0xFE;                //波特率9600
        ES=1;
        EA=1;
        PS=1;//串口中斷設高

        TR1=1;
        ET0=1;
//定時器0,1中斷未打開//        
}
void main()
{        
        init();

        while(1)
        {        
          TRIG=1;
          Delay30us();        
          TRIG=0;        
                while(!ECHO);
        
                TR0=1;
                while(ECHO);
                TR0=0;
                SBUF=time;
                time=0;
        
        }

}
void TIMyE() interrupt 1
{
                time++;
               
}
void dff() interrupt 4
{
        RI=0;
        while(!TI);
        TI=0;

}

作者: zhxiufan    時間: 2022-4-14 13:56
有好幾個地方錯誤:
1、SBUF=time;time是int量,所以這樣發送是錯誤的。
2、void TIMyE() interrupt 1
{
                time++;
               
}1us定時,中斷服務里面用變量加1來處理,響應加計算占用時間不少,恐怕會影響結果。還不如直接讀取定時器值來的準確。
3.void dff() interrupt 4
{
        RI=0;
        while(!TI);
        TI=0;

}這里應該是錯誤的,發送引起的中斷的話TI已經是1了,沒有必要再有等待,所以這里最好的處理是判斷引起中斷原因做相應處理。
void dff() interrupt 4
{
       if(RI) RI=0;
       if(TI) TI=0;

}




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