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

   

جني الكترونيت
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2009
الدولة: Tunisia
المشاركات: 122
نشاط [ جني الكترونيت ]
قوة السمعة:
قديم 22-02-2010, 10:26 PM المشاركة 25   
افتراضي



lممكن تفسير دقيق للكود

و شكرا على مشاركتك

اعلانات

lahoioui
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 177
نشاط [ lahoioui ]
قوة السمعة:
قديم 23-02-2010, 04:43 PM المشاركة 26   
افتراضي


[QUOTE=lahoioui;360083]هذا الامر بسيط للغاية أعمل هكذا
dd : while(porta.f0){------------------------------------------------0
delay_ms(1000);---------------------------------------------------0
if(!porta.f0){portb.f0=1;goto dd;}--------------------------0
delay_ms(1000);---------------------------------------------------0
if(!porta.f0){portb.f1=1;goto dd;}---------------------------0
delay_ms(1000);---------------------------------------------------0
if(!porta.f0){portb.f2=1;goto dd;}---------------------------0
delay_ms(1000);---------------------------------------------------0
if(!porta.f0)portb.f3=1;}--------------------------------------0]

معروف أن جملة while هي اداة شرطية تنفذ مابين الحاضنتين { } اذا تحقق مابين القوسين ( )
وهي تعمل بشكل منطقي أي صحيح أو خطأ فهي تعتبر أي قيمة مختلفة عن 0 شرط محقق
قبل بداية عمل المذبذب فان قيمة porta.f0 هي 0
هنا نقصد بال f0 الرجل رقم 0 و f1 مثلا هي الرجل رقم 1 وهكذا
قلنا قبل أن يبدأ المذبذب فان قيمة porta.f0 هي 0 أي porta.f0=0
وبالتالي الشرط غير محقق فلن ينفذ ال pic أي شيئ
الان لما يبدأ المذبذب وفي النصف الاول من طول الموجة سوف تكون قيمة
porta.f0=1 هنا الشرط تحقق وسوف يبدأ ال pic في تنفيذ التعليمات الموجودة
داخل الحاضنتين
فما علينا هنا سوى أن نقيس طول نصف الموجة الموجب ( هنا سوف نضيف تعليمة
أخرى لمعالجة قضية التكرار سنرى ذلك اذا مشى معك الحال )
لتفادي هذا المشكل من الأحسن أن تأخذ برأي الأخ زكي شاكر وتجعل
المذبذب monostable
فال monostable يعمل بالطريقة التالية
عند لمس الرجل رقم 2 من ne555 بالأرضي la mass فان الرجل رقم 3 من ne555
تخرج ضغط التغذية ناقص 1 أي اذا كانت الغذية 5v مثلا فسوف نجد في الرجل رقم
3 من من ne555 فيها 4v وسوف يدوم هذا الضغط لفترة نحددها بواسطة
المكثف والمقاومة ثم ينهار الى 0v ولن يرتفع مرة أخرى الا اذا كررنا العملية
أما المذبذب وهو الذي وضعته أنت فسوف يبقى يذبذب مادمت ضاغطا على الزر
طبعا طريقتك مفيدة في السرعة
ماعينا لنرجع الى فلمنا قلنا لنقيس نصف الموجة هنا لانعني قياس بمعنا قياس
ولكن نريد أن نعرف متى تتغير قطبية نصف الموجة
نعمل تأخير ب 1s أي delay_ms(1000)---0 ثما نرى هل تغيرت نصف الموجة الى 0
أو لا فاذا تغيرت فهذا يعني أن طول الموجة هو 2s وبالتالى الزر رقم 1 هو من ضغط
فنغير الرجل المناسبة لل LED1 ونخرج من الدالة الشرطية ب goto
هنا طبعا سوف تبقى ال 1 LED مشتعلة
( اذا أردت من ال LED أن تشتعل بضغطة زر و تنطفئ بضغطة ثانية غير التعليمة
portb.f0=1 ب portb.f0=~portb.f0
ان porta.f0! تعني ببساطة porta.f0=0

اذا وجدنا أن نصف الموجة لم يغير القطبية أي بقي hight نضيف 1s أخرى
ونرى هل تغيرت قطبية نصف طول الموجة هذا طبعا بواسطة if(!porta.f0)-----0
اذا تغيرت فهذا يعني أن الزر رقم 2 هو من ضغط فنشعل ال LED2
وهكذا.......

ملاحظة :ان 0----------- لا تعني شيئ فهي لتسهيل الكتابة فقط .


التعديل الأخير تم بواسطة : lahoioui بتاريخ 23-02-2010 الساعة 06:15 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )


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