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

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

الصورة الرمزية قطر الندى 89
قطر الندى 89
:: مهندس متميز ::
تاريخ التسجيل: Aug 2013
الدولة: IRAQ
المشاركات: 335
نشاط [ قطر الندى 89 ]
قوة السمعة:0
قديم 16-12-2014, 09:35 AM المشاركة 1   
افتراضي الرجاء المساعدة Twitter FaceBook Google+



ماهو الخطأ في هذا الكود

كود:
void main()
{char ah=0;
portb=0;
trisb=0;
trisa.f0=1;

while(1)
        { if(porta.f0==1) {ah++;  delay_ms(1000); }
        if(porta.f0==1)   portb=0b00000001; delay_ms(250);
        if(porta.f0==2)   portb=0b00000010; delay_ms(250);
        if(porta.f0==3)   portb=0b00000100; delay_ms(250);
        
        }

}

فالمفروض عند الضغط على السويتش يعمل الليد في بورت0 وعند الضغط ثانية يعمل الليد في البورت 1 وعند الضغط مرة اخرى يعمل الليد في البورت 3 ولكن لايعمل الكود بصورة صحيحة كذلك الليد في البورت1 يعمل حتى في حلة الضغط عدم الضغط على السويتس


اعلانات

الصورة الرمزية assed
assed
:: عضو فضي ::
تاريخ التسجيل: Jul 2014
الدولة: العراق - بغداد
المشاركات: 1,036
نشاط [ assed ]
قوة السمعة:96
قديم 16-12-2014, 10:47 AM المشاركة 2   
افتراضي


ماهو الخطأ في هذا الكود

كود:
void main()
{char ah=0;
portb=0;
trisb=0;
trisa.f0=1;

while(1)
        { if(porta.f0==1) {ah++;  delay_ms(1000); }
        if(porta.f0==1)   portb=0b00000001; delay_ms(250);
        if(porta.f0==2)   portb=0b00000010; delay_ms(250);
        if(porta.f0==3)   portb=0b00000100; delay_ms(250);
        
        }

}

فالمفروض عند الضغط على السويتش يعمل الليد في بورت0 وعند الضغط ثانية يعمل الليد في البورت 1 وعند الضغط مرة اخرى يعمل الليد في البورت 3 ولكن لايعمل الكود بصورة صحيحة كذلك الليد في البورت1 يعمل حتى في حلة الضغط عدم الضغط على السويتس

السلام عليكم
أنا ضعيف بلغة المايكروسي ولاكن عندي خبرة كافية بلغة البروتون بيسك بأمكاني اعملك نفس الكود

اما الكود الي انت عامله اعتقد في نقص يجب ان يكون هنالك متغير ..كان يكون عداد عند الضغط على السويج
اي عند الضغط ضغطة واحدة يكون المتغير متلاً 1
والضغطة الثانية يكون 2 وهكذا
عندها يكتب البرنامج
if(new==1) portb=0b00000001; delay_ms(250);
new هوة المتغير
والله اعلم
واذا تحب اعملك الكود بلغة البروتون انا حاضر

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

الصورة الرمزية قطر الندى 89
قطر الندى 89
:: مهندس متميز ::
تاريخ التسجيل: Aug 2013
الدولة: IRAQ
المشاركات: 335
نشاط [ قطر الندى 89 ]
قوة السمعة:0
قديم 16-12-2014, 11:23 AM المشاركة 3   
افتراضي


السلام عليكم
أنا ضعيف بلغة المايكروسي ولاكن عندي خبرة كافية بلغة البروتون بيسك بأمكاني اعملك نفس الكود

اما الكود الي انت عامله اعتقد في نقص يجب ان يكون هنالك متغير ..كان يكون عداد عند الضغط على السويج
اي عند الضغط ضغطة واحدة يكون المتغير متلاً 1
والضغطة الثانية يكون 2 وهكذا
عندها يكتب البرنامج
if(new==1) portb=0b00000001; delay_ms(250);
new هوة المتغير
والله اعلم
واذا تحب اعملك الكود بلغة البروتون انا حاضر
شكراً جزيلاُ اخي الغالي assed
وجدت المشكلة وهي اضافة cmcon=7; عند استخدام pic16f628a ليكون الكود بهذا الشكل

كود:
#define led1_dir       trisb.f0
#define led2_dir       trisb.f1
#define led3_dir       trisb.f2
#define sw1_dir        porta.f0
#define output         0
#define input          1
#define led1           portb.f0
#define led2           portb.f1
#define led3           portb.f2
#define off            0
#define  on             1
#define  sw1           porta.f0
#define  is           ==
#define zero           0




void main() 
{
char ahmed=0;
cmcon=7;
led1_dir=output;
led2_dir=output;
led3_dir=output;
sw1_dir=input;
led1=led2=led3=off;

while(1)
        {
         if(sw1 is zero){ahmed++; if(ahmed is 4) ahmed=1; delay_ms(100); }
         if(ahmed is 1) {led1=on; led2=off; led3=off; delay_ms(250); }
         if(ahmed is 2) {led2=on; led1=off; led3=off; delay_ms(250);}
         if(ahmed is 3) {led3=on; led1=off; led2=off;delay_ms(250); }

        }

}

احصائية الشكر والاعجاب - 0 شكراً, 0 عدم اعجاب, 1 اعجاب
اعجاب Logic ( أعجبته المشاركة )

الصورة الرمزية assed
assed
:: عضو فضي ::
تاريخ التسجيل: Jul 2014
الدولة: العراق - بغداد
المشاركات: 1,036
نشاط [ assed ]
قوة السمعة:96
قديم 16-12-2014, 02:42 PM المشاركة 4   
افتراضي


شكراً جزيلاُ اخي الغالي assed
وجدت المشكلة وهي اضافة cmcon=7; عند استخدام pic16f628a ليكون الكود بهذا الشكل

كود:
#define led1_dir       trisb.f0
#define led2_dir       trisb.f1
#define led3_dir       trisb.f2
#define sw1_dir        porta.f0
#define output         0
#define input          1
#define led1           portb.f0
#define led2           portb.f1
#define led3           portb.f2
#define off            0
#define  on             1
#define  sw1           porta.f0
#define  is           ==
#define zero           0




void main() 
{
char ahmed=0;
cmcon=7;
led1_dir=output;
led2_dir=output;
led3_dir=output;
sw1_dir=input;
led1=led2=led3=off;

while(1)
        {
         if(sw1 is zero){ahmed++; if(ahmed is 4) ahmed=1; delay_ms(100); }
         if(ahmed is 1) {led1=on; led2=off; led3=off; delay_ms(250); }
         if(ahmed is 2) {led2=on; led1=off; led3=off; delay_ms(250);}
         if(ahmed is 3) {led3=on; led1=off; led2=off;delay_ms(250); }

        }

}
الحمدلله الله يتمم بخير

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً قطر الندى 89 ( شكر العضو على هذه المشاركة )
اعجاب Logic, قطر الندى 89 ( أعجبته المشاركة )

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:394
قديم 16-12-2014, 07:35 PM المشاركة 5   
افتراضي


هذا الكود الصغير يعطيك تحكم كامل في التشغيل وهو متلائم مع طريقة توصيلك للدائرة ...

كود:
void main()
 {cmcon=7;
 trisa=1;porta=0;trisb=0;portb=0;
 while(1){
          if(porta){while(porta){}
                       portb=1;
                       while(porta.f0==0){}
                       while(porta){}
                       portb=2;
                       while(porta.f0==0){}
                       while(porta){}
                       portb=4;
                      }
         }

}

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً قطر الندى 89 ( شكر العضو على هذه المشاركة )
اعجاب قطر الندى 89 ( أعجبته المشاركة )
إضافة رد

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

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

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


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

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