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

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

ahmed353
:: مهندس ::
تاريخ التسجيل: May 2012
المشاركات: 13
نشاط [ ahmed353 ]
قوة السمعة:0
قديم 05-01-2014, 10:27 PM المشاركة 1   
افتراضي سؤال حول تنفيذ امرين متتاليين في الـ pic Twitter FaceBook Google+



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

الاخوة الكرام سؤالي عن كيفية اعطاء امرين متتاليين او اكثر للبك (pic) دون انتظار اتمام الامر الاول يعني مثلا عند تشغيل D1 في وقت محدد لمدة 5 ثوان عن طريق مفتاح
لا يمكنني تشغيل الـ D2 حتى ينتهي الوقت الاول D1.
وانا اريد ان اضغط على sw1 فيعمل D1 , وقبل انتهاء وقت التشغيل اريد ان اضغط على sw2 فيعمل D2 وهكذا .
لو امكن التوضيح .

هذه صورة الدائرة :


كود:
void main() {
 trisa=0xff; trisb=0; portb=0;
      while(1)
      if(porta.f0==0) {portb.f0=1;delay_ms(4000);portb.f0=0;}
      else
      if(porta.f1==0) {portb.f1=1;delay_ms(4000);portb.f1=0;}

اعلانات

ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 253
نشاط [ ahmadazez ]
قوة السمعة:0
قديم 06-01-2014, 12:00 AM المشاركة 2   
افتراضي


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

الاخوة الكرام سؤالي عن كيفية اعطاء امرين متتاليين او اكثر للبك (pic) دون انتظار اتمام الامر الاول يعني مثلا عند تشغيل D1 في وقت محدد لمدة 5 ثوان عن طريق مفتاح
لا يمكنني تشغيل الـ D2 حتى ينتهي الوقت الاول D1.
وانا اريد ان اضغط على sw1 فيعمل D1 , وقبل انتهاء وقت التشغيل اريد ان اضغط على sw2 فيعمل D2 وهكذا .
لو امكن التوضيح .

هذه صورة الدائرة :


كود:
void main() {
 trisa=0xff; trisb=0; portb=0;
      while(1)
      if(porta.f0==0) {portb.f0=1;delay_ms(4000);portb.f0=0;}
      else
      if(porta.f1==0) {portb.f1=1;delay_ms(4000);portb.f1=0;}


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

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

الصورة الرمزية احمدمعاطى
احمدمعاطى
:: مهندس جيد ::
تاريخ التسجيل: Apr 2009
الدولة: مدينة الاسكندريه
المشاركات: 271
نشاط [ احمدمعاطى ]
قوة السمعة:0
قديم 06-01-2014, 05:26 AM المشاركة 3   
افتراضي


جرب هذا البرنامج
مع تغير القيم باللون الاحمر يتغير الوقت
كود:
char k=0,x=0;
void main() {
trisa =255;
trisb = 0;
portb = 0;
      x=0;
maty:

     if(porta.f0==0){portb.f0=1;}
     if(porta.f0){x++;delay_ms(100);}
     if(x>50){portb.f0=0;x=0;}
  
     if(porta.f1==0){portb.f1=1;}
     if(porta.f1){k++;delay_ms(100);}
     if(k>10){portb.f1=0;k=0;}
goto maty;
}


الصورة الرمزية #MAAM#
#MAAM#
:: عضو ذهبي ::
تاريخ التسجيل: Jun 2008
الدولة: EGYPT
المشاركات: 567
نشاط [ #MAAM# ]
قوة السمعة:91
قديم 06-01-2014, 08:43 AM المشاركة 4   
افتراضي


يجب عليك استخدام interrupt






















-----------------------------------------------------------------------------------------------
*مهندس متخصص عمل دوائر الكترونية وكورسات في الالكترونيات*
للتواصل (يوجد واتس اب) 0543340129
م.محمد عباس – الرياض
-----------------------------------------------------------------------------------------------


ahmed353
:: مهندس ::
تاريخ التسجيل: May 2012
المشاركات: 13
نشاط [ ahmed353 ]
قوة السمعة:0
قديم 06-01-2014, 04:53 PM المشاركة 5   
افتراضي


جرب هذا البرنامج
مع تغير القيم باللون الاحمر يتغير الوقت
كود:
char k=0,x=0;
void main() {
trisa =255;
trisb = 0;
portb = 0;
      x=0;
maty:

     if(porta.f0==0){portb.f0=1;}
     if(porta.f0){x++;delay_ms(100);}
     if(x>50){portb.f0=0;x=0;}
  
     if(porta.f1==0){portb.f1=1;}
     if(porta.f1){k++;delay_ms(100);}
     if(k>10){portb.f1=0;k=0;}
goto maty;
}
جزاكم الله خير على الاهتمام وشكرا للاخ احمد لهذا البرنامج لم ينفعني ولو تكرمتم برنامج ثاني .


التعديل الأخير تم بواسطة : ahmed353 بتاريخ 06-01-2014 الساعة 05:34 PM

الصورة الرمزية سعيد قادر
سعيد قادر
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2009
الدولة: العراق/ كوردستان
المشاركات: 2,916
نشاط [ سعيد قادر ]
قوة السمعة:151
قديم 06-01-2014, 07:59 PM المشاركة 6   
افتراضي



الكود

كود:
#define                   is         ==
#define                   pressed    0
#define                   sw1        porta.f0
#define                   sw2        porta.f1
char x=0;char y=0;
void init()
{
trisa=3;
porta=0;
portb=0;
trisb=0;

}
void main()
{
 init();
 
 while(1)
 {
  if(sw1 is pressed){delay_ms(10);
                     while(sw1 is pressed);
                     delay_ms(10);
                     for(x=0;x<250;x++){
                     portb.f0=1;delay_ms(20);
                     if(sw2 is pressed)
                                      {delay_ms(10);
                                       while(sw2 is pressed);
                                       delay_ms(10);
                                       y++; 
                                       if(y is 3)y=0;
                                       if(y is 1)portb.f1=1;
                                       if(y is 2)portb.f1=0;
                                      }


                                      }
                              portb.f0=0;
                    }
 if(sw2 is pressed)
                                      {delay_ms(10);
                                       while(sw2 is pressed);
                                       delay_ms(10);
                                       y++;
                                       if(y is 3)y=0;
                                       if(y is 1)portb.f1=1;
                                       if(y is 2)portb.f1=0;
                                      }

}
}


ahmed353
:: مهندس ::
تاريخ التسجيل: May 2012
المشاركات: 13
نشاط [ ahmed353 ]
قوة السمعة:0
قديم 06-01-2014, 08:22 PM المشاركة 7   
افتراضي



الكود

كود:
#define                   is         ==
#define                   pressed    0
#define                   sw1        porta.f0
#define                   sw2        porta.f1
char x=0;char y=0;
void init()
{
trisa=3;
porta=0;
portb=0;
trisb=0;

}
void main()
{
 init();
 
 while(1)
 {
  if(sw1 is pressed){delay_ms(10);
                     while(sw1 is pressed);
                     delay_ms(10);
                     for(x=0;x<250;x++){
                     portb.f0=1;delay_ms(20);
                     if(sw2 is pressed)
                                      {delay_ms(10);
                                       while(sw2 is pressed);
                                       delay_ms(10);
                                       y++; 
                                       if(y is 3)y=0;
                                       if(y is 1)portb.f1=1;
                                       if(y is 2)portb.f1=0;
                                      }


                                      }
                              portb.f0=0;
                    }
 if(sw2 is pressed)
                                      {delay_ms(10);
                                       while(sw2 is pressed);
                                       delay_ms(10);
                                       y++;
                                       if(y is 3)y=0;
                                       if(y is 1)portb.f1=1;
                                       if(y is 2)portb.f1=0;
                                      }

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


الصورة الرمزية سعيد قادر
سعيد قادر
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2009
الدولة: العراق/ كوردستان
المشاركات: 2,916
نشاط [ سعيد قادر ]
قوة السمعة:151
قديم 06-01-2014, 08:36 PM المشاركة 8   
افتراضي



إضافة رد

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

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

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


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

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