السلام المشروع هو عداد الاجرة
هذا هو الرابط للمشروع
lien1
ذا دخا مايكرو في وضع sleep فأنه لايمكن ان يعود مايكرو للعمل الا عن طريق انتربت وبطبع تايمرات كلها سوف تتوقف لان هزاز او كرستاله سوف تتوقف وبطبع هنا سوف نستخدم سويج على RB0 ونقون بتفعيل انتربت اي مقاطعه عند حدوث تغير جهد على RB0
INT0IE_bit=1;//Enables the INT0 external interrupt
INTEDG0_bit=0;//Interrupt on falling edge
هذا بالنسبة للانربة التي لم اجد ما يعدلها في الاتميغا
في داله انتربت
if(INT0F_bit==1)
{
on_off=~on_off;
INT0F_bit=0;
}
هنا مت
T1CON = 0x01;
TMR1IF_bit = 0;
TMR1H = 0xF0;
TMR1L = 0x60;
TMR1IE_bit = 1;
INTCON = 0xC0;
}
//************************ read from computer ******************************//
void Interrupt()
{
if ( TMR1IF_bit)
{
TMR1IF_bit = 0;
TMR1H = 0xF0;
TMR1L = 0x60;
طيب و هذا شرخ من الاخ خسن هادي مخمود
هذا الكود انتربت للتايمر1 وهنا اريد حصول على ازمنه للسويجات وغيرها يعني انت لما تضغط على سويج لابد من انتظار فتره وبعدها مايكرو ينفذ اوامر مثلا نقول 250ms ولكن هذا الزمن يعرقل عمل سفن سكمنت وعلاوه على ذلك لاينفذ مايكرو شيئ خلال فتره تأخير وعليه أستخدمنا تايمر 1 للتوليد ازمنه وهنا لما اضغط على سويج مثلا sw_set عندها اخبره اجعل sw_set_flag=1 ومتغير )sw_set_cont يقوم بأحتساب زمن مثلا 250ms هذه طريقه
1- لاتؤخر عمل مايكرو
2- لايؤثر على عمل سفن سكمنت
ولكن كيف يحتسب زمن مثى 250ms
في مشروع الذي ارفقته لك يحدث انتربت كل 2ms وبتالي للحصول على زمن 250ms اذن متغير sw_set_cont=250/2=125
وفي الكود نختبر هل sw_set_cont اصبح اكبر من 125 فأذا كان نعم قم بتنفيذ اوامر سويج
كما أخبرتك توليد ازمنه بهذه طريقه يجعل مايكرو يقوم بعده مهام دون ان تؤثر احدهما اخرى افضل من أستخدام الامر delay الذي يجمد مايكرو ولا يدعه بالقيام بوظائف اخرى كأن مثلا عندما ضغطت على سويج تريد اثناء ذلك يراقب درجه حراره وبالطبع استخدام الامر delay راح يجبر مايكرو على انتظار اما توليد زمن عبر انتربت فلا يؤخر مايكرو عمله
تحياتي