|
:: نائب المشرف العام ::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
|
|
نشاط [ ماجد عباس محمد ]
قوة السمعة:
|
|
29-06-2018, 10:59 AM
المشاركة 52
|
|
تجهيز الغسالة و اعداد الخيارات
تجهيز الغسالة :
بعد أن مهدنا للمقاطعة و البدء الخ نبدأ البرنامج طبقا للهيكلة السابقة فمثلا نقول بعد أن نختار الكمية و الحرارة ، لو الباب مغلق نبدأ ملئ الخزان و عند تمامه نشغل السخان طبقا للحرارة
ما بين عنوان البدء و عنوان الدورة "التكرارى" نجد ما يسمى التمهيد أوHouse Keeping أو حرفيا ترتيب المنزل
السطر الأول إتاحة كل المقاطعات و مقاطعة T0 ومقاطعة الخارجى INT0
الثانى و الثالث تحميل كل من نصفى المسجل T0 بالقيمة المطلوبة و الرابع تهيئه T0 كعداد ذاتى التحميل بعدها جعل المقاطعة الخارجية قدح بالحافة Edge Trigger ثم تغيير مؤشر الرصة بعيدا ثم وضع المنافذ الأربع فى حال البداية رغم أنها كذلك إلا أن هنا ضرورة لحالة الطوارئ فهى لن تعيد المنافذ لحال البدء لذا تفرض بالبرنامج تحسبا.
لو حدث طارئ و ضغطت على زر الطوارئ ستجبر المتحكم على البدء من جديد و سينهى التهيئة و الوصول هنا و ينتقل عبره لدورة تشغيل الموتور قبل أن تتمكن من رفع إصبعك من على زر البدء لذا وجب الانتظار هنا حتى ترفع يدك عنه لذا نختبر لو البت Run = 0 سنظل فى دوره وذلك بالأمر JNB اختصار Jump if Not Bit set ثم اسم البت Run و العنوان المقصود الذهاب إليه و علامة الدولار هى رمز مختصر لكلمة "هنا" بدلا من و ضع عنوان أول السطر و كتابته مرة أخرى فى الأمر هكذا
Here: JNB Run,Here
هكذا سنظل ندور هنا طالما زرار RUN=0 ثم بعده نختبر الخيارات
كود:
;=====================================
; CODE SEGMENT
;=====================================
Start:
MOV IE,#10000011b ; Enable T0 & INT0 external
MOV TH0,#205 ; Auto reload
MOV TL0,#205
MOV TMOD,#00000110b ; T0 8bit counter auto reload
MOV TCON,#1 ; Clear All interrupts,
SETB IT0 ;Edge triggered
MOV SP,#70 ; Move stack away
MOV LEDs,#11011011b ; Reset All PORTS! select Small cold cycle
MOV Relays,#255
MOV Switches,#255
MOV Controls,#255
JNB RUN,$ ; Run button release
JB Full,TstHalf
Loop:
ORL LEDs,#00000111b
CLR FullLED
TstHalf: JB Half,TSTSmall
ORL LEDs,#00000111b
CLR HalfLED
TSTSmall: JB Small,TstHot
ORL LEDs,#00000111b
CLR SmallLED
TstHot: JB Hot,TstMild
ORL LEDs,#00111000b
CLR HotLED
TstMild: JB Mild,TstCold
ORL LEDs,#00111000b
CLR MildLED
TstCold: JB Cold,TstStart
ORL LEDs,#00111000b
CLR ColdLED
TstStart:
بعد ذلك نجد العنوان Loop التكرارى
الخيار الافتراضى هنا Small Cold بعد ذلك نفحص أى الأزرار تضغط فإن لم يكن Full ننتقل للتالى و إلا نضيء ألليد الخاص بالكمية Full بجعل طرفه = صفر ولو أردنا السرعة نضع أمر انتقال sjmp TstHot حتى لا نضيع وقت فى اختبار الحالتين التاليتين و للكود الأقل نكتفى بما لدينا
أود هنا أن أوضح أساسا من أساسيات البرمجة وهى السرعة مقابل الكود، من المنطقى أن يكون الكود الأكثر أبطا فى التنفيذ لكن غالبا ما يكون الكود الأطول أسرع فى التنفيذ وهذا مثال على ذلك فإضافة أوامر انتقال يضيف كود ليختصر تنفيذ ما لا يجدى تنفيذه.
بعد ذلك نختبر Half و ننتقل لو لم يضغط لاختبار Small و إلا نضيء HalfLED ، ولكى نضئ واحد يجب أن نطفئ أى ليد آخر قد يكون مضاء و لكنا لا نعلم ما هو ، لذا نطفئ الكل بأمر
ORL LEDs,#00000111b
حيث ORL اختصار OR Logic وهى تنفيذ وظيفة OR أى وظيفة "أو" على مستوى البت. تسمى Logic لأن هناك فى بعض المترجمات للغات العالية تستخدم دوال على مستوى المتغير تسمى Boolean OR حيث يعتبر أى رقم هو موجود أو = منطق واحد أو حقيقى أو TRUE و الصفر فقط هو منطق صفر أو False أو غير موجود وهو يعطى نتائج مختلفة فمثلا متمم complement أى رقم هو صفر بينما متمم الصفر هو FF أو 255 و مترجمات C51 لا تدعمه .
تنفيذ الأمر السابق يفرض 111 فى البيتات الثلاث الأقل فيطفئ الليدات الثلاث معا ثم أمر CLR لإضاءة ما نريد
بعد ذلك نكرر العمل مع البتات الثلاث الأخريات لاختيار الحرارة ساخن أو دافئ أو بارد مع ملاحظة أن أمر ORL الآن مع البيتات الثلاث .
المرة القادمة إن شاء الله نختبر هل نبدأ أم نكرر ما سبق
التعديل الأخير تم بواسطة : ماجد عباس محمد بتاريخ 29-06-2018 الساعة 08:25 PM
|