قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

زكي شاكر
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: المغرب
المشاركات: 2,945
نشاط [ زكي شاكر ]
قوة السمعة:
قديم 27-04-2008, 03:53 AM المشاركة 9   
افتراضي



بارك الله فيك أخى الفاضل زكى شاكر شرح مبسط ورائع جزاك الله خيرا
لك منى أجمل تحية
شكرا لك اخي ايضا لانك وفرت لي الفرصة للحديث حول هذا الموضوع
كما وعدت سابقا هاهي تكملة شرح البرنامج التجريبي البسيط on/off:
http://www.*********.com/files/166753273/on-off-pic.GIF
كود:
;####################################### ;# on off par bp / Pic 16F84 # ;####################################### LIST p=16f84 #include "p16f84.inc" __config 0x3FF2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CBLOCK 0x00C mediat : 1 ENDC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Reset : org 0x00 goto init ; (initialisation) org 0x004 goto inter ; (interruption) ; S/Prog initialisation: init clrf PORTB clrf mediat bsf STATUS,RP0 movlw 0x7F movwf TRISB clrf OPTION_REG bcf STATUS,RP0 movlw 0x90 movwf INTCON ;**** Progr. Principal **** : start btfss mediat,0 goto start bsf PORTB,7 goto start ; S/Prog interruption : inter clrf PORTB comf mediat,1 movlw 0x90 movwf INTCON
retfie end
س1
يوضح من أين سيبدأ المتحكم تنفيذ الاوامر.
س2
إحالة الى برنامج مصغر init للإعداد:
س 5: مسح المخارج B
س 6 : جعل محتوى السجل mediat الذي أنشأه المبرمج فارغا ، أي ان مجموع 8 bit التيله = 0. (الحقيقة لا يهمنا إلا bit 0 نريده ان يكون صفرا في البداية، لغرض في نفس يعقوب.)
س7: امر الانتقال الى الشق الثاني من منطقة الذاكرة وذلك:
1- للتمكن (في س8 و س9 ) من كتابة الرقم 7F ( او 01111111 ، أفضل) في السجل TRISB. الذي يحدد لكل طرف من الأطراف الثمانية للمخارج PortB هل سيكون مدخل ام مخرج.
وهكذا يصبح: RB0 = in وRB7 = out
(يهمنا فقط ان يكون RB0 كمدخل و RB7 كمخرج )
2- تصفير السجل option_reg يهمنا فيه:
b7 : RBPU =0مما يسمح بتوصيل مقاومة Pull-up داخل المتحكم، بالطرف RB7 الموصول بالمفتاح اللحظي في الدارة.
( لا علاقة بين الbit7 للسجل option_reg وبين RB7 أحد أطراف PortB
رقم 7 مجردصدفة ..).
b6 : INTEDG =0 . المبرمج أراد أن يتحسس المتحكم التغير على المدخل RB0 عندما يجعله المفتاح مرتبطا ب0 فولت اي = 0.
س11: عودة للشق الاول من الذاكرة لتنفيذ
السطر 12 و 13 ، وشرحهما واضح في المشاركة السابقة.
وبه انتهى برنامج الإعداد .
هنا يصبح المتحكم أمام خيارين لا اختيار له فيهما :
1- المستعمل لم يضغط على المفتاح ولو للحظة واحدة:
في هذه الحال ، يتابع المتحكم تنفيذ التعليمات بطريقة تسلسلية كالعادة: بعد تنفيذ التعليمة 13 ينتقل الى التعليمة 14
س14
هنا بواسطة التعليمة btfss ، يفحص ال bit 0 ( يعني الأول ابتداء من اليمين ) في السجل mediat هل = 1 او = 0. :
الواقع انه في غياب الضغط على المفتاح سيجده = 0. clrf لان التعليمة قامت بالواجب نحو mediat في السطر 5 .
لذلك سيتابع المتحكم طريقه منفذا الامر 15 الذي سيعيده الى الامر 14 بشكل مستمر دون كلل ولا ملل ..
إلا إذا .. حدث تغير من +5 فولت الى 0 فولت على مدخل المقاطعة RB0 .
أي إذا حدثت مقاطعة على الطرف RB0 .

2- المستعمل يضغط ولو للحظة على المفتاح :
في هذه الحال سيشعر المتحكم بالتغير على مدخل المقاطعة ( تم اعداد بالسجل الخاص INTCON ) فينفذ تعليمة السطر 3 التي تحيله الى السطر 18 بداية تعليمات تنفيذ برنامج المقاطعة inter

س18
يبدأ بمسح كل أطراف PortB
س19
يتابع السير بتنفيذ التعليمة comf التي ستقلب كل من bit مجموع الثمانية bit التي للسجل mediat ، الى عكسه:
اذا كان 1 يصبح 0 وادا كان 0 يصبح 1 ( بمعنى =5 فولت)..
لا يهمنا كما سبقت الاشارة الى ذلك الا ال bit الاول منه (bit0).
سيجده = 0 ( سطر 5) فيقلبه الى 1 ( بمعنى =5 فولت) .
ويكمل المتحكم تنفيذ التعليمات 20 و 21 أي يعيد ضبط INTCON كما فعل في السطر 12 و13 وهذا إجراء لابد منه لان الانتهاء من برنامج المقاطعة يبطل الإعدادات السابقة لذلك وجب التذكير.

لكن ماذا استفاد المبرمج من كل هذا؟
ببساطة عندما انقلب bit 0 للسجل mediat شعر المتحكم بذلك بواسطة الامر btfss (السطر 15 ) فقفز ينفذ الامر المهم الذي يعنينا بالسطر 16 وهو:
Bsf Port B, 7
أي جعل الليد على الطرف RB7 مشتعلة بعدما كانت منطفئة .
الى هنا اكون قد حاولت تقريب مفهوم احدى المقاطعات
اترك لك اخي التفكير في كيفية حدوث الحالة المقابلة .. أي كيف تجعل الضغطة الموالية على المفتاح اللحظي ، الليد تنطفئ واتمنى لك التوفيق
تحياتي .

اعلانات


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 07:15 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)