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

أدوات الموضوع

geniusse01
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2008
الدولة: Jordan - Amman
المشاركات: 1,139
نشاط [ geniusse01 ]
قوة السمعة:106
قديم 04-06-2009, 06:25 PM المشاركة 33   
افتراضي



بارك الله فيك اخي واصل والله انا معك يوميا

شكرا شكر شكرا

السلام عليكم

اهلا بك اخي العزيز..ولكن لماذا لا يكون لك من المشاركة بالاجابة نصيب..فكلنا نتعلم وليس هناك من خطأ ان تجرب وتعطينا الاجابات التي تعرفها..


اخي اشرف ايه الجمال ده..وان شاء الله تكون الاجابات من جميع المشاركين في الموضوع وليست مقصورة على الاخوة المشاركين دائما...ربنا يوفقكم جميعا..

واخر دعوانا ان الحمدلله رب العالمين..وصلى الله على سيدنا محمد وعلى اله وصحبه وسلم..

اعلانات

Eagle69
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 114
نشاط [ Eagle69 ]
قوة السمعة:0
قديم 06-06-2009, 08:44 PM المشاركة 34   
افتراضي


السلام عليكم ورحمة الله وبركاتة
بالنسبة للاجوبة يا مهندس فادي ( خلص الكلام )
وبارك الله فيك وفي المهندس اشرف وجميع من شارك
ولو سمحتم لي سؤال فقط :-
1- ممكن مثال بسيط اوجملة شرطية تحتوي على if مثلا
نقول للبرنامج فيها اذا طفح TMRO اعمل عمل معين مثلا
وبعد ما ينفذة يرجع للبرنامج اللي قبل المقاطعة
وهنا اريد تفعيل تايمر زيرو كل مرة في البرنامج
اي كل ما يصل الى 255 اعمل كذا.......
ودمتم
وعلى فكرة انا ممكن ان اتحكم بزمن تايمر زيرو
وانا ابرمج بالباسكال
وهذا مثال على التايمر زيرو
ولكني للاسف لم استطيع ان افعل او استفيد من التايمرات مع البرنامج
مثل TIMER1 , TIMER2
وحتى كلب الحراسة
ولكم جزيل الشكر واتمنى ان يكون سؤالي قد وصل

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

Eagle69
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 114
نشاط [ Eagle69 ]
قوة السمعة:0
قديم 06-06-2009, 08:51 PM المشاركة 35   
افتراضي


وهذا برنامج للتايمر زيرو
ويعمل 100 بالمية
واي استفسار انا حاضر بأذن الله
وممكن ان تغير الزمن مثل ما تريد
وعلى فكرة يا اخوان انا احبذ البرمجة بالباسكال لاني درستها بالجامعة
ولكن اذا وجدت برنامج بيسك او برنامج سي ممكن افهم موضوعة واقوم كتابتة
مرة اخرى بالباسكال .
الامور سهلة ان شاء الله
program TMR0;

var cnt : word;

procedure interrupt;
begin
Inc(cnt); // increment value of cnt on every interrupt
TMR0 := 96;
INTCON := $20; // set T0IE, clear T0IF
end;

begin
OPTION_REG := $84; // assign prescaler to TMR0
TRISB := 0; // PORTB is output
PORTB := $FF; // initialize PORTB
TMR0 := 96; // timer0 initial value
INTCON := $A0; // enable TMRO interrupt
cnt := 0; // initialize cnt

while TRUE do
begin
if (cnt = 400) then
begin
PORTB := not PORTB; // toggle PORTB LEDs
cnt := 0; // reset cnt
end;
end;
end.


geniusse01
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2008
الدولة: Jordan - Amman
المشاركات: 1,139
نشاط [ geniusse01 ]
قوة السمعة:106
قديم 08-06-2009, 09:04 PM المشاركة 36   
افتراضي مدخل الى المقاطعة


السلام عليكم

الان بما اننا اصبحنا نعرف كيفية تفعيل مقاطعة معينة او الغائها وكيفية معرفة حدوث المقاطعات من خلال مراقبة الاعلام التي تدل على كل مقاطعة ، حان الان ان نربط بين الميكروسي وكيفية عمل برنامج مقاطعه محدد يستخدم التغير على الاطراف او يستخدم التحكم بالتايمر زيرو لحساب زمن معين نحتاجه.اليوم ساتكلم عن شكل برنامج المقاطعة في الميكروسي وكيف يمكننا ان نتعامل معه بشكل عام، واريد ان اضع في البداية ملاحطة مهمه جدا جدا جدا جدا ، وهي ان برنامج المقاطعة هو برنامج فرعي مثل اي برنامج فرعي يقوم المستخدم بانشاءه مع فارق بسيط ان برنامج المقاطعة محدد الاسم ، اي ان القواعد التي تحكم عمل اي برنامج في الميكروسي تحكم عمل برنامج المقاطعه ،هذه ملاحظة مهمة جدا ارجو ان تبقي في الاذهان ,

الان ان شكل برنامج المقاطعة بشكل عام كالتالي:
كود:
Void interrupt() { Body of interrupt program } Void main () { Body of main program }

كما نرى فان البرنامج يتكون من :
1) برنامج المقاطعة في البداية: حيث يحتوي برنامج المقاطعة على التعليمات التي نريد نتفيذها فقط عندما تحدث عملية المقاطعة فقط. وهذا الاسم المستخدم لبرنامج المقاطعة هو اسم قياسي اي يتعرف عليه الميكروسي بانه مقاطعة عندما نستخدم هذا الاسم interrupt ولا يجب تغييره .

2)البرنامج الرئيسي:حيث يقوم البرنامج بعمله الطبيعي عندما لا يوجد سبب للمقاطعة.

الان لدينا ملاحظة مهمة نحتاج لمعرفتها لو اردنا ان نستخدم متغير معين في برنامج معين فيجب ان نقوم بتعريف المتغير في بداية هذا البرنامج مثل:

كود:
Void main ()
{
Char x;

****
  **** 
  ****
  The program 
}
فكما نلاحظ قمنا بتعريف المتغير x بعد بداية البرنامج مباشرة لاننا سنستخدم هذا المتغير في هذا البرنامج فقط .الان هذا المتغير يدعى بالمتغير الخاص لان استخدامه فقط يكون في هذا البرنامج . الان لو اردنا ان نعرف متغير معين يستخدم في اكثر من برنامج مثلا نريد استخدام متغير معين في برنامج المقاطعة وفي البرنامج الرئيسي فماذا نعمل ؟

نقوم بتعريف متغير عام يكون معرف قبل كتابة اي من البرنامجين كالتالي:
كود:
Char x; Void interrupt () { Body of interrupt } Void main () { Body of main }

كما نرى فتعريف المتغير قبل البرنامجين ، لذلك لن يعطي اي رسالة خطا عند استخدامه في اي منهما ، وحتى لو كان هناك عدة برامج فيمكن استخدامه في اي منها بما اننا عرفناه قبل جميع البرامج. اما في حال كان التعريف داخل برنامج واحد من مجموعة البرامج فان استخدامه في برنامج اخر سيسبب رسالة خطا تخبرك ان المتغير غير معرف.

هذه الافكار ضرورية لتجاوز بعض رسائل الخطأ في الميكروسي . وان شاء الله في الدرس القادم سكون كلامنا عن اول مقاطعة وهي مقاطعة التغير على الطرف RB0 فكل من لديه استفسار فيمكن طرحه هنا قبل البدء لان العمل الحقيقي قد بدأ الان .


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 08-06-2009, 10:25 PM المشاركة 37   
افتراضي


استاذ فادي :
جزاك الله الف خير على هذا الموضوع الرائع و المهم جدا
و هنا عندي سؤال :
ما دامت المقاطعة تعتبر برنامج فرعي كما تفضلت . فانا اجد ان استخدام البرنامج الفرعي اسهل بكثير من استخدامها . اذن هي اكيد لها ميزات مختلفة عن البرنامج الفرعي . و الا لماذا وجدت ؟

و عندي ملاحظة ارجو من الاخوة الاعضاء ان يفهمونا بصورة صحيحة و هي اننا نرى بعض المشاركات ليس لها علاقة بالموضوع و هي تسبب ارباك في متابعة الموضوع الرئيسي . فارجو وضع هكذا مشاركات في موضوع مناسب او مستقل . و شكرا لكم

حيدر علاج حسن

الصورة الرمزية ahmad72
ahmad72
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2004
المشاركات: 729
نشاط [ ahmad72 ]
قوة السمعة:109
قديم 08-06-2009, 10:35 PM المشاركة 38   
sun


السلام عليكم
شكرا استاذ فادى على هذا العمل
الاستاذ حيدر كيف احوالك
هناك فرق بالتاكيد بين البرنامج الفرعى والمقاطعات
البرنامج الفرعى يعتبر برنامج داخل البرنامج الرئيسى ينفذه المتحكم
كلما وصل لى عنوانه كل مره بدون تدخل منا
اما برنامج المقاطعه لا ينفذه المتحكم الا اذا حدثت مقاطعه
وفى عدم حدوث مقاطعه لا يلتفت اليه المتحكم ولا يتم تنفيذه
ومتشابهان فى انهما بعد انتهاء المتحكم من تنفيذ اى منهم
يرجع الى البرنامج الرئيسى من حيث انتهى وليس من اول البرنامج
ارجو ان اكون وفقت فى الاجابه
السلام عليكم


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 08-06-2009, 10:52 PM المشاركة 39   
افتراضي


شكرا لك حبيبي ابو عبد الله على السؤال عني اولا و على الاجابة ثانيا و لكن حسب ما تفضلت به نستطيع ان نجعل البرنامج الفرعي مشروطا بامر خارجي كالضغط على مفتاح مثلا و بذلك لن يتكرر البرنامج الفرعي مالم نضغط على المفتاح . و هنا اصبح مشابها للمقاطعة .

حيدر علاج حسن

الصورة الرمزية ahmad72
ahmad72
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2004
المشاركات: 729
نشاط [ ahmad72 ]
قوة السمعة:109
قديم 08-06-2009, 11:09 PM المشاركة 40   
sun


السلام عليكم
الاستاذ حيدر
الشرط الذى تضعه لابد ان يكون قبله اوامر وبعده اوامرو المتحكم لابد ان ينفذ الاوامر التى قبل الشرط حتى يصل الى الشرط ليتحقق منه
اما المقاطعه عند حدوثها فورا يتجه الى برنامج المقاطعه لينفذه
وهذا طبعا غير مشروط لا بوقت ولا مكان معين فى البرنامج
اما ما تقصده لابد من وصول المتحكم الى مكان الشرط حسب ترتيبه فى البرنامج
ممكن يكون الشرط فى اخر البرنامج وبهذا سيستغرق المتحكم وقت للوصول اليه
اما المقاطعه فلا
هى تنفذ فور حدوثها مباشرة
ارجو ان اكون قد وفقت فى الاجابه
السلام عليكم

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025