السلام عليكم ايها الاحبة في الله
عندي مشكلة مع do while وهي وقد جربت جميع الحلول الممكنة التي اعرفها ولاكن دون جدوى فاردت ان اطرح مشكلتي هنا علني اجد ضالتي...طيب الفكرة هي كالاتي:
int x=0,m=0,k=0;
void one(){
for(m=0;m<=100;m++){
delay_ms(1);
if(portb.f7==1)break;}
}
void main(){
trisa=0xff;
trisb=0;
portb=0;
while(1){
m1: if(porta.f0==0)m2:
do{
{ portb.f0=1;one();portb.f0=0;one(); }
if(porta.f2==0){portb.f7=1;}
if(portb.f7){x++;delay_ms(1);}
if(x>5000){portb.f7=0;x=0; }
if(porta.f3==0){portb.f7=1;}
if(porta.f1==0){portb.f7=0;}
}
while(porta.f1=1);
if(porta.f1==0)
{m++;delay_ms(1);if(m>5000&&porta.f3==0)goto m1; m=0; }
if(portb.f1==0){ k++;delay_ms(1);if(k>5000&&porta.f3==1)goto m2;}
}
}
لكي نفهم الكود لابد من شرح وبكل بساطة الشرح كلاتي
انا عندي اربعة مفاتيح سويتش على البورتA و2ليد على البورتB واحد على RB0 واليد الاخر على RB7 اما في مايخص المفاتيح المفتاح الاول وهو RA0 وهو المسول على تشغيل البيك يعني هو الSTART عند الضغط عليه اليد الموجود على بورتRB0 يعمل فلاشر مستمر في هذه الاثناء عند الضغط على RA2 اوRA3 يشغل اليد الموجود على بورت RB7 لمدة 5 ثواني ثم ينطفئ مع مراعات ان اليد الموجود علىRB0 يبقى على حاله يشتعل ثم ينطفئ باستمرار بقي مفتاح واحد وهو RA1 . وهو مفتاح الOFF الذي ينهي عمل اليد على البورت RB0 وRB7 وينتضر حتي يتم الضغط على RA0 ليكرر العملية من جديد .المطلوب وبالتحديد هوعندما اصل البيك بالكهرباء ينتضر لايفعل اي شيئ اي ان المفاتيح الاخرى لاتستجيب الا ادا تم الضغط على الRA0 ليبدا اليد الذي هو على RB0 بالوميض المستمر معلنا على بداية العملية في هذه الاثناء عند الضغط على الRA2 اوRA3 يعمل اليد الذي هو علىRB7 لمدة 5 ثواني ثم ينطفئ لوحده ويبقى اليد الاحر يومض وتتكرر نفس العملية حتى يتم الضغط على الRA1 و هو عبارة على مفتاحOFF اذا تم الضغط عليه في اي لحظة PORTB .F0=0...PORTB.F7=0 في هذه الاثناءاذا تم الضغط على RA1 وتم اطفاء جميع الليدات التي هي على بورتRB0 وRB7 يبدء البيك بالعد لمدة 30 ثانية طالما PORTA.F3==1 اذا انتهت هده المدة يذهب البيك ليكرر العملية من البداية يعمل فلاشر .ويراقب هل تم الضغط على المفاتيح ليطبق ما سلف ذكره اما اذا تم الضغط على الRA1 بطبيعة الحال هنا يبدا العد لل 30 ثانية في هذا الوقت وقبل انقضائه ادا تم الضغط على RA3 اي PORTA.F3==0 ينتقل البيك الى بداية البرنامج من الاول وينتضر الضغط على الRA0 ليكرر العملية من جديد.
ارجو المساعدة من الاخوة الافاضل وشكرا جزيلا.