سلام
کلاک میکرو رو من گزاشتم رو پایه T0 رو لبه بالا رونده...و مقدار TOP رو هم که با OCR0 تعیین میشه مقدار 1 بهش دادم
لذا با یه بار تغییر حالت پایه T0 (یه لبه بالا رونده رخ بده) باید وقفه سرریز رخ بده ... و مقدار پورت A یه واحد بهش اضافه بشه
ولی 2 بار باید لبه بالا رونده رخ بده.....چرا؟
چیزی که به فکرم میرسه اینه که یه کلاک برا افزایش مقدار TCNT0 و یه کلاک برا رخ دادن وقفه و اجرای کد های داخلش صرف میشه....درست میگم؟
ممنون میشم دوستان راهنمایی کنن.
اینم از کد های پروژه
کلاک میکرو رو من گزاشتم رو پایه T0 رو لبه بالا رونده...و مقدار TOP رو هم که با OCR0 تعیین میشه مقدار 1 بهش دادم
لذا با یه بار تغییر حالت پایه T0 (یه لبه بالا رونده رخ بده) باید وقفه سرریز رخ بده ... و مقدار پورت A یه واحد بهش اضافه بشه
ولی 2 بار باید لبه بالا رونده رخ بده.....چرا؟
چیزی که به فکرم میرسه اینه که یه کلاک برا افزایش مقدار TCNT0 و یه کلاک برا رخ دادن وقفه و اجرای کد های داخلش صرف میشه....درست میگم؟
ممنون میشم دوستان راهنمایی کنن.
اینم از کد های پروژه
کد:
#include <mega16.h> interrupt[TIM0_OVF] void Timer_Counter0_ovf() { TCCR0 = 0; // Stop PORTA = PORTA + 1; TCNT0 = 0; } void main(void) { DDRA = 0XFF; PORTA = 0X00; // TIMER0 // External clock source on T0 pin (rising edge) >>>>> CS00 = 1, CS01 = 1, CS02 = 1 // Mode = CTC >>>>> WGM00 = 0, WGM01 = 1 // Timer/Counter Overflow Interrupt Enable >>>>> TOIE0 = 1 TCCR0 = (0<<FOC0) | (0<<WGM00) | (0<<COM01) | (0<<COM00) | (1<<WGM01) | (1<<CS02) | (1<<CS01) | (1<<CS00); TIMSK = (0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0); //TIFR = (0<<OCF2) | (0<<TOV2) | (0<<ICF1) | (0<<OCF1A) | (0<<OCF1B) | (0<<TOV1) | (0<<OCF0) | (0<<TOV0); TCNT0 = 0; OCR0 = 1; #asm("sei") while(1); }
دیدگاه