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

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

zoro238
:: مهندس جيد ::
تاريخ التسجيل: Apr 2006
المشاركات: 290
نشاط [ zoro238 ]
قوة السمعة:0
قديم 21-04-2012, 11:19 AM المشاركة 1   
افتراضي سؤال مبتدئ Twitter FaceBook Google+



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

الكل سيقول

if (portd==8)
portd=4;

انا جربت ذلك لكن لايعمل ولاادري لماذا

علما بانني لو عملت
portd=4;

القيمة تسند وتنفذ تمام

لكن لو كانت عبر شرط لاينفذ

فما العمل ..

اعلانات

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:394
قديم 21-04-2012, 01:21 PM المشاركة 2   
افتراضي


اعطنا الكود كاملا ......

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

الصورة الرمزية محمد50
محمد50
:: عضو فضي ::
تاريخ التسجيل: Mar 2006
المشاركات: 447
نشاط [ محمد50 ]
قوة السمعة:90
قديم 21-04-2012, 01:29 PM المشاركة 3   
افتراضي


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

الكل سيقول

if (portd==8)
portd=4;

انا جربت ذلك لكن لايعمل ولاادري لماذا

علما بانني لو عملت
portd=4;

القيمة تسند وتنفذ تمام

لكن لو كانت عبر شرط لاينفذ

فما العمل ..
اسند القيمة لسجل ثم افحص السجل


zoro238
:: مهندس جيد ::
تاريخ التسجيل: Apr 2006
المشاركات: 290
نشاط [ zoro238 ]
قوة السمعة:0
قديم 22-04-2012, 07:20 AM المشاركة 4   
افتراضي


اسند القيمة لسجل ثم افحص السجل
ممكن مثال لو امكن يامحمد

كود:
                    
if(portd==8)
portd=4;
else
if (portd==2)
portd=10;
else
if(portd==3)
portd=15;
else
if (portd==1)
portd++;


التعديل الأخير تم بواسطة : zoro238 بتاريخ 22-04-2012 الساعة 07:24 AM

الصورة الرمزية باسم ماجد
باسم ماجد
:: مهندس متميز ::
تاريخ التسجيل: Jan 2009
الدولة: Amman-Jordan
المشاركات: 326
نشاط [ باسم ماجد ]
قوة السمعة:0
قديم 22-04-2012, 08:40 AM المشاركة 5   
افتراضي


اخي الكريم يجب تحديد ما هية القيمة أو الإشارة هل هي ديجتال رقمية أي +5 فولت أو -5 فولت / High or LOW / واحد منطقي أو صفر منطقي في هذه الحالة يكون الأمر :كمثال
if(porta.f0==0) iiiiiiiiiiiiiii
portb=0xff;iiiiiiiiiiiiiiiiiiiiiii
بعد إشارة ==1 أو 0 و غير ذلك يعتبره الميكرو خطأ أو لا يفهمه لأنه تم تحديده مسبقا" أن porta مثلا" دخل فيكون أما 1 أو 0
هذا في حالة السويتشات
أما إذا كنت تقصد الحصول على إشارة من خارج الميكروكنترولر و مقارنتها و بناءاً على ذلك تحديد وظيفة معينة لينفذها الميكرو هنا تحتاج أن تكون الإشارة تماثلية (تناظرية) بمعنى أخر أنت هنا تتكلم عن SENOR ، مجس ، مستشعر
و لتنفيذ ذلك يوجد في بعض الميكروكنترولرات و خاصةً الحديثة هذه الخاصية حيث يوجد أطراف أو بورت ممكن أن تستخدمها كدخل انالوج ........
هنا مشاركة للأخ حيدر علاج حسن يوضح مثال لإشارة أنالوج و مقارنتها بقيمة معينة ....
هل هذا ما تريده ؟ إذا كان لديك اي استفسار لا تتردد فالجميع في القرية اخوة فلن يبخل أحد في الرد عليك
تمنياتي لك بالتوفي ق


التعديل الأخير تم بواسطة : باسم ماجد بتاريخ 22-04-2012 الساعة 08:52 AM

Imozar
:: مهندس متميز ::
تاريخ التسجيل: Dec 2011
المشاركات: 318
نشاط [ Imozar ]
قوة السمعة:0
قديم 22-04-2012, 10:02 AM المشاركة 6   
افتراضي


ربما المشكل في ذلك الكود ، أنك تطلب من الكومبيلر ان يتعامل مع PORTD على أنه دخل وفي نفس الوقت تريد منه ان يتحول الى خرج ، دون ان تحدد له ذلك بالموجه TRIS.


zoro238
:: مهندس جيد ::
تاريخ التسجيل: Apr 2006
المشاركات: 290
نشاط [ zoro238 ]
قوة السمعة:0
قديم 22-04-2012, 11:08 AM المشاركة 7   
افتراضي


اخي الكريم يجب تحديد ما هية القيمة أو الإشارة هل هي ديجتال رقمية أي +5 فولت أو -5 فولت / High or LOW / واحد منطقي أو صفر منطقي في هذه الحالة يكون الأمر :كمثال
if(porta.f0==0) iiiiiiiiiiiiiii
portb=0xff;iiiiiiiiiiiiiiiiiiiiiii
بعد إشارة ==1 أو 0 و غير ذلك يعتبره الميكرو خطأ أو لا يفهمه لأنه تم تحديده مسبقا" أن porta مثلا" دخل فيكون أما 1 أو 0
هذا في حالة السويتشات
أما إذا كنت تقصد الحصول على إشارة من خارج الميكروكنترولر و مقارنتها و بناءاً على ذلك تحديد وظيفة معينة لينفذها الميكرو هنا تحتاج أن تكون الإشارة تماثلية (تناظرية) بمعنى أخر أنت هنا تتكلم عن SENOR ، مجس ، مستشعر
و لتنفيذ ذلك يوجد في بعض الميكروكنترولرات و خاصةً الحديثة هذه الخاصية حيث يوجد أطراف أو بورت ممكن أن تستخدمها كدخل انالوج ........
هنا مشاركة للأخ حيدر علاج حسن يوضح مثال لإشارة أنالوج و مقارنتها بقيمة معينة ....
هل هذا ما تريده ؟ إذا كان لديك اي استفسار لا تتردد فالجميع في القرية اخوة فلن يبخل أحد في الرد عليك
تمنياتي لك بالتوفي ق

مشكور اخي على الرد وجزاك الله الف خير على التفاعل

البورت دي ليس له علاقة باي حساس او شئ من هذا القبيل

البورت دي هو مربط بلمبات والقيمة التى ارسلها الى البورت دي حتى تعمل اللمبات بحسب القيم التى ارسلها لها ..

فعندما ارسلت القيمة 8 عملت الرجل f3 والبقية طافية وكان كل شئ تمام

لكن عندما اريد ان اتاكد من القيمة لايعمل الشرط نهائي ..

انا عملت طريقة اخرى

if(portd.f3==1)
portd=5;
else
portd=10;

لكن انا تفاجاءت بانة نفذ portd=10 وهي غريبة بالمرة حسث ان القيمة 8 تساوي 1000 وبالتالي المفترض ان الشرط صحيح ولاادري سبب هذا ؟؟؟؟؟؟؟

علما بان الميكرو 16f877 ..

ربما المشكل في ذلك الكود ، أنك تطلب من الكومبيلر ان يتعامل مع PORTD على أنه دخل وفي نفس الوقت تريد منه ان يتحول الى خرج ، دون ان تحدد له ذلك بالموجه TRIS.
هو انا عامل خرج وهو ينفذ كل التعليمات كاخرج بشكل طبيعي المشكلة فقط في التاكد من قيمة البورت دي فقط ..
وهذا الامر في دالة المين
trisd=0; portd=0;


التعديل الأخير تم بواسطة : zoro238 بتاريخ 22-04-2012 الساعة 11:12 AM

Imozar
:: مهندس متميز ::
تاريخ التسجيل: Dec 2011
المشاركات: 318
نشاط [ Imozar ]
قوة السمعة:0
قديم 22-04-2012, 11:41 AM المشاركة 8   
Smile


حاول تفكر في ما قلت لك وإن شاء الله يكون بداية الحل .

إضافة رد

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

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

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


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

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