السلام عليكم و رحمة الله و بركاته
عذرا أستاذي الفاضل
برنامجي سيعمل بشكل جيد حتى لو بقيت ضاغط على المفتاح لساعة كاملة .
هذا هو الكود
كود:
unsigned char g=0;
void main() {
adcon1=7;
trisa=1;
trisb=0; portb=0;
while(1)
{
if(g==1)portb=0b00000001;
if(g==2)portb=0b00000010;
if(g==3)portb=0b00000100;
if(g==4)portb=0b00001000;
if(porta.f0==0){ g++;
if(g>4)g=1;
while(porta.f0==0){}
}
}
}
لاحظ السطر الملون بالأحمر
هذه الحلقة تعمل على تحسس حالة المفتاح
اذا كان مازال مضغوط تمنع البرنامج من الاستمرار في العمل حتى يتم تحرير المفتاح .
بمعنا : عندما تضغط على المفتاح ينفذ البرنامج التعليمات مرة واحدة ثم يتوقف حتى تقوم بتحرير المفتاح .
و كنت قد وضحت هذا في ردي السابق
و شكرا جزيلا لك استاذي على النصيحة
و ارجو ان لا أكون قد اثقلت عليك
جزاك الله عني خيرا
|
السلام عليكم ورحمه الله ..
نقاش علمي جميل ومفيد جداااا للمهتمين بعالم الميكرو كنترولر ..
أخى الكريم ...
كما قال لك اخونا الفاضل .. مهندس /
مشتاق اللهأن كتابه الكود بهذة الطريقه اللتى كتبتها سيحدث عدم استقرار لسير البرنامج وسيكون الخرج غير متوقع ... بمثال لو لو الخرج على البورت " ب " يساوى واحد وضغط على المفتاح فهذة اللحظه من الممكن أن يحدث ارتداد للمفتاح .. وتكون النتيجه 3 .. أو 4 ... والمفروض انها تكون 2 ..
إذا ماذا حدث ... وهنا هى المشكله اللتى تكلم عنها .. أخونا " مشتاق الله " وهى ارتداد المفتاح ..
أخى الكريم كما نعلم أن الميكرو كنترولر .. قادر على تنفيذ الأوامر بشكل سريع جداااا قد يصل على 40000 الف عمليه فى السانيه الواحدة .. وهذا حسب سرعه الكرستالة المستخدمه ..
إذا عند الضغط على المفتاح يحدث " ارتداد " بمعنى المفتاح يوصل ويفصل مرة أو مرتين فى لحظه الضغط عليه ..
وهنا ماذا سيحدث ؟؟؟
الميكرو منتظر تحقق الشرط .. و المستخدم ضغط على المفتاح .. والشرط تحقق .. سيدخل الميكرو فى تنفيذ أوامر الشرط بسرعه عاليه جداااا .. وهنا من الممكن أن المفتاح فصل عند لحظه تلامسه .. وهنا المشكله لأن ارتداد المفتاح سيجعل أمر [code]while(porta.f0==0){}[/CODE بلا فائدة لأن المفتاح وصل وفصل بسرعه كبيرة ومن ثم استقر ووصل ... وهنا يكون الأمر قد نفذ ربما مرة أو مرتين أو ثلاث مرات ..
وهنا يأتى فائدة أمر
... لماذا لأن عند الضغط على المفتاح سيتحقق الشرط ومباشرة يدخل البك فى تنفيذ أمر الإنتظار وهنا تجنبنا عمليه عدم استقرار المفتاح .. ويكون المفتاح اطرافه الداخليه تلامست بشكل جيد ولا يوجد أى عمليه فصل أو وصل للمفتاح .. وهنا سيخرج البك من أمر الإنتظار وسينفذ أوامر الشرط ويذهب الى حلقة
كود:
while(porta.f0==0){}
ويجد أن المفتاح مزال مضغوط عليه ولا يخرج من اللوب الى أن يحرر المفتاح ..
وهنا أخى الكريم أمر الإنتظار سيكون مفيد جداااا فى الكود لو تم وضعه مباشرة بعد تحقق الشرط ..
تحياتى للجميع ..
وأرجو أن تتقبلو المداخلة "احبكم فى الله "