ههههههههههههههههههه شكرا يا اخى
البورت سى يعمل تلقائيا ديجتال
لان به اكثر من كومبرتور ومديول ولتشغيل احدهم عليك بذكر ذللك فى الكود اما فى الوضع الابتدائى فهو يعمل كاطراف ديجتال عادية
والامر ادكون يستعمل للبورت اية فقط
اما موضوع تنفيذ الاوامر ببطء وتشغيل الزرارين مع بعضهم البعض
فهناك اكثر من طريقة
وكلها اتعلمناها من البشمهندس احمد سمير فايد جزاة الله كل الخير
الطريقة الاولى
وهى تنفيذ الاوامر بتاعت الانتظار على فترات بسيطة ومع التكرار فى الاختبارت للزرار
مثال علشان الفهم يوضح ويزيد ان شاء الله
كود:
while(1){
if (portc.f0==0){loop1:portb.f0=1;for (x=0;x<100;x++){if (portc.f1==0){goto loop2;}delay_ms(10);}portb.f0=0;for (x=0;x<100;x++){if (portc.f1==0){goto loop;}}}
if (portc.f1==0){loop2:portb.f0=1;for (x=0;x<300;x++){if (portc.f1==0){goto loop1;}delay_ms(10);}portb.f0=0;for (x=0;x<500;x++){if (portc.f1==0){goto loop1;}delay_ms(10);}}
}
هذا هو نفس الكود بتاعك ولكن بعد التعديل علية لجعله اكثر سرعه فى الاستجابة للزرار
وهى جعل جملة التكرار for تعمل لحسب اوامر الانظار الى انت عايزها يعنى فى المثال انت عايز تنور البورت b رقم صفر لمدة ثانية اى 1000 مللى ثانية
ااقسم الالف على 10 تديك 100 هذا هو عدد التكرار وجعل امر الانتظار 10 مللى ثانية فقط
وعملا الختبار داخل جملة for
يعنى الخلاصة هو بيختبر الزراير كل 10 مللى ثانية وفى نفس الوقت بينتظر ثانية كاملة يعنى كدة قسمنا الثانية وفى كل جزء بنختبر هل تم الضغط على الزرار ام لا
انتظر
هذه الطريقة للتوضيح فقط
وكما ترى هذه الطريقة لسيت عملية ابدا فاذا ذاد عدد الازرار تخيل كم البرمجة الى هتكتبها هههههههه

فى طريقة ثانية
وهى الانتربت او المقاطعه ودى عايزة موضوع للشرح وهتلاقية هنا
http://www.qariya.com/vb/showthread.php?t=46338
ودى عمليا جدااااااا
وفى طرق تانى بس معقدة شوية عن كدة