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

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

abuislam
:: مهندس ::
تاريخ التسجيل: Apr 2016
المشاركات: 23
نشاط [ abuislam ]
قوة السمعة:0
قديم 08-05-2016, 01:35 AM المشاركة 1   
افتراضي pic 16f877 and button Twitter FaceBook Google+



السلام عليكم

void main() {



trisb.b2=0 ; // rb2 output
trisb.b3=0; // rb3 output
trisb.b4=0; // rb4 output
trisb.b5=0; // rb5 output
trisb.b6=0; // rb6 output
trisb.b7=0; // rb7 output
portb=0; // all pin from portb low

trisc.b2=1; // rc2 input



while(1){

if( portc.f2==0) // if push button
{portb.f2=1; // rb2 high
delay_ms(1000 ); // wait 1000ms
portb.f3=1; // rb3 high
delay_ms(1000 ); // wait 1000ms
portb.f4=1; // rb4 high
delay_ms(1000 ); // wait 1000ms
portb.f5=0; // rb5 low
delay_ms(1000 ); // wait 1000ms
portb.f6=1; // rb6 high
delay_ms(1000 ); // wait 1000ms
portb.f7=1; // rb7 high
delay_ms(1000 ); // wait 1000ms




}
else {
portb.f3=0; // rb3 low
delay_ms(1000 );
portb.f2=0; // rb2 low
delay_ms(1000 );
portb.f4=0; // rb4 high

}
}
}

الاوامر تنفد بمجرد الضغط على البوتون.

ما اريد تجربته هو اني ادا بقيت ضاغط على button ينفد البيك الاوامر بعد while .
و ادا تركت button ينفد الاوامر بعد else ,

وجزيل الشكر

اعلانات

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 08-05-2016, 03:09 AM المشاركة 2   
افتراضي


السلام عليكم

void main() {



trisb.b2=0 ; // rb2 output
trisb.b3=0; // rb3 output
trisb.b4=0; // rb4 output
trisb.b5=0; // rb5 output
trisb.b6=0; // rb6 output
trisb.b7=0; // rb7 output
portb=0; // all pin from portb low

trisc.b2=1; // rc2 input



while(1){

if( portc.f2==0) // if push button
{portb.f2=1; // rb2 high
delay_ms(1000 ); // wait 1000ms
portb.f3=1; // rb3 high
delay_ms(1000 ); // wait 1000ms
portb.f4=1; // rb4 high
delay_ms(1000 ); // wait 1000ms
portb.f5=0; // rb5 low
delay_ms(1000 ); // wait 1000ms
portb.f6=1; // rb6 high
delay_ms(1000 ); // wait 1000ms
portb.f7=1; // rb7 high
delay_ms(1000 ); // wait 1000ms




}
else {
portb.f3=0; // rb3 low
delay_ms(1000 );
portb.f2=0; // rb2 low
delay_ms(1000 );
portb.f4=0; // rb4 high

}
}
}

الاوامر تنفد بمجرد الضغط على البوتون.

ما اريد تجربته هو اني ادا بقيت ضاغط على button ينفد البيك الاوامر بعد while .
و ادا تركت button ينفد الاوامر بعد else ,

وجزيل الشكر
السلام عليكم ورحمه الله ..

أخى الكريم السؤال يحتاج بعض التوضيح !!!
مثلا عند تشعيل البرنامج البك هيدخل يختبر البوتن وايذا كان مضغوط عليه هينفز اﻷوامر داخل حلقة while مباشرة وايذا كان غير مضغوط على البوتن هينفز اﻷوامر خارج حلقه while ..
السؤال هنا؟ هل عند تشغيل البرنامج ﻷول مرة تلبك هيدخل يختبر البوتن على طول وينفذ اﻷوامر حسب حالة البوتن ... ام عند تشغيل البرنامج ﻷول مرة هينتظر البك لحين الضغط على البوتن وبعد ذالك يعيد اختتبار البوتن اذا مضغوط ينفذ اﻷوامر داخل حلقة while وايذا لم يكن مضغوط عليه ينفذ اوامر خارج حلقه while ...

على العموم يمكنك استخدام اوامر التوجيه ... مثل أمر goto loop; وللتوضيح اليك هذ المثال ...

هتعمل حلقتين مت نوع while والحلقه اﻷولى هيكون فيها اﻷوامر التى تنفذ فى حين كان المفتاح مضغوط عليه ...

والحلقه الثانيه يتم وضع اﻷوامر اللتى تنفذ فى حين كان المفتاح غير مضغوط عليه ...

ولكن انت تعلم ان البك لا يمكن أن يخرج من حلقه while ابدااااا ...
ايذا الحل هو وضع امر شرط يختبر المفتاح هل المفتاح مضغوط عليه ايذا نفذ هذة اﻷوامر ... ونضع امر شرط أخر يختبر المفتاح ايذا كان المفتاح غيرمضغوط عليه ايذااا اذهب الى حلقة while الثانيه وهذا هيكون من خلال هذ اﻷمر goto loop; ...

وبنفس الفكرة هتعمل امر يختبر المفتاح هل المفتاح مضغوط عليه ايذا اذهب الى حلقة while اﻷولى وبنفس امر التوجيه هذا goto loop1; لو تلاحظ تم تغير العنوان الثانى فى العبارة اﻷمر اﻷول هو goto loop; واﻷمر الثانى هو goto loop1; لوتلاحظ يوجد فرق بين كلمة loop; انا اسف مش عارف اديلك مثال بالكود ﻷنى بعمل المشاركة دى من الموبايل ...


هحاول اعملك مثال . .

void() main{



while(1){



if(portb.fo==1){ نفذ هذة اﻷوامر }

if(portb.fo==0){ goto loop; }وهذا الشرط يجعل البك يخرج من حلقة while ويذهب الى العنوان loop: وطبعااا هذا العنوان هيتم وضعة فوق حلقة while الثانيه لكى يدخل البك فى داخلها وينفذ ما فيها من اوامر ....

مثل هكذا ..


loop:

while


ونضع اﻷوامر اللتى تنفذ فى حالة عدم الضغك على المفتاح ...


ارجو تكون الفكرة وصلتلك واسف مش عارف اشرح ﻷنى بستخدم الموبايل


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 08-05-2016 الساعة 03:19 AM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

abuislam
:: مهندس ::
تاريخ التسجيل: Apr 2016
المشاركات: 23
نشاط [ abuislam ]
قوة السمعة:0
قديم 08-05-2016, 03:21 AM المشاركة 3   
افتراضي


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

أخى الكريم السؤال يحتاج بعض التوضيح !!!
مثلا عند تشعيل البرنامج البك هيدخل يختبر البوتن وايذا كان مضغوط عليه هينفز اﻷوامر داخل حلقة while مباشرة وايذا كان غير مضغوط على البوتن هينفز اﻷوامر خارج حلقه while ..
السؤال هنا؟ هل عند تشغيل البرنامج ﻷول مرة تلبك هيدخل يختبر البوتن على طول وينفذ اﻷوامر حسب حالة البوتن ... ام عند تشغيل البرنامج ﻷول مرة هينتظر البك لحين الضغط على البوتن وبعد ذالك يعيد اختتبار البوتن اذا مضغوط ينفذ اﻷوامر داخل حلقة while وايذا لم يكن مضغوط عليه ينفذ اوامر خارج حلقه while ...

على العموم يمكنك استخدام اوامر التوجيه ... مثل أمر goto loop; وللتوضيح اليك هذ المثال ...

هتعمل حلقتين مت نوع while والحلقه اﻷولى هيكون فيها اﻷوامر التى تنفذ فى حين كان المفتاح مضغوط عليه ...

والحلقه الثانيه يتم وضع اﻷوامر اللتى تنفذ فى حين كان المفتاح غير مضغوط عليه ...

ولكن انت تعلم ان البك لا يمكن أن يخرج من حلقه while ابدااااا ...
ايذا الحل هو وضع امر شرط يختبر المفتاح هل المفتاح مضغوط عليه ايذا نفذ هذة اﻷوامر ... ونضع امر شرط أخر يختبر المفتاح ايذا كان المفتاح غيرمضغوط عليه ايذااا اذهب الى حلقة while الثانيه وهذا هيكون من خلال هذ اﻷمر goto loop; ...

وبنفس الفكرة هتعمل امر يختبر المفتاح هل المفتاح مضغوط عليه ايذا اذهب الى حلقة while اﻷولى وبنفس امر التوجيه هذا goto loop1; لو تلاحظ تم تغير العنوان الثانى فى العبارة اﻷمر اﻷول هو goto loop; واﻷمر الثانى هو goto loop1; لوتلاحظ يوجد فرق بين كلمة loop; انا اسف مش عارف اديلك مثال بالكود ﻷنى بعمل المشاركة دى من الموبايل ...


هحاول اعملك مثال . .

void() main{




while()
بارك الله فيك على الشرح

(هتعمل حلقتين مت نوع while والحلقه اﻷولى هيكون فيها اﻷوامر التى تنفذ فى حين كان المفتاح مضغوط عليه ...

والحلقه الثانيه يتم وضع اﻷوامر اللتى تنفذ فى حين كان المفتاح غير مضغوط عليه ... )

نعم هو ده الي انا عاوزو.


abuislam
:: مهندس ::
تاريخ التسجيل: Apr 2016
المشاركات: 23
نشاط [ abuislam ]
قوة السمعة:0
قديم 08-05-2016, 03:57 AM المشاركة 4   
افتراضي


void main() {


trisc.b2=1; // rc2 input
trisb.b2=0 ; // rb2 output
trisb.b3=0; // rb3 output
trisb.b4=0; // rb4 output
trisb.b5=0; // rb5 output
trisb.b6=0; // rb6 output
trisb.b7=0; // rb7 output
portb=0; // all pin from portb low





while (1)
{

if( portc.f2==1) // if push button
{portb.f2=1; // rb2 high
delay_ms(1000 ); // wait 1000ms
portb.f3=1; // rb3 high
delay_ms(1000 ); // wait 1000ms
portb.f4=1; // rb4 high
delay_ms(1000 ); // wait 1000ms
portb.f2=0; // rb2 low
delay_ms(1000 ); // wait 1000ms
}

if(portc.f2==0){ goto loop; }

loop:

while(1)
{
portb.f2=1; // rb2 low
delay_ms(1000 );
portb.f5=1; // rb5 high

}



}
}

هكدا اخي الكريم؟


abuislam
:: مهندس ::
تاريخ التسجيل: Apr 2016
المشاركات: 23
نشاط [ abuislam ]
قوة السمعة:0
قديم 08-05-2016, 10:22 PM المشاركة 5   
افتراضي نصيحة


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

لقد سمعت بالقرية الإلكترونية كثيرا . فهي حقيقة بلد وليس قرية . ولكن للأسف تفاجئت أن في هذا البلد الكبير يوجد مهندسون مميزون . لا يستطيعون كتابة كود بسيط جدا . فكيف نريد أن نتفوق على أعدائنا في المجال التقني?

يعني زر واحد و ثلاث لدات . إذا ضغطنا على الزر و بقينا ضاغطين يضيء ا لليد 1 وبعده الليد 2 ثم الليد3 . وإذا تركنا الزر يطفا الليد 2 ثم بعده الليد 1 ثم بعده الليد 3.

كيف سيتعلم المبتدأ اذا لم تساعدوه ??

اقبلوا النصيحة و جزاكم الله خيرا


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 09-05-2016, 06:39 AM المشاركة 6   
افتراضي


اخي ابو اسلام حياك الله ...
فهم السؤال نصف الاجابة وبالاخص في البرمجة لانها تحتاج وصف دقيق و كامل لمجريات الكود ...
لم توضح ماذا يحصل لو تم افلات المفتاح قبل اشتغال كل الليدات ..
عموما انا تصرف بالكود جربه و اعطنا النتيجة اذا فيه اي خطأ .
http://www.mediafire.com/download/32...2/abosalim.rar
ملف المحاكاة يعمل على بروتوس 8.3 فان لم تكن متوفره عندك اعد توصيل الدائرة حسب المخطط المرفق مع الملفات .
واتمنى لك التوفيق ..

حيدر علاج حسن

abuislam
:: مهندس ::
تاريخ التسجيل: Apr 2016
المشاركات: 23
نشاط [ abuislam ]
قوة السمعة:0
قديم 09-05-2016, 08:34 AM المشاركة 7   
افتراضي من لا يشكر الناس لا يشكر الله


[QUOTE=حيدر علاج حسن;1029530]اخي ابو اسلام حياك الله ...
فهم السؤال نصف الاجابة وبالاخص في البرمجة لانها تحتاج وصف دقيق و كامل لمجريات الكود ...
لم توضح ماذا يحصل لو تم افلات المفتاح قبل اشتغال كل الليدات ..
عموما انا تصرف بالكود جربه و اعطنا النتيجة اذا فيه اي خطأ .
http://www.mediafire.com/download/32...2/abosalim.rar
ملف المحاكاة يعمل على بروتوس 8.3 فان لم تكن متوفره عندك اعد توصيل الدائرة حسب المخطط المرفق مع الملفات .
واتمنى لك التوفيق ..[/QUOTE

لقد أعدت توصيل الدائرة و عمل المخطط . أسأل الله أن يبارك فيك و في اهلك ومالك .

لدي بعض الاستفسارات اذا سمحت اخي الكريم


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 09-05-2016, 09:00 AM المشاركة 8   
افتراضي


تفضل اخي ما هو سؤالك

حيدر علاج حسن
إضافة رد

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

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

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


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

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