久久久久久久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 | 国产欧美一级二级三级在线视频 | 日本欧美黄色片 | 97视频在线观看免费 | 亚洲精品二三区 | 黄a在线播放 | 久久久久久国产精品免费免费男同 | 综合色婷婷 | 亚洲精品久久久久国产 | 国产男女猛烈无遮掩视频免费网站 | 在线观看中文字幕视频 | 天天干狠狠干 | 午夜精品一区二区三区在线观看 | 国产精品海角社区在线观看 | 中文字幕在线视频观看 | 久草久草久草 | 成年视频在线观看福利资源 | 国产日韩亚洲欧美 | 婷婷去俺也去 | 午夜影视 | 免费黄色大片 | 人人爽日日躁夜夜躁尤物 | 国产成人精品网站 | 毛片a级 | 日韩福利片 | 日韩精品无码一区二区三区 | 天天爽天天操 | 日本免费一区二区三区 | 久综合| 羞羞的视频免费在线观看 | 男人av网| 视频在线亚洲 | 日韩精品一区二区三区免费观看 | 伊人最新网址 | 麻豆va | a在线v| 激情黄色在线观看 | 久草在线视频中文 | 日本不卡一二三 | 日韩精品国产精品 | 日韩精品专区在线影院重磅 |