معذرة لست خبيرا فى لغة السى و كنت انتظر أحد الاخوة الخبراء أن يتكرم بالرد لكن على قدر ما وجدت أن المسافة تقيس النصف نتيجة خطأ فى معادلة حساب المسافة وهى فى
كود:
a = (TMR1L | (TMR1H<<8));
a = a/58.82;
a = a + 1;
أما لماذا يعطى نتيجة سالبة فأظن أن انتظار echo فى دورة عادة لا يعطى نتائج صحيحة
الأفضل التعامل بالمقاطعة هكذا
بعد إرسال النبضة لمدة 10 ميكرو نفعل المقاطعة و نشغل العداد
عند وصول نبضة Echo تدخل من طرف المقاطعة الخارجية طرف 6 أو RB0 وهذه تفعل كود الحساب وتوقف العداد وتمنع المقاطعة أما لو اكتمل العداد وعمل Overflow فهو أيضا يسبب مقاطعة أخرى تمنع حساب قيم غير صحيحة و تضع رسالة Over Range مثلا أو ما شابه