الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن ال interrupt في المايكروكونترولير

بدأه فارس2005 في 8 أكتوبر 2005 · 20 رد · 5,302 مشاهدة · في الميكروكنترولر (المتحكم) و الدوائر الرقمية و المنطقية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لي استفسار عن الانترابت واريد فهم نقطه معينة فيا الانترابت حيث انني فهمت ان الانترابت ما هو الا برنامج يعمل

عن طلبه ويوقف روتين البرنامج العادي للمايكروكونترولير فعلي سبيل المثال البرنامج الرئيسي يطفئ ويضئ Led

وهناك برنامج او روتين او سنسميه انترابت سوف يخرج من الطور الاعتيادي للبرنامج الرئيسي لوقف عمل ال led

ثم التوجه الي برنامج الانترابت لعمله وبعد الانتهاء نرجع الي البرنامج الرئيسي فتعمل ال led كما كانت فهل هذا فعلا

هو الانترابت؟؟؟

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

تصيب شخص عندما يرى شئا غير عادي فيفتح عينيه للحظات من الذهول ثم عندما تنتهي اللحظة العابرة يرجع لحالته الطبيعية ؟؟؟

هل من برنامج بسيط بلغة البيسك لفهم الموضوع

#2

الانتربت هو كما وصفت يا فارس2005 اما عن مثال في ال vb فربما يشبه اضافة تايمر و عند مرور الوقت يقوم بتنفيذ مهمة معينة.

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#3

اهلا بك يا عماد وشكرا علي الانتباه وكنت سعيدا بانك انتبهت لموضوعي لان موضوع الانترابت موضوع شائك بالنسبة لي

ولكن بعون الله ثم بعون الجميع وانت اولهم سوف احاول نزع الغشاوة عن هذا الموضو ع

لطالما انني اجتزت العقبه الأولي في فهم مصطلح الانترابت هنا ك استفسار آخر

علي فرض انني اريد تحويل البورت RB0/INT من بورت عادي الي بورت يستقبل Interrupt

فكل ما فهمته أولا لابد من تفعيل GIE حتي نخبر المايكروكونترولير بان هناك انترابت او مجموعة انترابت في البرنامج قد

تفعل في اي وقت فهل هذا امر ضروري في البرنامج لتفعيله قبل كل شئ اذا كتبت برنامج انترابت ؟؟؟؟

ثانيا يأتي دور تفعيل نوع الانترابت المطلوب وتفعيل الريجيستير الخاص به باستخدام INTCON ؟؟؟ عن طريق تفعيل البت في

INTE ؟؟؟؟

ثالثا دور ال INTF وهو رفع العلم عند طلب انترابت اي عمل enable له فهل نعمل ال enable في بداية البرنامج خارج

ال main ام داخل روتين الانترابت ؟؟؟ او نعمل ال enable خارج الروتين وفي داخل الروتين نعمل disable له حتي ننزل العلم؟؟؟

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

INTCON

وهل هناك ريجيستر آخر مطلوب غير ال INTCON غيره؟؟؟؟؟

#4

السلام عليكم ورحمة الله وبركاته..

قليلا ما أجد أسئله بهذا الوضوح , والجميل انك تقريبا تعرف الاجابه :D

اقتباس
البيت سته INTEDG في السجل OPTION_REG

يستعمل لاختيار كيفية حدوث المقاطعه من خلال البين  INT

INTEDG=1  مقاطعه بالطريقه التصاعديه

INTEDG=0 مقاطعه بالطريقه الهبوطيه

نحدد طريقة حدوث المقاطعه , هل تحدث عند تغير الدخل من 0 الى 1 أو من 1 الى 0 , في هذه الحاله من 1 الى 0

	BCF	OPTION_REG, INTEDG; Negtiv Interupt

بعد هذا سنقوم بوضع القيمه اللازمه لتفعيل المقاطعات وتحديد المقاطعه على القدم INT و مسح العلم لقبول مقاطعات جديده

نضع GIE = 1 وهي آخر بيت في سجل INTCON لتفعيل المقاطعات عموما ,

نضع INTE = 1 وهي البيت رقم 4 ( نبدأ من صفر) في سجل INTCON لتفعيل المقاطعه على القدم INT

نضع INTF = 0 وهي البيت رقم 1 في سجل INTCON للسماح بقبول مقاطعه جديده

في خطوه واحده:

	MOVLW	B'10010000'
	MOVWF	INTCON  ; Enable The Interupt

عند حدوث مقاطعه , يتم رفع العلم أي جعل INTF = 1 آليا , ثم ينقلك الى العنوان 04h ويسمى Peripheral Interrupt Vector

ومن هذا العنوان تنفذ برنامج المقاطعه , وطوال فترة تنفيذ برنامج المقاطعه من امفترض ألا تستقبل مقاطعات اخرى لهذا فالعلم يجب أن يظل مرفوعا وهذا يعني غير مسموح بمقاطعه جديده

ولاعادة تفعيل استقبال المقاطعات مره اخرى تقوم بخفض العلم مره اخرى برمجيا , أي تضع INTF = 0 , وهذه تضعه في نهاية برنامج المقاطعه قبل الخروج منه

	BCF	INTCON, INTF	; Clear INTF (Flag Down)

بالنسبه للـ Peripheral Interrupt Vector

اجعل دائما البرنامج بهذه الطريقه :

	ORG	00h
	GOTO	MAIN-PROG
	ORG	04h
	GOTO	INT
MAIN-PROG:
	BCF	OPTION_REG, INTEDG; Negtiv Interrupt
	MOVLW	B'10010000'
	MOVWF	INTCON  ; Enable The Interrupt
.
.
.
.

INT:
.
.
.
.
	BCF	INTCON, INTF	; Clear INTF (Flag Down)	
	RETFIE

بالتوفيق ان شاء الله , وكل سنه وانت طيب :D

#5

حلو حلو يا أبو الشباب بس انت دخلتني علي الاسمبلي وانا قاعد بتعلم picbasic pro وإن شاء الله راح اتعلم

الاسمبلي

لكن بدي تأكيد لنقطة وهي ان عملية رفم العلم INTF =1 هل تتم عن طريق المايكروكونترولير بدون تدخل المبرمج صح؟؟؟

لانني بالفعل جربت ولم اضع INTF=0 يستمر المايكروكونترولير عالق في روتين الانترابت حتي عمل reset

في نقطة ثانية وهي عند تفعيل مثلا INTE=1 وتوصيل ال RB0/INT بمفتاح يتصل ب ground والضغط علي المفتاح

فان الانترابت يعمل ولكن ما لاحظته انه ياخذ very short puls duration حتي وان استمررت ضاغطا علي المفتاح

فان الانترابت يعمل وينتهي حتي وان بقيت ضاغطا علي المفتاح باستمرار يعني بالمختصر ان الانترابت يعمل بمجرد استقبال ايعاز حتي وان استمر

الايعاز مدة من الزمن فانه لا يتأثر بمدة الايعاز ؟؟؟؟؟

ثالثا لاحظت ان عدد الانترابت 4 اثنان منهم خارجي وهما INT/RB0 و RB7toBR4 والآخران TMR0 EEPROM writing فهل هذا صحيح ؟؟؟

رابعا هل يمكن تجاهل استخدام ال OPTION_REG في البرنامج ؟؟؟

#6

الله عليك , باين انك بتجرب بنفسك :D , الأسئله باين عليها

الأول نبعد عن الأسمبلي عشان خاطرك :lol: مع اني ما بابرمج الميكروكنترولر غير بيها

اقتباس
لكن بدي تأكيد لنقطة وهي ان عملية رفم العلم INTF =1 هل تتم عن طريق المايكروكونترولير بدون تدخل المبرمج صح؟؟؟

لانني بالفعل جربت ولم اضع INTF=0 يستمر المايكروكونترولير عالق في روتين الانترابت حتي عمل reset

عملية رفع العلم تتم آليا دون تدخل من المبرمج , وتحدث عند حدوث مقاطعه , على فكره العلم وظيفته الأساسيه منع حدوث مقاطعه جديده قبل الانتهاء من معالجة المقاطعه القديمه , لذلك فمحو العلم يكون بايد المبرمج , وطبعا يتم بوضع INTF = 0 قبل الخروج من برنامج المقاطعه

اقتباس
في نقطة ثانية وهي عند تفعيل مثلا INTE=1 وتوصيل ال RB0/INT بمفتاح يتصل ب ground والضغط علي المفتاح

فان الانترابت يعمل ولكن ما لاحظته انه ياخذ very short puls duration حتي وان استمررت ضاغطا علي المفتاح

فان الانترابت يعمل وينتهي حتي وان بقيت ضاغطا علي المفتاح باستمرار يعني بالمختصر ان الانترابت يعمل بمجرد استقبال ايعاز حتي وان استمر

الايعاز مدة من الزمن فانه لا يتأثر بمدة الايعاز ؟؟؟؟؟

للعلم هو لا ياخذ أي وقت للاستجابه , فالحدث لا يتولد نتيجه وجود صفر أو واحد على القدم , المقاطعه تتولد نتيجة الانتقال من حاله الى اخرى اي من صفر الى واحد أو من واحد الى صفر أي انها تحدث عند الـ edge فلا يهم الزمن الذي سوف يستغرقه الضغط على الزر

واليك هذه الشخابيط يمكن توضح شيء :D

09_10_05_01_43_33_1128890613Edge.GIF

كما توضح الصوره توجد نقطتين يمكن حدوث المقاطعه عند واحده منها , وهنا اجابة سؤالك الرابع , نستخدم OPTION_REG وبالتحديد INTEDG لتحيد الـ Edge التي يتم عندها حدوث المقاطعه

طبعا تحديد الـ Edge أفضل من تركه هكذا خاصة في بعض التطبيقات , ولهذا تتعامل مع OPTION_REG

اقتباس
ثالثا لاحظت ان عدد الانترابت 4 اثنان منهم خارجي وهما INT/RB0 و RB7toBR4 والآخران TMR0 EEPROM writing فهل هذا صحيح ؟؟؟

صحيح

#7

هناك نقطة اريد فهمها بخصوص TMR0 وال WDT

TMR0 هو ريجيستير بطول 8 بيت عند تفعيله عن طريق الانترابت يتم التأثر بحالته اما عن طريق RA4 او عن طريق

internal clock طيب الشق الاول فهمته وهو تغير قيمته او عده عن طريق حالة البورت A4 طيب والشق

الثاني فهمت منه انه يتأثر العد عن طريق internal clock لكن ما لم افهمه هل هذا ال internal clock

يأخذ تردده من ال 4 miga hirtz الخارجية والتي عبارة عن مذبذب كريستالي ومكثفين ؟؟؟ ام هو oscillator داخلي

مستقل عن ال oscillator الخارجي ؟؟؟

WDT هل هو مرتبط بالريجيستير TMR0 ام مستقل عنه ؟؟؟؟ ام هو oscillator داخلي مستقل ؟؟؟ وعلي ما فهمت

انه قد يتخد كعداد او timer لعمل reset اوتوماتيكي بعد زمن معين ؟؟؟ ولكن لايزال هناك غموض عن دوره الفعلي واهميته

#8
اقتباس
لكن ما لم افهمه هل هذا ال internal clock

يأخذ تردده من ال 4 miga hirtz الخارجية والتي عبارة عن مذبذب كريستالي ومكثفين ؟؟؟ ام هو oscillator داخلي

مستقل عن ال oscillator الخارجي ؟؟؟

لا يوجد مذبذب داخلي أي مولد ذبذبات , ولكن يأخذ الذبذبه من المذبذب الخارجي ويقسمها على 4 فيعطي ربع التردد الخارجي وبهذا يكون هناك مذبذب داخلي , فمثلا انت تستخدم مذبذب 4 ميجا هيرتز في الخارج بهذا يكون المذبذب الداخلي بتردد 1 ميجا هيرتز

ويستخدم الميكروكنترولر هذا المذبذب في كل أعماله , فهو مصدر عيشه وسبب عمله وولي نعمته :lol:

ويستخدم المؤقت TMR0 في حالتين :

1 - لاعطاء مقاطعه خاصه به , وتستخدم للحصول على فتره زمنيه بدقه متناهيه دون استخدام روتين خاص بذلك

2 - لتنبيه كلب الحراسه أو WDT

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

11_10_05_04_23_28_1129029808wd.GIF

اما بالنسبه لعمل الـ WDT فاليك موضوع سابق يتحدث حوله الرابط

#9

محتاج استوعب نقطة

TMR0 مثل ما قلت هو ريجيستير حجمه 8 بيت كل ما اريده ان افهمه بدقه

1- لنفرض ان ال clock الداخليه 1 مايكرو ثانية وان ال prescaler وضع علي اساس 1:1 فان التغير من

0 الي 1 ثم 2 و 3 وهكذا يتم كل 1 مايكروثانية حتي الوصول الي 255 ثم ينقلب الي الصفر ,حالة الانقلاب من ال 255 الي الصفر يحدث

عندها الانترابت والتحول الي روتين الانترابت ؟؟؟؟ يعني في حالة العد العادية من 0 الي 1 ثم 2 و 3 حتي قبل 255 لا يرتبط بروتين الانترابت يعني في حالة الانقلاب من 0 الي 255 او من 255 الي 0 يحدث فقط عندها الانترابت ام غير ذلك بين 0 الي 255 فهو عد داخلي او لنعتبرها حالة سايكل عادية او كلوك؟؟؟؟؟ هل هذا صحيح ؟؟؟؟ طيب هل هذا التأثر بالسايكل الداخلية يتم في الخفاء بغض النظر عن اي برنامج رئيسي ؟؟

يعني يحدث ذلك بمجرد توصيل ال power on للمايكرو ثم يحدث العد الداخلي ؟؟؟؟ وهذا العد يتحول التغير فيه ام عن طريق

السايكل الداخلية بوضع البيت في TOCS =0 او عن طريق RA4/TOck بوضع البيت TOCS=1 ؟؟؟

أريد تأكيد علي وجه الصواب في كلامي اذا سمحتم

شكلي زعجتكم :D بس الله غالب ما لاقي حد غيركم ازعجه لو في عندي حد في الحياة العملية كنت دوشته :D بس اتحملوني :lol:

تم تعديل هذه المشاركة بواسطة فارس2005 في 13 أكتوبر 2005 في 03:02

#10
فارس2005 كتب:
محتاج استوعب نقطة

TMR0 مثل ما قلت هو ريجيستير حجمه 8 بيت كل ما اريده ان افهمه بدقه

1- لنفرض ان ال clock الداخليه 1 مايكرو ثانية وان ال prescaler وضع علي اساس  1:1 فان التغير من

0 الي 1 ثم 2 و 3 وهكذا يتم كل 1 مايكروثانية حتي الوصول الي 255 ثم ينقلب الي الصفر ,حالة الانقلاب من ال 255 الي الصفر يحدث

عندها الانترابت والتحول الي روتين الانترابت ؟؟؟؟ يعني في حالة العد العادية من 0 الي 1 ثم 2 و 3 حتي قبل 255 لا يرتبط بروتين الانترابت يعني في حالة الانقلاب من 0 الي 255 او من 255 الي 0 يحدث فقط عندها الانترابت ام غير ذلك بين 0 الي 255 فهو عد داخلي او لنعتبرها حالة سايكل عادية او كلوك؟؟؟؟؟ هل هذا صحيح ؟؟؟؟ طيب هل هذا التأثر بالسايكل الداخلية يتم في الخفاء بغض النظر عن اي برنامج رئيسي ؟؟

نعم , نعم , نعم , نعم :D

اقتباس
يعني يحدث ذلك بمجرد توصيل ال power on للمايكرو ثم يحدث العد الداخلي ؟؟؟؟ وهذا العد يتحول التغير فيه ام عن طريق

السايكل الداخلية بوضع البيت في TOCS =0 او عن طريق RA4/TOck بوضع البيت TOCS=1 ؟؟؟

مش فاهم عايز تقول ايه بالضبط ؟ :blink:

أولا عند توصيل ال power on يبدأ العد الداخلي من تلقاء نفسه , لكن طبعا المقاطعات لم يتم تفعيلها

تمر ببرنامج وضع القيم الابتدائيه , او ضبط خصائص الميكرو , ومنها تفعيل المقاطعات وضبط ال prescaler , و وضع قيمه ابتدائيه في TMR0 بعدها يبدأ العد المؤثر في الدائره , اي له تاثير عليها بتوليد مقاطعه جديده

يعتبر الـ TMR0 منفصل انفصال شبه تام عن وحدة المعالجه وخط سير البرنامج , كل ما يستفيد منه هو المذبذب , وطبعا لا ينقص منه شيء و تستطيع ادارة أكثر من جهاز بمذبذب واحد

عند حدوث المقاطعه يقوم بتغيير خط سير البرنامج الى عنوان محدد وهو عنوان برنامج المقاطعه

اقتباس
شكلي زعجتكم  بس الله غالب ما لاقي حد غيركم ازعجه لو في عندي حد في الحياة العملية كنت دوشته  بس اتحملوني

لا ازعاج ولا حاجه اسأل انت براحتك , امال المنتدى معمول ليه :D

#11
اقتباس
يعني يحدث ذلك بمجرد توصيل ال power on للمايكرو ثم يحدث العد الداخلي ؟؟؟؟ وهذا العد يتحول التغير فيه ام عن طريق

السايكل الداخلية بوضع البيت في TOCS =0 او عن طريق RA4/TOck بوضع البيت TOCS=1 ؟؟؟

مش فاهم عايز تقول ايه بالضبط ؟  :blink:

انا اقصد باننا عند وضع في بداية البرنامج

intcon = %10100000

فاننا فعلنا الانترابت بشكل عام يعني بدأ العد من لحظة ال power on من نقطة مرجعية ولتكن 0 حتي 255 وهذا قصد بالعد الداخلي بمجرد عمل المايكرو

فخمتو خبيبي والا ليسا ما فخمتو :D أخ يا نفوخي بتاخي انا منك :D

#12
فارس2005 كتب:
انا اقصد باننا عند وضع  في بداية البرنامج

intcon = %10100000

فاننا فعلنا الانترابت بشكل عام يعني بدأ العد من لحظة ال power on من نقطة مرجعية ولتكن 0 حتي 255 وهذا قصد بالعد الداخلي بمجرد عمل المايكرو

فخمتو خبيبي والا ليسا ما فخمتو  :D أخ يا نفوخي بتاخي انا منك :D

فخمتو فخمتو :lol: , بص يا خبيبي

نعدل بقى علشان الكلام يوضح :D

كلامك مظبوط , فعلا بعد تفعيل المقاطعه الخاصه بـ TMR0 , ولو كانت هي أول أمر في البرنامج , فان العد يبدأ وبعد 256 نبضه تحدث المقاطعه

#13

انت حبيبي والله يا asm4all حاسس اني بعرفكش :D من زمان

المهم في نقطة أخيرة وننهي الموضوع

بعد ما عرفت ان TMR0 هو ريجيستير يبدأ من قيمة وينتهي عن 255 ويستمد تغير قيمته اما من مصدر خارجي عن طريق

RA4 او عن طريق internal clock الذي هو مصدر اصلي من ال external clock

الذي هو 4 ميجا هيرتز وبعد ان عرفت ان Watchdog timer هو مذبذب داخلي مستقل بذاته وانه يستخدم مع امر sleep حتي يصحي المايكرو من نومه بجعله في روتين مقاطعة ؟؟؟ والسبب في استخدامه انه مع امر sleep لانه في حالة sleep فان المايكرو يستهلك نسبة صغيرة من التيار وبالتالي يتوقف ال internal clock عن العمل في حالة النوم وطالما توقف عن العمل يان المذبذب الخارجي متوقف ايضا ومن ثم ال TMR0 لا تتغير قيمته اذا افترضنا انه يستمد تغيره من ال internal clock

وبالتالي لتغيير قيمة ال TMR0 في حالة النوم لابد من من مصدر clock داخلي آخر مستقل يعمل وقت حدوث النوم وبالتالي المصمم وضع في اعتباره هذه النقطة وصمم ال WDT لهذا الغرض

وبالتالي صار لدينا 3 مصادر للتحكم في تغيير القمية المخزنة في الريجيستر TMR0 وهما

1- external وهو عن طريق تغير حالة البورت RA4

2- internal clock ومصدره من المذبب الخارجي المتصل بالمايكرو من الخارج الذي هو 4 ميجا هرتيز مثلا

3- عن طرق ال WDT وهو ومذبذب داخلي قائم بذاته ومستقل عن المذبذب الخارجي

وبالتالي لجعل ال TMR0 تتغير حالته عن طريق المذبذب WDT نضع PSA=1 لانه عندما PAS=0 فاننا نستعمل ال Internal clock

عقب يا asm4all انت وغيرك حتي اعرف محل الصح من الخطأ

تم تعديل هذه المشاركة بواسطة فارس2005 في 14 أكتوبر 2005 في 01:12

#14
اقتباس
وبعد ان عرفت ان Watchdog timer هو مذبذب داخلي مستقل بذاته وانه يستخدم مع امر sleep حتي يصحي المايكرو من نومه بجعله في روتين مقاطعة ؟؟؟ والسبب في استخدامه انه مع امر sleep لانه في حالة sleep فان المايكرو يستهلك نسبة صغيرة من التيار وبالتالي يتوقف ال internal clock عن العمل في حالة النوم وطالما توقف عن العمل يان المذبذب الخارجي متوقف ايضا ومن ثم ال TMR0 لا تتغير قيمته اذا افترضنا انه يستمد تغيره من ال internal clock

وبالتالي لتغيير قيمة ال TMR0 في حالة النوم لابد من من مصدر clock داخلي آخر مستقل يعمل وقت حدوث النوم وبالتالي المصمم وضع في اعتباره هذه النقطة وصمم ال WDT لهذا الغرض

وبالتالي صار لدينا 3 مصادر للتحكم في تغيير القمية المخزنة في الريجيستر TMR0 وهما

1- external وهو عن طريق تغير حالة البورت RA4

2- internal clock ومصدره من المذبب الخارجي المتصل بالمايكرو من الخارج الذي هو 4 ميجا هرتيز مثلا

3- عن طرق ال WDT وهو ومذبذب داخلي قائم بذاته ومستقل عن المذبذب الخارجي

وبالتالي لجعل ال TMR0 تتغير حالته عن طريق المذبذب WDT نضع PSA=1 لانه عندما PAS=0 فاننا نستعمل ال Internal clock

هل هذا الكلام انت استنتجته بنفسك , ولا في حد اشترك معاك في الجريمه دي :D :lol:

أولا : لو أن هناك مذبذب داخلي في الميكرو لما يحتاج مذبذب خارجي ؟

ثانيا : البيت PSA لا يستخدم بهذه الطريقه , بل يعين استعمال المؤقت اما لكلب الحراسه (WDT) واتش دوغ او الى TIMER0

14_10_05_11_37_07_1129315027WD.GIF

وكما أوضحت لك سلفا : المقصود بالمذبذب الداخلي أي ربع تردد المذبذب الخارجي

ثالثا : بافتراض أن هناك مذبذب داخلي في الميكروكنترولر , أليس من المنطقي الاشاره اليه في الداتاشيت الخاص بالميكروكنترولر ؟

انظر في الداتا شيت لتتأكد من هذا الكلام

#15

الحقيقة استنتاجي في الجريمة النكراء :D

المهم انا استنتجت كلامي من هذا الموقع

http://www.ubasics.com/adam/pic/picprog.html

اقتباس
SLEEP MODE:

Sleep mode is a low current mode used to save battery life. The pic can draw as little as 50 microamps in sleep mode. The mode is started with the SLEEP instruction and can be ended by one of the following:

external reset on MCLR pin.

Watchdog timeout ( if enabled ).

Interrupt from:

register B port change.

RB0/INT pin.

EEPROM write completion.

While in sleep mode instruction execution is suspended. In particular, timer 0 is not incrementing. Upon wakeup from sleep instruction exection continues from the stopped point or if GIE is set, instruction continues from location 4.

WATCHDOG TIMER:

The watchdog timer is independent of the PIC's internal clock. It times out from a CLRWDT ,(Clear Watchdog Timer), instruction in roughly 18 milliseconds. It is not very accurate. The prescaler can be assigned to the WDT, giving time out periods of up to a couple of seconds. The purpose of the WDT in normal use is to keep the PIC from going off into never-never land without the ability to recover. At timeout, a flag is cleared, (TO), the program counter is reset to 0000 and the program starts again. To prevent the reset, you to build a CLRWDT, (Clear Watch Dog Timer), instructions into your program before the timeout occurs.

من النقاط السابقة اعتبرت ان كلب الحراسة هو تايمر وهو مقصدي والنقطة الثانةي في PSA هو بت مشترك بين كلب الحراسة و TMR0 ليشترك الاثنان في ال prescaler

يعني انت تقصد ان كلب الحراسة يستمد ال clock من المذبذب الخارجي ؟؟؟؟؟

لكن في المانويل الخاص بالمايكروكونترولير من مايكورتشيب يقول في المرفقات

post-33503-1129320952_thumb.gif

تم تعديل هذه المشاركة بواسطة فارس2005 في 14 أكتوبر 2005 في 23:16

#16

بريء يا فارس :D

انا مش فاهم الناس دي بتتكلم من غير ما تتأكد ليه ؟ بس لما أشوف اللي اسمه Asm4all ده :angry:

لو شوفته قوله Asm4all مش عايز يشوف وشك تاني هنا :lol:

دي واضحه جدا

اقتباس
The Watchdog Timer is a free running on-chip RC

oscillator which does not require any external

components. This RC oscillator is separate from the

RC oscillator of the OSC1/CLKIN pin. That means that

the WDT will run even if the clock on the OSC1/CLKIN

and OSC2/CLKOUT pins of the device has been

stopped, for example, by execution of a SLEEP

instruction. During normal operation a WDT time-out

طيب ما يوفروا علينا المذبذب الخارجي بقى

عموما , انت كنت عايز ايه من النقطه دي أصلا ؟

#17
اقتباس
ثالثا : بافتراض أن هناك مذبذب داخلي في الميكروكنترولر , أليس من المنطقي الاشاره اليه في الداتاشيت الخاص بالميكروكنترولر ؟

انظر في الداتا شيت لتتأكد من هذا الكلام

هذا تصريحك في البيان السابق :D وكان غرضي الاشارة اليه

وبالتالي لتعديل استنتاجي السابق

اقتباس
وبالتالي لتغيير قيمة ال TMR0 في حالة النوم لابد من من مصدر clock داخلي آخر مستقل يعمل وقت حدوث النوم وبالتالي المصمم وضع في اعتباره هذه النقطة وصمم ال WDT لهذا الغرض

وبالتالي صار لدينا 3 مصادر للتحكم في تغيير القمية المخزنة في الريجيستر TMR0 وهما

1- external وهو عن طريق تغير حالة البورت RA4

2- internal clock ومصدره من المذبب الخارجي المتصل بالمايكرو من الخارج الذي هو 4 ميجا هرتيز مثلا

3- عن طرق ال WDT وهو ومذبذب داخلي قائم بذاته ومستقل عن المذبذب الخارجي

وبالتالي لجعل ال TMR0 تتغير حالته عن طريق المذبذب WDT نضع PSA=1 لانه عندما PAS=0 فاننا نستعمل ال Internal clock

فيصبح

الصمم وضع في اعتباره استخدام تايمر آخر بخلاف ال TMR0 وهو ال WDT وهو يعمل ليوقظ المايكرو في حالة النوم بعد زمن معين بعد توقف ال TMR0 عن العمل في حالة النوم

اما النقطة الاخرى نحذفها وهي التي تحتها خط

في نقطة احب ان انوه بها ال WDT هو تايمر وطالما هو تايمر اذن يستمد تغيره من مصدر مذبب مستقل كما في ال data sheet مثل دائرة ال 555 timer التي توصل لها دائرة RC فتصبح Timer

هذا والله اعلم

#18
اقتباس
اقتباس
ثالثا : بافتراض أن هناك مذبذب داخلي في الميكروكنترولر , أليس من المنطقي الاشاره اليه في الداتاشيت الخاص بالميكروكنترولر ؟

انظر في الداتا شيت لتتأكد من هذا الكلام

هذا تصريحك في البيان السابق وكان غرضي الاشارة اليه

أولا أعتذر عن هذه الجمله , فلم أكن قد قرأت هذه النقطه التي أشرت اليها في الداتا شيت من قبل

لكن مازال

اقتباس
أولا : لو أن هناك مذبذب داخلي في الميكرو لما يحتاج مذبذب خارجي ؟

ثانيا : البيت PSA لا يستخدم بهذه الطريقه , بل يعين استعمال المؤقت اما لكلب الحراسه (WDT) واتش دوغ او الى TIMER0

14_10_05_11_37_07_1129315027WD.GIF

قائم

هل ترى فيه خطأ ؟؟؟؟

و ارجع تاني اقولك , تفرق معاك ايه ؟ يعني ايه الفرق لو كان بيستخدم مذبذب داخلي او المذبذب الخارجي , هل يوجد هدف أساسي من هذا ؟

يعني

اقتباس
المهم في نقطة أخيرة وننهي الموضوع

بعد ما عرفت ان TMR0 هو ريجيستير يبدأ من قيمة وينتهي عن 255 ويستمد تغير قيمته اما من مصدر خارجي عن طريق

RA4 او عن طريق internal clock الذي هو مصدر اصلي من ال external clock

الذي هو 4 ميجا هيرتز وبعد ان عرفت ان Watchdog timer هو مذبذب داخلي مستقل بذاته وانه يستخدم مع امر sleep حتي يصحي المايكرو من نومه بجعله في روتين مقاطعة ؟؟؟ والسبب في استخدامه انه مع امر sleep لانه في حالة sleep فان المايكرو يستهلك نسبة صغيرة من التيار وبالتالي يتوقف ال internal clock عن العمل في حالة النوم وطالما توقف عن العمل يان المذبذب الخارجي متوقف ايضا ومن ثم ال TMR0 لا تتغير قيمته اذا افترضنا انه يستمد تغيره من ال internal clock

وبالتالي لتغيير قيمة ال TMR0 في حالة النوم لابد من من مصدر clock داخلي آخر مستقل يعمل وقت حدوث النوم وبالتالي المصمم وضع في اعتباره هذه النقطة وصمم ال WDT لهذا الغرض

وبالتالي صار لدينا 3 مصادر للتحكم في تغيير القمية المخزنة في الريجيستر TMR0 وهما

1- external وهو عن طريق تغير حالة البورت RA4

2- internal clock ومصدره من المذبب الخارجي المتصل بالمايكرو من الخارج الذي هو 4 ميجا هرتيز مثلا

3- عن طرق ال WDT وهو ومذبذب داخلي قائم بذاته ومستقل عن المذبذب الخارجي

وبالتالي لجعل ال TMR0 تتغير حالته عن طريق المذبذب WDT نضع PSA=1 لانه عندما PAS=0 فاننا نستعمل ال Internal clock

النقطه دي بتفرق في ايه بالضبط معاك ؟؟؟

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

تم تعديل هذه المشاركة بواسطة Asm4all في 15 أكتوبر 2005 في 19:16

#19

بالنسبة لكلامك

اقتباس
ثانيا : البيت PSA لا يستخدم بهذه الطريقه , بل يعين استعمال المؤقت اما لكلب الحراسه (WDT) واتش دوغ او الى TIMER0

فهو صحيح عندما رجعت ل data sheet

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

المهم انا بتشكرك اكتير علي تجاوبك معي لانو بصرحة موضوع الانترابت وال TMR0 وال WDT أخد مني اسبوع دراسة يعني مو متواصلة لحتي ما ننفخ حالنا :D بس لحتي افهم اساسيات في عالم المايكرو

#20
اقتباس
اما بالنسبة للجزأ الاخر من كلامك تفرق في بعض الاحيان علي حسب الغرض البرمجي من هذه القطعة والاستفادة من محلها

الى الآن الكلام مبهم !!!

ومع ذلك لا يهم التوضيح , فالموضوع برمته لا يمثل اي فرق , لا في البرمجه ولا في تكوين الدائره , اللهم الا كنت تنوي فك المذبذب الخارجي من الدائره أثناء نوم الميكروكنترولر , وتضعه في دائره اخرى وبعدها تعيده الى الميكروكنترولر مره اخرى ليكمل عمله - فيلم هندي :lol:

#21

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

مع فائق احترامي وتقديري

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…