liujinyu 发表于 2010-9-1 01:20:38

你好 马老师 你可以看看我的程序有什么问题吗

是avr16事件捕捉来测频率的总是定时中断不进
我用的是ewavr   谢谢老师讲解
#include <ioavr.h>
#include <intrinsics.h>

#defineuchar unsigned char
#defineuintunsigned int
//__delay_cycles(500000);// Wait for 500 000 cycles


uint ICR;
unsigned long x;
unsigned long v;


uchar zd;
uchar bh;
longhz;
unsigned char sta=0;
unsigned char flag1=0;



//管脚初始化
void port_init(void)
{
DDRA= 0xff;
PORTA = 0x18;
DDRB= 0xff;
PORTB = 0xFF;
DDRB= 0xFF;
PORTC = 0xFF;
DDRC= 0xFF;
PORTD = 0xFF;
DDRD= 0x00;
}
//定时器1初始化   捕捉模式
void time1_init()
{
TIFR=0X00;
TCCR1B = 0x00; //stop
TCNT1H = 0x00; //setup
TCNT1L = 0x00;
TCCR1A = 0x00;
TCCR1B = 0xc1; //start Timer
TIMSK=0X24;
MCUCR=0;
GICR=0;
SREG_Bit7=1;

}



void main()
{

flag1=0;
zd=0;
port_init();
time1_init();


while(1)
{
   
   
    if(flag1==1)
   {
   hz=ICR-ICR;
   zd=0;
   bh=ICR;
   flag1=0;
   }
   
   }

}
//捕获中断处理
#pragma vector=TIMER1_CAPT_vect
__interrupt void timer1_capt_isr(void)
{
   if(sta==0)
   {ICR=ICR1;
    sta+=1;
   }
   else
    ICR=ICR1;
   
   bh++;

   
}
   //////time1中断//

#pragma vector=TIMER1_OVF_vect
__interrupt void timer1_ovf_isr(void)
{
if(zd==122)
{
   TCNT1H = 237; //setup
   TCNT1L = 255;
   flag1=1;

}
else
zd++;   
}

liujinyu 发表于 2010-9-1 01:21:47

pd 是输入

machao 发表于 2010-9-22 17:45:51

下载或购买我的教程,里面有捕捉方式测频率的例子,可以参考。
页: [1]
查看完整版本: 你好 马老师 你可以看看我的程序有什么问题吗