سلام
من میخوام با میکرو فرکانس 1Hz تا 1Mhz را اندازه گیری کنم . برنامه اش را هم نوشتم ولی نمیدونم چرا کار نمیکنه . فرکانس را به وقفه ی صفر دادم و روی حالت any change تنظیم کردم . تایمر 1 را هم با وقفه ی سرریز فعال کردم . توی وقفه ی صفر نوشتم که اگر برای مثال لبه ی بالا رونده بود ( c=0 ) تایمر را فعال کند و زمانی که لبه ی پایین رونده را حس کرد ( c=1 ) تایمر را خاموش کنه و مقدار تایمر را به عنوان نصف زمان تناوب روی LCD نمایش بده ولی عددی که نشون میده اشتباهه . ممنون میشم اگر راهنمایی کنید .
من میخوام با میکرو فرکانس 1Hz تا 1Mhz را اندازه گیری کنم . برنامه اش را هم نوشتم ولی نمیدونم چرا کار نمیکنه . فرکانس را به وقفه ی صفر دادم و روی حالت any change تنظیم کردم . تایمر 1 را هم با وقفه ی سرریز فعال کردم . توی وقفه ی صفر نوشتم که اگر برای مثال لبه ی بالا رونده بود ( c=0 ) تایمر را فعال کند و زمانی که لبه ی پایین رونده را حس کرد ( c=1 ) تایمر را خاموش کنه و مقدار تایمر را به عنوان نصف زمان تناوب روی LCD نمایش بده ولی عددی که نشون میده اشتباهه . ممنون میشم اگر راهنمایی کنید .
کد:
#include <mega16.h>
#include <stdio.h>
#include <alcd.h>
int count=0,f,c=0;
char ch[16];
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(c==0)
{
TCCR1A=0x00;
TCCR1B=0x01;
TCNT1H=0x00;
TCNT1L=0x00;
c=1;
}
else if(c==1)
{
TCCR1A=0x00;
TCCR1B=0x00;
f=TCNT1H;
f=f<<8;
f=(f+TCNT1L);
TCNT1H=0x00;
TCNT1L=0x00;
c=0;
}
}
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
}
void main(void)
{
PORTD=0x08;
DDRD=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
GICR|=0x40;
MCUCR=0x01;
MCUCSR=0x00;
GIFR=0x40;
TIMSK=0x04;
lcd_init(16);
#asm("sei")
while (1)
{
sprintf(ch,"%d",f);
lcd_gotoxy(0,0);
lcd_puts(ch);
}
}





دیدگاه