مرحبا بكم جميعا ونواصل الحوار
لا ننزعج من اختلاف لغات البرمجة أبدا كما ذكرت قبل ، فقد تختلف لغات الإنسان ولا تختلف لغة الإشارة والرسم , وكذلك لو اختلفت لغة البرمجة فلن تختلف لغة المخططات ،
وليس كلنا يتعامل بالمخططات ولكن سيتضح كل شئ مع الشرح فثلا إذا قلت ننقل رقم كذ على بورت كذا فتفاصيل الكود ترجع لك وللغة المستخدمة ،
سنحتاج أحيانا لعمل برنامج فرعى ، ورغم وجود بعض التعقيدات والدقة إلا أن كل مبتدئ سيعلم وبسهولة طريقة الربط وقواعده
والآن وباسلوب أبسط من المخططات سأقوم بتبسيط الفكرة أكثر ولغة الحوار بين المتحكمات ،
المتحكم الرئيسى متصل بالشاشة فى مثالنا وسنرمز له بالرمز
MAIN
المتحكم الفرعى الأول سنرمز له بالرمز
PIC1
المتحكم الفرعى الثانى سنرمز له بالرمز
PIC2
والآن لنرى ما هى وظيفة كل متحكم :-
وظيفة المتحكم الرئيسى هنا سيعرض على الشاشة فى السطر الثانى والعامود 5 والعامود رقم 6 كلا من خانة العشرات والأحاد للرقم القادم من المتحكم
PIC1
وسيعرض بعد ذلك على الشاشة فى السطر الثانى والعامود 14 والعامود رقم 15 كلا من خانة العشرات والأحاد للرقم القادم من المتحكم
PIC2
فقط ولن يفعل شئ سوى هذا
وظيفة المتحكمان الفرعيان الأول والثانى هى حساب عدد الضغطات لمفتاح ضاغط
والآن لنرى لغة الحوار:-
يقوم المتحكم الرئيسى main
بالآتى :-
الروتين: وضع القيمة صفر على أطراف العنوان.
معناه : على جميع المتحكمات الفرعية إيقاف الإرسال.
الخطوة الثانية :-
الروتين : انتظرحتى تكون أطراف الداتا تساوى صفر.
معناه : نداء من المتحكمات الفرعية نحن جاهزون وننتظر التعليمات.
الروتين : أطراف العنوان تساوى واحد فقط .
معناه : على المتحكم الفرعى الأول إرسال خانة العشرات فقط .
يظل المتحكم الرئيسى منتظر الرد وعندها يقوم بوضع الجواب فى مكانه على الشاشة ونعلم أنه عند وضع الرقم على الشاشة فإننا نجمع الرقم على كود آسكى فنجمع الرقم + 48 طبعا لكننا هنا لن نجمعه إلا على 47 لماذا لأن الرقم القادم دوما سيكون زائد رقم يعنى أن المتحكم الفرعى إذا أراد إرسال القيمة 7 فإنه سيرسل 8 أى أضاف 1 لأى رقم مرسل ولذلك يقوم المتحكم الرئيسى بطرح قيمة واحد من الرقم الوارد وبدلا من عملية الطرح قمنا بإضافة 47 لرموز آسكى بدلا من 48 تماما كأننا قمنا بعملية الطرح ، لماذا إضافة واحد للرقم الصادر من المتحكم الفرعى ؟ دعنا من الإجابة حتى نتكلم عن حوار المتحكم الفرعى بعد أسطر قلائل قادمة وهذا لا يشغل بالنا فالرقم الوارد سواء أضفنا عليه 1 أو اثنان فالمهم أنه بعد استقباله عند المتحكم الرئيسى نقوم بطرحة لكى نحصل على القيمة الحقيقية ولا ينبغى أن نرسل القيمة كما هى ! لماذا لكى يمكننا إرسال القيمة صفر كقيمة واستقبالها كما قيمة وليس كصفرا وهنا إجابة اللغز لأنه طول ما تكون قيمة أطراف الداتا محملة بصفر فإن هذا يعنى أن المتحكم مشغول فإذا أراد أن يبعث بصفرا فإنه يضيف له واحد كما يضيف واحد لأى قيمة أخرى فبذلك يكون القيمة واحد تعنى صفر والقيمة اثنان تعنى واحد وهكذا ! !

بعد استقبال خانة العشرات يقوم المتحكم الرئيسى بوضع القيمة صفر على أطراف العنوان ليكف أى متحكم فرعى عن الإرسال ،
المتحكم الرئيسى ينتظر حتى تكون أطراف الداتا تحمل بصفر
المتحكم الرئيسى يضع القيمة 2 وهى تعنى طلب خانة الأحاد من المتحكم الفرعى وبنفس الطريقة السابقة تماما نفعل مع باقى المتحكمات على أن نعطى كل عنوان قيمة مقصودة فمثلا :
القيمة صفر لإيقاف ارسال كل المتحكمات فورا
القيمة 1 لطلب خانة العشرات من المتحكم الفرعى الأول
القيمة 2 لطلب خانة الأحاد من المتحكم الفرعى الأول
القيمة 3 لطلب خانة العشرات من المتحكم الفرعى الثانى
القيمة 4 لطلب خانة الأحاد من المتحكم الفرعى الثانى
وفى مثالنا والدارة السابقة استخدمت 3 أطراف للعنوان وهم قادرون على طلب 7 طلبات مختلفة وأما أطراف الداتا فيكفيها 4 أطراف فقط لحمل قيم حتى رقم عشرة لأننا سنحتاج فى الأصل من صفر إلى تسعة ومع زيادة الرقم واحد ستكون من واحد إلى عشرة فقط .
يتتبع ,