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

標題: 單片機小車超聲波舵機模塊不知道為什么只有舵機轉,小車不走 [打印本頁]

作者: 1145421628    時間: 2020-3-10 22:09
標題: 單片機小車超聲波舵機模塊不知道為什么只有舵機轉,小車不走
大佬看看是不是代碼有問題,已經卡這快一個星期了,
#include<reg52.h>
#include<intrins.h>
#define uint  unsigned int
#define uchar unsigned char
sbit trig=P1^0;
sbit echo=P2^0;    //觸發控制信號輸入
sbit pwm=P2^6;     //回響信號輸出
sbit M1A=P0^0;
sbit M1B=P0^1;
sbit M2A=P0^2;  
sbit M2B=P0^3;
uchar count,jd;
uint  time=0,timer=0;   
bit flag =0;   
unsigned long s=0,zs=0,ys=0;
void delay(uint x)  
{
uint i,j;
     for(i=x;i>0;i--)   
for(j=110;j>0;j--);  
}
  void tingzhi()  //停止
  {
  M1A=0;
    M1B=0;
    M2A=0;
    M2B=0;
  }
  void qianjin()  //前進
  {
  M1A=0;
    M1B=1;
    M2A=0;
    M2B=1;
  }
  void houtui()   //后退
  {
  M1A=1;
    M1B=0;
    M2A=1;
    M2B=0;
  }
  void zuozhuan()  //左轉
  {
  M1A=1;
    M1B=0;
    M2A=0;
    M2B=1;
  }  
    void youzhuan()  //右轉
{
    M1A=0;
    M1B=1;
    M2A=1;
    M2B=0;
}  
void ceju(void)
{
  while(!echo);   //當echo為零時等待
    TR0=1;          //開啟計數
    while(echo);    //當echo為1計數并等待
  TR0=0;
  time=TH0*256+TL0;
  TH0=0;
  TL0=0;
  s=(time*1.7)/100;  //單位cm
}
   void qingling()
   {
    time=0;
    TH1=65036/256;
  TL1=65036%256;
    count=0;
   }
  void zd0()interrupt 1  //T0中斷用來計數器溢出,超過測距范圍
  {
  flag=1;                //中斷溢出標志
  }
  void zd1()interrupt 3
  {
  TH1=65036/256;
  TL1=65036%256;
   if(count<jd) pwm=1;
   else pwm=0;
   count++;
   count=count%40;
   timer++;
    if(timer>=800)
    {
    timer=0;
     trig=1;
  _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
     trig=0;
    }
  }
  void main(void)
  {
  jd=3;
   count=0;
   TMOD=0x11;
   TH0=0;
   TL0=0;
   TH1=65036/256;
  TL1=65036%256;
   IE=0x8a;
   while(1)
   {
   TR1=1;
    ceju();
    if(s<=10);
    {
    tingzhi();
     jd=1;
     count=0;
     delay(20);
     TR1=0;
     qingling();
     TR1=1;
     ceju();
     ys=s;
     jd=5;
     count=0;
     delay(20);
     TR1=0;
     qingling();
     TR1=1;
     ceju();
     zs=s;
     jd=3;
     count=0;
     delay(20);
     TR1=0;
     if((zs>=ys)&&(zs>10))
     {
     zuozhuan();
     }
     else if((ys>=zs)&&(ys>10))
     {
     youzhuan();
     }
     else
     {
     houtui();
     }
     if((s>10)||(flag==1))
     {
      qianjin();
     }
    }
   }
  }



作者: 1145421628    時間: 2020-3-11 09:55
我寫了個小車移動的程序,里面沒有關于超聲波舵機的相關程序,只要插上超聲波trig小車就不走,拔了走,求原因
作者: game灬boy    時間: 2020-3-11 15:28
sbit echo=P2^0;    //觸發控制信號輸入

void ceju(void)
{
  while(!echo);   //當echo為零時等待
    TR0=1;          //開啟計數
    while(echo);    //當echo為1計數并等待
  TR0=0;
  time=TH0*256+TL0;
  TH0=0;
  TL0=0;
  s=(time*1.7)/100;  //單位cm
}
P2^0腳的模式是怎樣的  后面沒看到echo 的變化
這里兩個while 如果echo 值沒有一直01變化
就必然會產生一個while(1)的死循環;程序就會死在這里

作者: 1145421628    時間: 2020-3-11 19:40
game灬boy 發表于 2020-3-11 15:28
sbit echo=P2^0;    //觸發控制信號輸入

void ceju(void)

可我看很多資料都這么寫啊!

1583926787701.jpg (1.98 MB, 下載次數: 45)

1583926787701.jpg

作者: game灬boy    時間: 2020-3-29 16:10
1145421628 發表于 2020-3-11 19:40
可我看很多資料都這么寫啊!

小車不走肯定是程序死在某個地方了,安照你的代碼問題應該出在ceju上面

示例代碼可能有把ECHO初始化,然后超聲波返回時對其進行改變,或者在中斷中將其變化
看不到你得硬件很難分析;你的P20腳的電平必須在ceju();時01變化

sbit trig=P1^0;
sbit echo=P2^0;    //觸發控制信號輸入
sbit pwm=P2^6;     //回響信號輸出

你得這些接的什么腳?可能是硬件接法問題
你得分析P20腳的電平到底怎么變的

作者: tyu1    時間: 2020-3-29 19:46
程序看上去沒有明顯錯誤,確定硬件也沒有問題嗎,接線也都是正確的?




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