السلام عليكم
ياشباب أنا أعمل بالمجال الإلكتروني منذ فترة وأحتاج إلى دارة تعتمد على الميكروكونترولر ولكن برمجتي ضعيفة رغم أن البرنامج بسيط وغير معقد ولكني لاأعرف بالبرمجة الكثير.
بإختصار أنا أريد أن يكون للميكروكونترولر ثلاث مداخل وثلاث مخارج والمداخل عندما يكون الفولت عليها 5 فولت أريد أن يعمل المخرج رقم واحد بعد إنقضاء ثلاث ثواني ويبقى في حالة عمل وعندما يصبح الفولت 0 على المدخل رقم واحد أريده أن يطفئ المخرج رقم واحد بعد إنقضاء ثلاث ثوان وأنا أعرف طريقة كتابة البرنامج ولكن الميكروكونترولر لايقوم بالعمل على الثلاث مداخل والمخارج معا,أقصد إذا كان المدخل رقم واحد والمخرج رقم واحد فإن باقي المداخل والمخارج لاتعمل حتى ينتهي المدخل والمخرج رقم واحد من العمل.
أقصد مثل هذا ياشباب ولكن على ثلاث مخارج وثلاث مداخل وأعتقد حسب ماأعرفه أنني بحاجة للإنتربيت حتى لاتقف الميكروكونترولر على أحد الأمور البرمجية وتتابع عملها.
كود:
if(porta.f0==1)
{delay_ms(3000),portb.f0=1;}
else{delay_ms(3000),portb.f0=0;}
|
مشكلة هذا الكود أنك تستخدم الأمر لكى توقف نشاط الميكرو حتى تنتهى 3 ثوانى للزر الأول على اى حال ثم تكرر نفس الشيء للثانى بعد الأول و أخيرا الثالث فستنتظر 9 ثوانى حتى تعود لتحسس حال الأول مرة أخرى
لو المداخل 3 فقط لا أكثر فغالبية الميكرو تحتوى 3 عدادات/مؤقتات Timer counter داخلى و يجب ان توظف واحد لكل مدخل تحسب به الزمن 3 ثوانى
ثانيا يجب ان تتحسس التغيير وليس القيمة و يمكنك مراجعة الكومبايلر لتحديد ما إن كان يحتوى مثل هذه الدالة و ما أثرها على سير البرنامج الباقى و إلا ستضطر لكتابة هذا الكود بنفسك أن تخلق 3 متغيرات كل منها بت واحدة و تجعل كل منها بحال المدخل المناظر
ثم تقارن إن كان المدخل لا يساوى المتغير فالمطلوب حساب الزمن
أيضا يجب أن تحدد ماذا يحدث لو ان المدخل تغير قبل الثوانى الثلاث هل ستلغى العملية كلها أم ماذا