وعليكم السلام اخوي عبدالله
اعتذر عن التاخر في الرد على رسالتك الخاصة ولكن حاولت الرد بس للاسف انت معطل استقبال الرسائل من الاعضاء في المنتدى ولم استطيع الرد. اتمنى ان تراسلني عند تفعيل استقبال الرسائل, حتى ارد على رسالتك الخاصة.
وبالنسب للكود شايف خطا بسيط وان شاءالله يكون هو الحل للمشكلة
1-
كود:
void interrupt () {
unsigned int ov_cnt=0;
if (TMR1IF) //if timer1 overflow
{ PIR1.TMR1IF = 0; //clear overflow
ov_cnt=ov_cnt+1; //add 1 to ov_cnt
} }
المفروض مانصفر ونعرف ال ov_cnt داخل دالة المقاطعة, لانه لو نراجع الكود نلاحظ انه كل مره تتفعل المقاطعة يتصفر ال ov_cnt ويزيد بمقدار واحد.
فنعدل داله المقاطعة كالتالي:
كود:
void interrupt () {
if (TMR1IF) //if timer1 overflow
{ PIR1.TMR1IF = 0; //clear overflow
ov_cnt=ov_cnt+1; //add 1 to ov_cnt
} }
والمتغير ov_cnt عرفته في البدايه مع ال global variables
كود:
unsigned int temp1,temp2,ov_cnt=0;
unsigned long period;
float freq1,freq2,freq3,freq4,freq5;
:
:
فما نحتاج نعرفه ثاني داخل داله المقاطعة لانه جميع الدوال(functions) في الكود تتعرف على ال global variables