打印
[Atmel]

基于avr单片机的超声波测速

[复制链接]
1379|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuan_weiguan|  楼主 | 2014-8-5 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想用计数器0来计数,以得到相应的时候,但程序好像没有运行成功,求各位大神指点...
程序如下:
#include <iom16v.H>                //器件配置文件
#include <macros.h>

#define  TXoff  PORTB&=~BIT(0)
#define  TXon   PORTB|=BIT(0)
void Delay5Ms(void);
void Delay400Ms(void);
unsigned int  time=0;
unsigned long S=0;
void Delay5Ms(void)
{
        unsigned int TempCyc = 5552;
        while(TempCyc--);
}
//400ms延时
void Delay400Ms(void)
{
        unsigned char TempCycA = 5;
        unsigned int TempCycB;
        while(TempCycA--)
                {
                        TempCycB=7269;
                        while(TempCycB--);
                };
}

void Conut(void)
{
         time=TCNT0*256;
         TCNT0=0X00;
       
         S=(time*1.7)/100;  
}  
/********************************************************/

/********************************************************/
void  StartModule(void)                          //启动模块
{
          TXon;                                             //启动一次模块
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          NOP();
          TXoff;
}
/********************************************************/
void delayms(unsigned int ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}
/*********************************************************/
void main(void)
{
         unsigned char RX;
         RX=PINB&BIT(1);
         TCCR0=0X00;
         TCNT0=0X00;
         DDRB|=0XFD;        
         DDRA=0XFF;
         PORTA=0XFF;
         while(1)
          {
             StartModule();
               
             while(!RX);                //当RX为零时等待
             TCCR0=0X06;
             while(RX);                        //当RX为1计数并等待
                 TCCR0=0X00;                //关闭计数
         Conut();                        //计算
                 delayms(80);                //80MS
                 if(S>10) PORTA=0X00;
                 else PORTA=0XF0;
                 
          }
        }




               

相关帖子

沙发
ddllxxrr| | 2014-8-5 17:59 | 只看该作者
while(!RX);                //当RX为零时等待
TCCR0=0X06;
while(RX);                        //当RX为1计数并等待
TCCR0=0X00;                //关闭计数

这块有点问题好像,超声波在没有接到回波之前都是低电平。你的程序在等着干么,再有启动定时器,应在送出启动脉冲之后马上启动定时器。

使用特权

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

本版积分规则

7

主题

13

帖子

0

粉丝