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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2453|回復: 3
收起左側

單片機pwm和三個超聲波一起,但是超聲波用不了,不知道問題出在哪,求大神指點

[復制鏈接]
ID:480013 發表于 2019-3-5 22:19 | 顯示全部樓層 |閱讀模式
#include"reg51.h"
#include<intrins.h>
#define PWM_T 100    //pwm周期100
unsigned char speed_L;    //左輪脈寬調值
unsigned char speed_R;     //右輪脈寬調值
unsigned char pwm_speed;  //定義自加變量
unsigned long time;     //讀取時間
unsigned long s;
unsigned long s1;
unsigned long s2;    //保存計算距離
sbit DA_L=P3^6;
sbit DA_R=P3^7;          //PWM高低電平輸出口
sbit L_1=P2^0;
sbit L_2=P2^1;          //左電機
sbit R_1=P2^2;
sbit R_2=P2^3;           //右電機
sbit RX=P1^0;                    //超聲波接收
sbit TX=P1^1;        //超聲波發送
sbit RX_1=P1^2;                    ///超聲波接收
sbit TX_1=P1^3;         //超聲波發送
sbit RX_2=P1^4;                    //超聲波接收
sbit TX_2=P1^5;       //?超聲波發送
void delay(unsigned char x)
{
  while(x--);
}            
void count()
{   
while(!RX);
TR0=1;
while(RX);
TR0=0;
    time=TH0*256+TL0;
TH0=0;
TL0=0;
s=(time*1.7)/100;
}
void count1()
{   
while(!RX_1);
TR0=1;
while(RX_1);
TR0=0;
    time=TH0*256+TL0;
TH0=0;
TL0=0;
s1=(time*1.7)/100;
}
void count2()
{   
while(!RX_2);
TR0=1;
while(RX_2);
TR0=0;
    time=TH0*256+TL0;
TH0=0;
TL0=0;
s2=(time*1.7)/100;
}
void status(unsigned char i)
{
   switch(i)
   {
     case 0: L_1=1; L_2=0; R_1=1; R_2=0;    break;     //前進
  case 1: L_1=0; L_2=1; R_1=0; R_2=1;    break;     //后退
  case 2: L_1=1; L_2=0; R_1=0; R_2=1;    break;     //右轉
  case 3: L_1=0; L_2=1; R_1=1; R_2=0;    break;     //左轉
  case 4: L_1=0; L_2=0; R_1=0; R_2=0;    break;     //停止
   }      
}
void main()               
{
   TMOD|=0x11;   
   TH0=0;
   TL0=0;      
   ET0=1;
   TH1=(65536-1000)/256;
   TL1=(65536-1000)%256;   
   ET1=1;
   EA=1;         
   TR1=1;     
   
      while(1)      
      {  
   TX=1;
   delay(2);
   TX=0;
   count();
   TX_1=1;
   delay(2);
   TX_1=0;
   count1();
   TX_2=1;
   delay(2);
   TX_2=0;
      count2();
   if(s<=20&&s1<=20&&s2<=20)
   {
    speed_L=100;
    speed_R=100;
    status(1);
   }
   else if(s1<=20&&s<=20&&s2>=20)
   {
    speed_L=20;
    speed_R=100;
    status(0);
   }
   else if(s1>=20&&s<=20&&s2<=20)
   {
    speed_L=100;
    speed_R=20;
    status(0);
   }
   else
   {
    speed_L=100;
    speed_R=100;
    status(0);
   }
      
   }
}
void csbyc() interrupt 1
{
}
void time0_pwm()interrupt 3   
{
  TH1=(65536-1000)/256;
  TL1=(65536-1000)%256;
  if(pwm_speed<=PWM_T)
  {
     pwm_speed++;
  }
  else
  {
    pwm_speed=0;
  }           
  if(pwm_speed<speed_L)      
  {
    DA_L=1;
  }
  else
  {
    DA_L=0;        
  }
  if(pwm_speed<speed_R)
  {
    DA_R=1;
  }
  else
  {
    DA_R=0;
  }
}              
/*加一個超聲波就能用,但是兩個以上就不行了,試了好多種方法了,兩個以上時pwm也能用。現在是程序燒進去小車總保持第一個狀態有時候改了些東西就沒反應了。求大神指點下,哪里出的毛病,想好幾天了,一點進展都沒有。*/


回復

使用道具 舉報

ID:480013 發表于 2019-3-5 22:21 | 顯示全部樓層
原程序里if中s<=20有括號括著
回復

使用道具 舉報

ID:480013 發表于 2019-3-7 15:26 來自觸屏版 | 顯示全部樓層
求大神指點啊
回復

使用道具 舉報

ID:480013 發表于 2020-10-31 09:28 | 顯示全部樓層
這個問題以前已經解決了,能用的,只是因為沒有連接外設,程序被卡在了循環等待超聲波返回
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表