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

   

walid nadim
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2015
المشاركات: 92
نشاط [ walid nadim ]
قوة السمعة:
قديم 08-01-2018, 01:17 AM المشاركة 9   
افتراضي



char q1=0;
void main{
Trisa = 2;
Trisb = 0;
Portb = 0;

while(1){
if(porta.f0==1) q1 = 1;
else q1=0;

if(porta.f1==1) portb =0;

if(q1==1){
Portb=255;
Delay_ms(300);
Portb=0;
Delay_ms(300);
}
}
}

في هذه الحالة سيقرأ التعليمات واحدة تلو الأخرى و ينفذها اذا تحقق الشرط و لن ينتقل للتعليمة التي بعدها إلا بعد انتهاء تنفيذ التعليمة هو لن يبقى في حلقة لوب لكن لن ينفذ التعليمة القادمة إلا بعد 600 مليثانية

اعلانات

walid nadim
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2015
المشاركات: 92
نشاط [ walid nadim ]
قوة السمعة:
قديم 08-01-2018, 11:07 AM المشاركة 10   
افتراضي


char q1=0;
void main{
Trisa = 2;
Trisb = 0;
Portb = 0;

while(1){
if(porta.f0==1) q1 = 1;
else q1=0;

if(porta.f1==1) portb =0;

if(q1==1){
Portb=255;
Delay_ms(300);
Portb=0;
Delay_ms(300);
}
}
}

في هذه الحالة سيقرأ التعليمات واحدة تلو الأخرى و ينفذها اذا تحقق الشرط و لن ينتقل للتعليمة التي بعدها إلا بعد انتهاء تنفيذ التعليمة هو لن يبقى في حلقة لوب لكن لن ينفذ التعليمة القادمة إلا بعد 600 مليثانية
Trisa تساوي ثلاثة و ليس اثنين

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

محمد إلياس
:: مهندس جيد ::
تاريخ التسجيل: Jan 2017
المشاركات: 229
نشاط [ محمد إلياس ]
قوة السمعة:
قديم 08-01-2018, 02:02 PM المشاركة 11   
افتراضي


السلام عليكم الاخوة الكرام
السؤال هو كيف يمكنني ان اجعل البيك يخرج من الحلقة(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;}
        }
}
و إذا لم يظهر الكود على جهازك ، هذه صورة له :

ملحوظة:
اضفت التعليمة :
كود:
cmcon = 7;
لانني اشتغلت (في برتوس) على المتحكم Pic16F628A.
عملها كما هو معروف : برمجة مداخل PortA كدخول ديجال مناسبة للتطبيق.


خالد راشد
:: مهندس ::
تاريخ التسجيل: Jan 2018
المشاركات: 9
نشاط [ خالد راشد ]
قوة السمعة:
قديم 09-01-2018, 12:00 AM المشاركة 12   
win السلام عليكم


السلام عليكم ورحمة الله
شكرا جزيلا الاخ وليد بارك الله فيك والاخ الياس كدلك عن المساعدة
والاجابة شافية كافية,
كود الاخ وليد استفدت منه المتغيرات
كود الاخ الياس استفدت منه كدالك الا انني لم افهم دور trisa.f0 = 1; trisa.f1 = 1; قبل while ياليتك اخي شرحت لي هده المسألة وشكرا


محمد إلياس
:: مهندس جيد ::
تاريخ التسجيل: Jan 2017
المشاركات: 229
نشاط [ محمد إلياس ]
قوة السمعة:
قديم 09-01-2018, 01:18 AM المشاركة 13   
افتراضي


مبروك أخي ..
بخصوص سؤالك :
انت محتاج طرفين في المنفذ A تعملهما دخلين والبرمجة طبعا بالمسجل trisa.
هنا لديك إمكانيتين.
1- إما تختار هذه الطريقة:
;trisa = 0b00000011
معناه أنك أسندت القيمة 1 لكل من البت الأول والبت الثاني من المسجل TRISA بحيث أن كلا من الطرف RA0 و الطرف RA1 من PORTA سيبرمجان كدخلين والباقي خروج (بسبب إسناد القيمة 0 للبتات الباقية في المسجل TRISA وباسثتناء الطرف RA5 الذي لا يمكن أن يكون إلا دخلا .. هو مصنوع ليكون هكذا) .
2- أو تختار طريقة برمجة فقط الطرفين اللذين أنت بحاجة لهما وهما:
الطرف RA0 الذي يقابله البت trisa.f0 في المسجل TRISA
و الطرف RA1 الذي يقابله البت trisa.f1 في المسجل المذكور


خالد راشد
:: مهندس ::
تاريخ التسجيل: Jan 2018
المشاركات: 9
نشاط [ خالد راشد ]
قوة السمعة:
قديم 11-01-2018, 10:19 PM المشاركة 14   
افتراضي


بارك الله فيك اخي العزيز وكثر الله من امثالك



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