fangliang425 发表于 2011-8-25 23:41:47

超声波模块HC-SR04 AVR程序在哪里,自己改的51就是不成功

/****************************
作用:利用超声波测距
函数说明:当输入捕获到信号,大于200HZ时,turn=1,产生动作


/*****************************/
#include"iom128v.h"
#include"macros.h"

#define uchar unsigned char
#define uint unsigned int

#include"Display.c"

#define a (PIND&0X10)


long time, flag,S;


void init(void)
{
TCCR1A=0X00;         //非比较匹配.PWM模式,一般模式
TCCR1B=0X02;   
      
TCNT1H=0;
TCNT1L=0;               

DDRB|=BIT(4);

DDRD|=BIT(4);
PORTD=0;
DDRD&=~BIT(4);

SREG|=BIT(7);                                //开全局中断

}

void start(void)
{
PORTB=0XFF;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
PORTB=0;
}





void Conut(void)
        {
       time=TCNT1H*256+TCNT1L;
       TCNT1H=0;
       TCNT1L=0;
       
       S=(time*1.7)/100;   //算出来是CM
       if((S>=700)||flag==1) //超出测量范围显示“-”
       {       
          flag=0;
          Write_Add(0,0);
          Write_Data('-');
       }
       else
       {
          Write_Add(0,0);
          Write_Num(S%10000/1000);
          Write_Num(S%1000/100);
          Write_Num(S%100/10);
          Write_Num(S%10);
       }
       
        }

void main(void)
{


LCD_init();
init();
TCNT1H=0;
TCNT1L=0;
           while(1)
           {
                   start();
                while(!(a==0x10));
                SREG|=BIT(7);;//使能定时器1中断
                while(a==0x10);
                SREG&=~BIT(7);;
                Conut();
                Delaynms_Dis(100);
                }
}

#pragma interrupt_handler timer_1:15
void timer_1(void)
{
        flag=1;

}
以上是我根据51的例程的改的,不知道哪错了,估摸着用SREG|=BIT(7)代替51的TR0有问题,avr里有控制定时器计数的寄存器吗,而不是控制中断的开关

fangliang425 发表于 2011-8-25 23:44:19

以上并没有用到捕获,开头的注释我没去掉

fangliang425 发表于 2011-8-25 23:44:31

以上并没有用到捕获,开头的注释我没去掉

panpan4026 发表于 2012-11-28 16:37:09

你的测量范围是多少?

ouyangyu 发表于 2012-12-4 11:43:41

支持一下
页: [1]
查看完整版本: 超声波模块HC-SR04 AVR程序在哪里,自己改的51就是不成功