fateme_a_m
دوشنبه 16 شهریور 1388, 14:25 عصر
با سلاممن یه برنامه تو کدویژن نوشتم واسه تشخیص فرکانس محیط که برای این کار از وقفه استفاده کردم و در تابع وقفه بدین ترتیب پیش رفتم: ریختم و با فرمول زیر زمان Mرا در متغیر TCNT0از یک لبه تا لبه ی بعدی تایمر را فعال کردم و مقدار را بدست اوردم و بعد هم فرکانس TIME=(N*(M+1))/Fولی مشکل اینجاست که تو پروتئوس با کلاکای مختلف یک فرکانس نشون میدهلطفا به من کمک کنید و بگید اشتباهم کجاست؟اینم برنامه:/************************************************** ***Chip type : ATmega32Program type : ApplicationClock frequency : 8.000000 MHzMemory model : SmallExternal RAM size : 0Data Stack size : 512*********************************************** ******/#include #include #include #asm .equ __lcd_port=0x18 ;PORTB#endasm#include static int i=0;long int M; int F; char*str;// External Interrupt 0 service routineinterrupt [EXT_INT0] void ext_int0_isr(void){i=i+1;// Place your code hereTCNT0=0x03;//TCNT0=0B10010011;if(i==2){ i=0;TCNT0=M;TCNT0=0X00;}}// Declare your global variables herevoid main(void){// Declare your local variables here// Input/Output Ports initialization// Port A initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00;DDRA=0xFF;// Port B initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00;DDRB=0xFF;// Port C initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;DDRC=0x00;// Port D initialization// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;DDRD=0x00;// Timer/Counter 0 initialization// Clock source: System Clock// Clock value: Timer 0 Stopped// Mode: Normal top=FFh// OC0 output: DisconnectedTCCR0=0x00;TCNT0=0x00;OCR0=0x00;// Timer/Counter 1 initialization// Clock source: System Clock// Clock value: Timer 1 Stopped// Mode: Normal top=FFFFh// OC1A output: Discon.// OC1B output: Discon.// Noise Canceler: Off// Input Capture on Falling Edge// Timer 1 Overflow Interrupt: Off// Input Capture Interrupt: Off// Compare A Match Interrupt: Off// Compare B Match Interrupt: OffTCCR1A=0x00;TCCR1B=0x00;TCNT1H=0x00;TCNT1L=0x00 ;ICR1H=0x00;ICR1L=0x00;OCR1AH=0x00;OCR1AL=0x00;OCR 1BH=0x00;OCR1BL=0x00;// Timer/Counter 2 initialization// Clock source: System Clock// Clock value: Timer 2 Stopped// Mode: Normal top=FFh// OC2 output: DisconnectedASSR=0x00;TCCR2=0x00;TCNT2=0x00;OCR2=0 x00;// External Interrupt(s) initialization// INT0: On// INT0 Mode: Rising Edge// INT1: Off// INT2: OffGICR|=0x40;MCUCR=0x03;MCUCSR=0x00;GIFR=0x40;// Timer(s)/Counter(s) Interrupt(s) initializationTIMSK=0x00;// Analog Comparator initialization// Analog Comparator: Off// Analog Comparator Input Capture by Timer/Counter 1: OffACSR=0x80;SFIOR=0x00;lcd_init(16);// Global enable interrupts#asm("sei")while (1) { F=125000/(1+M); itoa(F,str); lcd_clear(); lcd_puts(str); //delay_ms(100); // PORTA=F; // Place your code here };}