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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求大神指導 為什么我的超聲波老是不工作(超聲波加舵機)

[復制鏈接]
跳轉到指定樓層
樓主
ID:436152 發表于 2019-3-1 12:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit Trig = P2^2;
sbit Echo = P0^7;
sbit pwm = P2^3;
sbit led = P2^4;
sbit led1 = P2^5;
sbit led2 = P1^5;
sbit led3 = P1^6;

int jd;
int count;
unsigned int  time=0;
unsigned long S=0;
unsigned int  timer=0;           //時間標志位  
void  StartModule();

void Time0_Init()          //定時器初始化
{

TH1  = 0xfe;
TL1  = 0x33;     //11.0592MZ晶振,0.5ms
    TR1=1;                 //定時器開始
        ET1=1;
}
void delayms(unsigned int ms);

void Time0_Int() interrupt 3 //中斷程序
{

   uint a;
   led1 = ~led1;
   TH1  = 0xfe;             //重新賦值
   TL1  = 0x33;
   a++;
//   timer++;
//   if(a==40)
//   {
//           pwm=1;
//           a=0;
//   }
//   if(a=jd)
//   {
//             pwm=0;
//   }
//   if(timer>=500)
//   {                                         //每ms啟動一次模塊
     StartModule();
//         timer=0;
//   }
    if(count< jd)              //判斷0.5ms次數是否小于角度標識
      pwm=1;                  //確實小于,PWM輸出高電平
    else
      pwm=0;                  //大于則輸出低電平
    count=(count+1);          //0.5ms次數加1
    count=count%40;     //次數始終保持為40 即保持周期為20ms
}



void Conut(void)
        {
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;

         S=(time*1.7)/100;     //算出來是CM


                //如果距離小于等于20cm 則  舵機轉至180度

                if(S<=20){
                                          jd=5;
                                                 delayms(80);
                                                 led = 0;
                }else{

                        jd=2;     //默認舵機轉角為90度
                                                 led = 1;
                }
                }

void delayms(unsigned int ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}

void  StartModule()                          //啟動模塊
  {
          Trig=1;                                         //啟動一次模塊
          _nop_();
          _nop_();              //表示空循環一個機器指令的時間,12M中表示1us;  21次 大約20us  用于硬件初始化
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          Trig=0;
  }


void main(void)
{

         TMOD=0x11;                   //設T0為方式1,GATE=1;
         TH0=0;
         TL0=0;  
         Time0_Init();
                 

         ET0=1;             //允許T0中斷
         EA=1;                           //開啟總中斷        

        jd=2;
             Trig=0;
                Echo=0;
        while(1)
        {
//                     StartModule() ;
             while(!Echo);             //當RX為零時等待
             TR0=1;                            //開啟計數
             while(Echo);                       //當RX為1計數并等待
             TR0=0;                                //關閉計數
             Conut();                        //計算
             delayms(80);
        }

}               

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

使用道具 舉報

沙發
ID:436152 發表于 2019-3-1 12:49 | 只看該作者
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit Trig = P2^2;
sbit Echo = P0^7;
sbit pwm = P2^3;
sbit led = P2^4;
sbit led1 = P2^5;
sbit led2 = P1^5;
sbit led3 = P1^6;

int jd;
int count;
unsigned int  time=0;
unsigned long S=0;
unsigned int  timer=0;           //時間標志位  
void  StartModule();

void Time0_Init()          //定時器初始化
{
   
TH1  = 0xfe;
TL1  = 0x33;     //11.0592MZ晶振,0.5ms
    TR1=1;                 //定時器開始
        ET1=1;
}
void delayms(unsigned int ms);

void Time0_Int() interrupt 3 //中斷程序
{

   uint a;
   led1 = ~led1;
   TH1  = 0xfe;             //重新賦值
   TL1  = 0x33;
   a++;
   timer++;

   if(timer>=500)
   {                                         //每250ms啟動一次模塊
     StartModule();
         timer=0;
   }
    if(count< jd)              //判斷0.5ms次數是否小于角度標識
      pwm=1;                  //確實小于,PWM輸出高電平
    else
      pwm=0;                  //大于則輸出低電平
    count=(count+1);          //0.5ms次數加1
    count=count%40;     //次數始終保持為40 即保持周期為20ms
}
                 
                 
                 
void Conut(void)
        {
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
        
         S=(time*1.7)/100;     //算出來是CM
               
               
                //如果距離小于等于20cm 則  舵機轉至180度
               
                if(S<=20){
                                          jd=5;
                                                 delayms(80);
                                                 led = 0;
                }else{

                        jd=2;     //默認舵機轉角為90度
                                                 led = 1;
                }
                }

void delayms(unsigned int ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}

void  StartModule()                          //啟動模塊
  {
          Trig=1;                                         //啟動一次模塊
          _nop_();
          _nop_();              //表示空循環一個機器指令的時間,12M中表示1us;  21次 大約20us  用于硬件初始化
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          Trig=0;
  }


void main(void)
{

         TMOD=0x11;                   //設T0為方式1,GATE=1;
         TH0=0;
         TL0=0;  
         Time0_Init();
                 
        
         ET0=1;             //允許T0中斷
         EA=1;                           //開啟總中斷        
        
        jd=2;
             Trig=0;
                Echo=0;
        while(1)
        {
             while(!Echo);             //當RX為零時等待
             TR0=1;                            //開啟計數
             while(Echo);                       //當RX為1計數并等待
             TR0=0;                                //關閉計數
             Conut();                        //計算
             delayms(80);
        }
                        
}               


回復

使用道具 舉報

板凳
ID:1 發表于 2019-3-1 15:52 | 只看該作者
您這個問題給的信息不全,估計是沒人能回答得了的,先轉移到冷門區了,自行點擊編輯按鈕補充一下吧,審核員會幫你重新轉到熱門問答區的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品日韩av不卡在线 | 欧美精品乱码99久久影院 | 国产精品久久久久久久久动漫 | 午夜激情免费 | 青青草网| 搞黄视频免费看 | 国产精品1区| 操操日 | 国产精品欧美精品日韩精品 | 亚洲国产精品人人爽夜夜爽 | 欧美成人精品 | 91在线精品视频 | 91资源在线观看 | 91黄色免费看 | 男人天堂免费在线 | 国产精品久久久久久久久久免费 | 国产伦精品一区二区三区在线 | 国产精品一区二区三区四区 | 亚洲高清一区二区三区 | 久久久精品视频一区二区三区 | 欧美激情视频一区二区三区在线播放 | 久久久2o19精品 | 999在线精品| 精品欧美一区二区在线观看欧美熟 | 天天看天天摸天天操 | 欧美黑人一级爽快片淫片高清 | 免费av一区二区三区 | 久久精品国产99国产精品亚洲 | 一区二区中文 | 亚洲一区二区三区免费在线观看 | 91国产精品| 日韩三区| 久久亚洲天堂 | 亚洲一区二区 | 久久午夜电影 | 午夜天堂精品久久久久 | 国产成人精品免高潮在线观看 | 性高朝久久久久久久3小时 av一区二区三区四区 | 日韩有码一区 | 国产二区三区 | 亚洲欧美日韩精品久久亚洲区 |