سلام
من میخوام با میکرو فرکانس 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); } }
دیدگاه