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

   

أبو كريم555
:: مهندس ::
تاريخ التسجيل: May 2016
المشاركات: 30
نشاط [ أبو كريم555 ]
قوة السمعة:
قديم 10-12-2017, 12:56 AM المشاركة 9   
افتراضي



السلام عليكم
لا يوجد برنامج انما هي استشارة برمجية لو تفضلت حضرتك
فمثلا
كود:
 if(porta.f0==1 && time <=2 minute )motor=0;
اما اذا تعدى الزمن 2 دقيقة
كود:
if(porta.f0==1 && time >2 minute )motor=1;
بالنسبة للبت يأخذ القيمة 0 وعند اعادة التشغيل يكون بـ 1 يعني هكذا
كود:
bit=0; 
bit=1;
انا لسه اتعلم فالرجاء المرافقة في ذلك
مشكور

اعلانات

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 10-12-2017, 08:58 AM المشاركة 10   
افتراضي


إذا كان الأمر تعلم فهنا الأفضل استخدام التعليمة هكذا
كود:
unsigned short Done=0;
..
..
..
..
..
..

   if(porta.f0==1 && time >=2 minute && Done=0 )
{
motor=0;
Done=1;
}
انت لست فى حاجة لإختبار العكس

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

أبو كريم555
:: مهندس ::
تاريخ التسجيل: May 2016
المشاركات: 30
نشاط [ أبو كريم555 ]
قوة السمعة:
قديم 16-12-2017, 01:28 AM المشاركة 11   
افتراضي


إذا كان الأمر تعلم فهنا الأفضل استخدام التعليمة هكذا
كود:
unsigned short Done=0;
..
..
..
..
..
..

   if(porta.f0==1 && time >=2 minute && Done=0 )
{
motor=0;
Done=1;
}
انت لست فى حاجة لإختبار العكس
السلام عليكم
كيف يمكن أن اضيف الزمن كشرط
كود:
&& time >=2 minute
ممكن في قضية البت bit=0; أن تشرح أكثر
شكرا لك على الاهتمام


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 16-12-2017, 09:15 AM المشاركة 12   
افتراضي


أنت لا تضيف الزمن
هذا متغير قد يكون اسمه Time أو يمكن أن تسميه Period أو تسميه Minutes_Passed_Since_Start أو تسميه Hold_Action أو ما تشاء
تبدأ بجعله = صفرا و عند المقاطعة كما شرح الأخ الفاضل أحمد شهيد تزيد له 1
فى البرنامج تفحص قيمته فإن كان لم تعدى الدقائق المطلوبة لا تفعل شيئا
و إن كان وصل ولا تريد تكرار العمليه توقف ال Timer0 ولا تعيد تهيئته و تبقى هذا المتغير على حاله لأنه دليل أن الفترة انقضت و المهمة تمت و تفعل ما تريد من تشغيل هذا أو ذاك بعد الدقائق الأولى


أبو كريم555
:: مهندس ::
تاريخ التسجيل: May 2016
المشاركات: 30
نشاط [ أبو كريم555 ]
قوة السمعة:
قديم 23-12-2017, 12:03 AM المشاركة 13   
افتراضي


أنت لا تضيف الزمن
هذا متغير قد يكون اسمه Time أو يمكن أن تسميه Period أو تسميه Minutes_Passed_Since_Start أو تسميه Hold_Action أو ما تشاء
تبدأ بجعله = صفرا و عند المقاطعة كما شرح الأخ الفاضل أحمد شهيد تزيد له 1
فى البرنامج تفحص قيمته فإن كان لم تعدى الدقائق المطلوبة لا تفعل شيئا
و إن كان وصل ولا تريد تكرار العمليه توقف ال Timer0 ولا تعيد تهيئته و تبقى هذا المتغير على حاله لأنه دليل أن الفترة انقضت و المهمة تمت و تفعل ما تريد من تشغيل هذا أو ذاك بعد الدقائق الأولى
السلام عليكم
تكلمت على الـTime أو الـPeriod و طريقة استعمال المقاطعة وهذا واضح كما أشرت حضرتك مثلا
دعني أطرح سؤال أخر بطريقة أخرى لو سمحت ,لو كان الزمن Time بين تحقق الشرط في المرة الأولى و بين المرة الثانية أقل من Time أو Period المحسوب من المقاطعة كيف يمكن كتابنها برمجيا ..
شكرا لك


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 23-12-2017, 08:38 AM المشاركة 14   
افتراضي


انشئ متغير آخر باسم مناسب مثلا Action_Time
عند أول حدث ضع الزمن المحسوب فيه
وعند تكرار الحدث اطرح الزمن المحسوب - المسجل فى المتغير يكون لديك الفرق


أبو كريم555
:: مهندس ::
تاريخ التسجيل: May 2016
المشاركات: 30
نشاط [ أبو كريم555 ]
قوة السمعة:
قديم 23-12-2017, 11:54 AM المشاركة 15   
افتراضي


انشئ متغير آخر باسم مناسب مثلا Action_Time
عند أول حدث ضع الزمن المحسوب فيه
وعند تكرار الحدث اطرح الزمن المحسوب - المسجل فى المتغير يكون لديك الفرق
السلام عليكم
المتغير الجديد Action_time سيأخذ قيمة الـTimer2 عند أول شرط ,هذا واضح
كود:
char timer1=0,timer2=0;
char Action_time;

void InitTimer0(){
  OPTION_REG	 = 0x86;
  TMR0		 = 100;
  INTCON	 = 0xA0;
}

void Interrupt(){
  if (TMR0IF_bit){
    TMR0IF_bit	 = 0;
    TMR0		 = 100;
   timer1++;
   if(timer1==100){ timer1=0; timer2++;}
  }
}

void main()
{
  InitTimer0();
  trisa.f0=1;
  trisb.f=0;
  while(1)
  {
   if(porta.f0==1){ Action_time=Timer2; ;portb.f0=1;}}

  }

}
ولكن كيف سأخبره عن تحقق الشرط للمرة الثانية و أن
Timer2 -Action_time أن الفرق بينهما هو أيضا شرط ؟؟؟
شكرا لك أستاذ


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 23-12-2017, 12:44 PM المشاركة 16   
افتراضي


انت لا تخبره فهو لا يستمع إليك
انت ستقارن الزمن إن كان اكبر أو اقل مما تريد
إن شئت تحدث المتغير عند الحدوث للمرة الثانية فليكن و إن لم تشأ فهو حسب حاجة البرنامج ككل الذى تنفذه



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