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

   

الصورة الرمزية ahmad72
ahmad72
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2004
المشاركات: 723
نشاط [ ahmad72 ]
قوة السمعة:
قديم 23-12-2009, 01:21 AM المشاركة 25   
sun



السلام عليكم ورحمه الله وبركاته
عزرا على التاخير
الاجابه الاولى
كود:
void flash(int ah)
{portb=15;delay_ms(200);
portb=ah;delay_ms(200);
portb=15;delay_ms(200);
portb=ah;
}
//*****************************************
void main(){
trisa.f0=1;trisa.f1=1;
trisa.f2=1;trisa.f3=1;
trisb=0;

 //*****************************************
loop:
if(porta.f0==0){portb++;if(portb>9)portb=0;
while(porta.f0==0){}}
if(porta.f1==0){flash(portb);
while(porta.f1==0){}}

if(porta.f2==0){if(portb==0)portb=10;portb--;
flash(portb);while(porta.f2==0){}}

if(porta.f3==0){portb=0;flash(portb);
while(porta.f3==0){}}
goto loop;
}

اعلانات

الصورة الرمزية ahmad72
ahmad72
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2004
المشاركات: 723
نشاط [ ahmad72 ]
قوة السمعة:
قديم 23-12-2009, 01:25 AM المشاركة 26   
sun


السلام عليكم ورحمه الله وبركاته
الاجابه الثانيه
كود:
void flash(int ah)
{portb=15;delay_ms(300);
portb=ah;delay_ms(300);
portb=15;delay_ms(300);
portb=ah;
}
void main(){
trisa.f0=1;trisa.f1=1;
trisa.f2=1;trisa.f3=1;
trisb=0;
portb=0;
 //*************************************************
loop:
if(porta.f0==0){portb++;if(portb>9)
portb=0;delay_ms(200);}
//***************************************************
if(porta.f1==0){flash(portb);delay_ms(200);}
//***************************************************
if(porta.f2==0){if(portb==0)portb=10;portb--;
flash(portb);delay_ms(200);}
//***************************************************
if(porta.f3==0){portb=0;flash(portb);
delay_ms(200);}
goto loop;
}

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

الصورة الرمزية ahmad72
ahmad72
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2004
المشاركات: 723
نشاط [ ahmad72 ]
قوة السمعة:
قديم 23-12-2009, 01:29 AM المشاركة 27   
sun


السلام عليكم ورحمه الله وبركاته
الاجابه الثالثه
كود:
void ah()
{portb=~portb;delay_ms(300);
portb=~portb*2;delay_ms(300);
}
int i;
void main()
{trisb=0;
for(;;)
{portb=1;delay_ms(300);
for(i=0;i<8;i++)
ah();
}}


الصورة الرمزية ahmad_s_f
ahmad_s_f
:: المهندس/ أحمد سمير فايد ::
تاريخ التسجيل: Jun 2006
الدولة: سائح في ارض الله
المشاركات: 632
نشاط [ ahmad_s_f ]
قوة السمعة:
قديم 23-12-2009, 05:47 AM المشاركة 28   
افتراضي


طيب . ما توصلنا له انا والاخ فادي هو تجزئة الوقت الى اجزاء صغيرة كان تكون ثانية واحد و كتابة عبارة التاخير delay داخل عداد و عند الضغط على المفتاح يتم زيادة القيمة للقصوى للعداد و اذا تم الضغط على المفتاح الثاني يتم انقاص القيمة القصوى للعداد . هل هذه الفكرة صحيحة ؟
لقد اقتربتم جدا من الحل الصحيح الذي اقصده ..

المشكلة في الكود انه يحتوي على الأمر
كود:
delay_ms(1000);
فماذا يحدث لو ضغط المستخدم على اي سويتش اثناء تنفيذ الميكروكنترولر للأمر السابق .. بالطبع لن يستجيب

إذن علينا التخلص من هذا الأمر واستبداله بدالة تقوم بعملية الانتظار وفي نفس الوقت تقوم بعملية اختبار السويتشات sacanning switches

مثال :

لو كان لدينا سويت a0 و a1 وكنا نريد عمل انتظار لمدة خمس ثواني
ولكن اثناء وقت الانتظار لو تم الضغط على a0 يتم تنفيذ حدث معين
ولو تم الضغط على a1 اثناء وقت الانتظار يتم تنفيذ حدث آخر معين

إذن سنستبدل الأمر
كود:
delay_ms(5000);
بمجموعة أوامر أو بدالة أخرى عبارة عن مجموعة أوامر
كود:
delay_5_and_scan();
وتكون الدالة معرفة كما يلي
كود:
 void delay_5_and_scan()
{
int kk;
for(kk=0;kk<500;kk++)
{
delay_ms(10);
if(pora.f0==0) نفذ حدث معين 
 if(pora.f0==0)  نفذ حدث آخر
}

}
هل لاحظت الفكرة وهي تجزيء الوقت فبدلا من انتظار خمس ثواني سننتظر 10 ملي ثانية وبتكرار هذه العملية خمسمائة مرة نحصل على خمس ثواني
طبعا الوقت 10 ملي ثانية هذا صغير جدا وضغطة السويتش أقل ضغطة لها زمن ربما يقترب من المئة ملي ثانية .
إذن في اي لحظة نضغط فيها على السويتش سيستجيب الميكروكنترولر .

ربما تقول ولكن ماذا اذا كان الميكروكنترولر ينفذ امر آخر غير امر التاخير . اقول ان اي أمر آخر لن يستغرق تنفيذه الملي ثانية فهو اقل من ذلك بكثير( غالبا) وبالتالي سينفذه الميكروكنترولر بسرعة وينتقل للأمر التالي وهكذا إلى ان يصل للأمر الذي يختبر السويتشات .

ارجو ان تكون هذه الفكرة البرمجية المهمة فهي لا تقدر بثمن ولم أجدها في أي كتاب او مرجع علمي .

فأرجو أن تكون قد وصلت وتم فهمها من الجميع

تمنياتي لكم بمزيد من الاحترافية في هذا المجال وبكل التميز .

وغفر الله لنا ولكم ,

(اللهم لا تبعد عنا اناسا بعدما أحببناهم , , وعجل بنصرك وتاييدك وأبهج قلوبنا برؤيتهم والحديث معهم)


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 23-12-2009, 06:00 AM المشاركة 29   
افتراضي


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


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 23-12-2009, 01:14 PM المشاركة 30   
افتراضي


السؤال الرابع :
شغال 100%

كود:
int i=0,k=0; void delay_scan() {k=6000; for(i=0;i<k;i++) {delay_ms(10); if(porta.f0==0){k=k+500;if(k>8000)k=8000;} if(porta.f1==0){k=k-500;if(k<4000)k=4000;} while(porta.f0==0 || porta.f1==0){} }} void main() {trisa.f0=1;trisa.f1=1;trisb=0; loop: portb=0b00010110; delay_scan(); portb=0b00011001; delay_scan(); portb=0b00100101; delay_scan(); goto loop; }
ملفات المشروع


التعديل الأخير تم بواسطة : حيدر علاج حسن بتاريخ 23-12-2009 الساعة 04:19 PM

الصورة الرمزية ahmad_s_f
ahmad_s_f
:: المهندس/ أحمد سمير فايد ::
تاريخ التسجيل: Jun 2006
الدولة: سائح في ارض الله
المشاركات: 632
نشاط [ ahmad_s_f ]
قوة السمعة:
قديم 24-12-2009, 01:43 AM المشاركة 31   
افتراضي


نعم للروعة أخي حيدر ............... بارك الله فيك وفي جميع الاخوة .

وفقكم الله جميعا


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 24-12-2009, 02:16 AM المشاركة 32   
افتراضي


شكرا لك يا استاذ احمد على جهودك التي تبذلها معنا .



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