你好 马老师 你可以看看我的程序有什么问题吗
是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++;
} pd 是输入 下载或购买我的教程,里面有捕捉方式测频率的例子,可以参考。
页:
[1]