|
السلام عليكم الاخوة الكرام
السؤال هو كيف يمكنني ان اجعل البيك يخرج من الحلقة(loop) . لانني اعطيته اوامر شرطية if واستعملت ازرار والمشكل هو ادا تحقق الشرط بالضغط عن زر لينفد الامر الدي هو التكرار بان تشتعل وتنطفئ الليد مثلا تلغى الازرار الاخرى لانه دخل في الحلقة ولا يلتفت للاوامر الاخرى,
ارجو ان يكون سؤالي واضحا وشكرا
|
كود:
void main() { trisa=255; trisb=0;
portb=0;
loop:
if (porta.f0==1){q1: portb=255;delay_ms(300);portb=0;delay_ms(300); goto q1;}
if (porta.f1==1) {portb=0;}
goto loop;
}
|
يمكنك تجاوز هذه الصعوبة بإضافة متغير تسميه ما تشاء (مثال: flag) وبه تتحكم في تنفيذ تعليمات الجملة الشرطية
والتي تتضمن الكود الذي كنت تريد تنفيذه بواسطة الحلقة q1 .
هذا مثال بسيط يوضح الفكرة:
كود:
char flag = 0;
void main()
{
cmcon = 7;
porta = 0;
trisa.f0 = 1; trisa.f1 = 1;
trisb = 0; portb = 0;
while (1)
{
if (porta.f0 == 1)
{ delay_ms(100); flag = 1;}
if (flag == 1)
{ portb = 255; delay_ms(300); portb = 0; delay_ms(300);}
if (porta.f1 == 1)
{ delay_ms(100); flag = 0; portb = 0;}
}
}
و إذا لم يظهر الكود على جهازك ، هذه صورة له :
ملحوظة:
اضفت التعليمة :
لانني اشتغلت (في برتوس) على المتحكم Pic16F628A.
عملها كما هو معروف : برمجة مداخل PortA كدخول ديجال مناسبة للتطبيق.