打印
[国产单片机]

单片机驱动超声波模块程序有问题,请求大虾帮助

[复制链接]
1451|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
迷惘的年代|  楼主 | 2011-11-13 10:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
sbit LED=P1^2;//模拟蜂鸣器
sbit ECHO=P1^0;//超声波回响引脚
sbit TRIG=P1^3;//超声波触发引脚
uint flag=0;
uint time;
long S;
void delay(uint z)            //声音延时子函数
{
  int x;
  for(;z>0;z--)
  for(x=110;x>0;x--);
}
void zd1() interrupt 1
{
     TR0=0;
     flag=1;
     TH0=0;
     TL0=0;
}
void count()         
  {
      
       time=TH0*256+TL0;
       S=time*0.00017;       //算出来是M  12M晶振        
  }

/*----------声音部分--------*/
void mansu()
{  
  LED=1;
  delay(600);
  LED=0;
  delay(600);
}
void zhongsu()
{
  LED=1;
  delay(300);
  LED=0;
  delay(300);
}
void kuaisu()
{  
  LED=1;
  delay(50);
  LED=0;
  delay(50);
}
/*--------超声处理部分--------*/
void chaoshengjingbao()
{  
  if(flag!=1)
       {
         if((S>3)&&(S<4))
         {
           mansu();
           S=500;
           //delay(1000);
         }
         if((S>2)&&(S<=3))
         {
           zhongsu();
           S=500;
           //delay(1000);
         }
         if(S<=2)
         {
           kuaisu();
           S=500;
           //delay(500);
         }
       }
       if(flag==1)
       {
        LED=1;
        delay(1000);
        flag=3;
       }
}
void timerinit()       //定时器初始化
{
    TMOD=0x01;           //设T0为方式1,GATE=1
    TH0=0;
    TL0=0;
    TR0=1;
}
void StartModule()           //超声波触发程序,打开定时器开始计时
{      
      TRIG=0;                              
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      TRIG=1;
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      TRIG=0;
}      
/*------------------------------------------------------*/  
void main()
{  
   ECHO=0;
   for(;;)
   {
       timerinit();
       StartModule();
       //delay(1000);
       while(ECHO==0)
          {
                _nop_();
          }
       TR0=0;
       count();
       //delay(110);
       chaoshengjingbao();
   }      
}

//这个程序是一个简易的通过超声波模块测距的程序,程序烧录到单片机以后不能正常运行,观察LED发现它只在一个频率闪烁,但正常的应该是随着距离的变化LED以不同的频率闪烁 。程序已经调了3,4天了,还是没结果,故请求各路高手帮我查出错误,万分感谢   。PS:我这超声波模块是通过TRIG引脚发送10UF的高脉冲后模块自动发射40KHZ的超声波,反射回来的超声波通过ECHO引脚产生高脉冲。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

7

帖子

1

粉丝