|
بسم الله الرحمن الرحيم
اخ حسن اولا دعنا نستغني عن الديلي واستنتاج جميع التاخيرات الزمنية اللتي نريدها من التايمر ثم انه لايجب وضع كامل الكود داخل المقاطعة يمكن الاكتفاء بتفعيل بت داخل المقاطعة ليكون شرطا لتنفيذ التعليمات الطويلة اللتي وضعناها وتنفيذها خارج المقاطعة لاننا لدينا ايضا مقاطعة المنفذ التسلسلي يعني عنا مقاطعتين ولايجب ان نبقى طويلا ننفذ التعليمات داخل مقاطعة واحدة
ويمكن وضع متغيرات تزيد مع كل مقاطعة للتايمر وعند وصولها للزمن اللذي نريد تاخيره نقوم بتصفير المتغير وتنفيذ الامر اللذي نريد
وهكذا سيكون البرنامج سلس ومرن
راجع البرنامج الاخير وانظر الى الطريقة اللتى استخدمتها للتأخير الزمني وسيعمل البرنامج كاملا ان شاء الله
بالنسبة ان لكل سفن سيكمنت اي سي فهذا مكلف ولا ارا له اي لزوم لاننا بالزمن اللذي وضعناه مع الفلتر البلاستيكي الاحمر سناخذ اضائة عالية لوحدات الاظهار هذا ونحن نتكلم على 56 وحدة عرض تقريبا فتخيل لو عندنا ماتريكس بطول متر او مترين او اكثر كم سيلزم من هذه الايسيات
|
السلام عليكم
تسلم أخي
نعم أخي نستطيع أستنتاج الزمن من تايمر ولكن مشكله هنا اذا كانت لديك عده دوال دعنا نفترض داله قراءه درجه حراره اذا أستدعيتها فأن الطريقه وضع متغير داخل انتربت ليحسب لنا زمن غير ناجح وهذا عن تجربه فكنت أقرا درجه حراره NTC وكنت وضعت متغير يحسبلي زمن ولكن مشكله انه أثناء تنفيذ اوامر بعضها تحتاج وقت ولن ينفذ داله سفن سكمنت الى ان يصل الى كود الذي كتبته
مثلا
كود:
if(cont1>=1) { cont1=0;display_7seg() ; }
فهنا اذا كان البيك مشغول بتنفيذ امر ما فلن ينفذ هذا الامر صحيح انه يزيد من قيمه
cont1 ولكن لن ينفذ امر اظهار البيانات على سفن سكمنت حتى يصل اليه
ولكن بوضع الكود ضمن داله انتربت فمهما يحدث فأنه البيك دائما ينفذ امر اظهار البيانات على سفن سكمنت يعني حتى لو أكتب زمن تأخيري مقداره مثى 10 ثواني فلايؤثر ذلك على سفن سكمنت
ارجو اني وضحت قصدي من وضع الكود داخل الانتربت
اي انني مبتعد عن اي شيئ ممكن يعيق عمليه multiplexing
طبعا توجد حلول ولكن افضلها وضع كود سفن سكمنت داخل انتربت
ولكن أتصور ان تنفيذ اكثر من مقاطعه سوف سبب ارباك في عمل البيك يعني مره يحدث مقاطعه من تايمر واخرى من RCIF_bit اتصور لما يقرا البيانات من كمبيوتر يجبره تايمر على حدوث مقاطعه مره اخرى فيؤثر سلبا في نتائج فما هو رأيك بكثره مقاطعات
مع جزيل الشكر والتقدير