اخي العزيز وليد, شكرا لك
اما بالنسبة للاجابة على سؤالك:
البرنامج يقوم بفحص دوري لل keypad , عندما يتم ضغط اي زر منه يتم تحسسة عن
طريق المايكرو من خلال RD0, RD1, RD1 والتي تكون فولتيتها 0 فولت عندما تضغط
اي زر عدا ذالك فهي دائما 5 فولت, لذا تجد في الروتين Row فحص دوري مستمر اذا
كانت الفولطتية 5 ,اما اذا كانت 0 فولت , فيتم الانتقال الى الروتين Found وهذا معناه
ان هناك زر قد ضغط.
طبعا , بالنسبة للفحص الدوري للkeypad يكون كما يلي:
1- يتم اختيار السطر الاول , ولقد تم ذالك في الروتين scan , اما بالنسبة للاختيار
الاسطر الاخرى فقد تم في الروتين NewRow
2- يتم فحص كل من RD0, RD1, RD3 , ويتم ذالك في الروتين Row
وكما تلاحظ هناك عداد للارقام في بداية كل جزء وهو الkey , عندما نختار السطر الاول قيمتة
تزداد من 1 الى 3 , وعندما نختار السطر الثاني قيمتة تزداد من 4 الى 6 , وهكذا
فمثلا , افرض انا ضغطنا على الزر 2, عندا ذالك RD1 ستكون قيمتها صفر ,
عند ذالك الوقت قيمة العداد key ستكون 2 .عند الجزء الثاني من الروتين Row
الشرطBTFSS سوف لن يتحقق , لذا سنذهب الى الروتين Found الذي سوف
يعيدنا الى الروتين Start بعد السطر call scan ومعنا قيمة المفتاح المضغوط
المخزن في العداد Key وهكذا.
كما تذكر لقد كان هناك في الروتين Start ال call Scan , صح!
عندما تعمل call ينخزن العنوان المكان الذي كنت فية في ال stack area
باستخدام ال Found نرجع الى المكان الذي كنا في بعد call scan
طبعا ذالك يحدث فقط عندما نقوم بضغط اي زر من ال keypad
ارجوا اني قد وفقت في شرحي لك, وارجوا ان تفهمه, انا لست بارع جدا في
الشرح هههه, على كل حال, اذا احتجت اي شيء يمكنك ان تتفضل في السؤال
وان شاء الله استطيع ان اساعدك.
خالص التحية
المهندس عبدالله