اطلاعیه

Collapse
No announcement yet.

مشکل دستور زیر در زبان c

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل دستور زیر در زبان c

    مدتها با بیسیک کار کردم حالا سوئیچ کردم رو c
    میدونم سوالم خیلی مبتدیانه است
    با فشار هر بار یک کلید می خواهیم حالت یک led عوض بشه
    اما نمیدونم چرا یکبار بیشتر اجرا نمیشه :eek:
    به نظر شما مشکل از کجاست ؟
    کد:
    while (1)
       {
       //lable:
       if (PINB.0==0){
       PINC.0=0;
       }
       }
    مردود شدن بهتر از با تقلب قبول شدن است

    #2
    پاسخ : مشکل دستور زیر در زبان c

    چون خروجی رو فقط گفتین صفر بشه نه اینکه با فشار بعدی دوباره به یک تغییر وضعیت بده.

    PINC.0=! PINC.0 رو به جای شرط داخل if بزاری درست میشه.

    البته باید یک خط هم به این صورت اضافه کنی :
    while(PINB.0==0)

    چرا ناراحتی پاتریک!
    + امروز ی بچه دیدم سرچهارراه گل میفروخت
    - از دیدنش ناراحت شدی؟
    + نه
    پس چی ناراحتت کرده
    + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
    ------------------------------------------------------------------------------------------------------
    تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
    ------------------------------------------------------------------------------------------------------
    محصولات

    دیدگاه


      #3
      پاسخ : مشکل دستور زیر در زبان c

      با عجله نوشتم
      کد اولیه اشتباه بود
      کدی که نوشته بودم اینطوریه
      کد:
      while (1)
         {
         if (PINB.0==0){
         PINC.0=!PINC.0;
         }
         }
      الان ایرادش چیه ؟
      مردود شدن بهتر از با تقلب قبول شدن است

      دیدگاه


        #4
        پاسخ : مشکل دستور زیر در زبان c

        نوشته اصلی توسط masoud58
        با عجله نوشتم
        کد اولیه اشتباه بود
        کدی که نوشته بودم اینطوریه
        کد:
        while (1)
           {
           if (PINB.0==0){
           PINC.0=!PINC.0;
           }
           }
        الان ایرادش چیه ؟

        کد:
         while(1)
         { 
          if(PINB.0==0)
          {
          PORTC.0=!PORTC.0;
          while(PINB.0==0);
          }
         }

        دیدگاه


          #5
          پاسخ : مشکل دستور زیر در زبان c

          نوشته اصلی توسط masoud58
          با عجله نوشتم
          کد اولیه اشتباه بود
          کدی که نوشته بودم اینطوریه
          کد:
          while (1)
             {
             if (PINB.0==0){
             PINC.0=!PINC.0;
             }
             }
          الان ایرادش چیه ؟
          چرا به جای این همه سطر یه toggle مینوشتی و خلاص البته من c بلد نیستم(ولی همین ماه میخوام یاد بگیرم)
          از دو چیز بسیار زیاد یاد گرفتم (1) نمونه مدارهای موجود در سایت های خارجی (2) مهندسی معکوس بردهای غیر ایرانی. به نقل از آقای مرتضی امانی
          --------------------------------------------------------
          تمام دنیا ما را تحریم کرده اند؛ حداقل خودمان همدیگر را تحریم نکنیم. به نقل از pencil
          --------------------------------------------------------
          اشک هایی که پس از هر شکست ریخته میشوند همان عرق هاییست که برای پیروزی ریخته نشده است. mehran901

          دیدگاه


            #6
            پاسخ : مشکل دستور زیر در زبان c

            نوشته اصلی توسط moghani1376
            چرا به جای این همه سطر یه toggle مینوشتی و خلاص البته من c بلد نیستم(وای همین ماه میخوام یاد بگیرم)
            این همه خط نمیشه که
            چون سوئیچ می خواست یه دستور شرطه که اینم توی بسکام هست و یه شرط برای قطعیت برداشته شدن کلید،معکوس کردن وضعیت پین هم که تو هر دو یکیه

            من هم اول با بیسیک کار میکردم،بعد عوض کردم

            تفاوت این دوتا زبان تو این موارد نیست،توی موارد دیگست،البته به نظر من

            دیدگاه


              #7
              پاسخ : مشکل دستور زیر در زبان c

              نوشته اصلی توسط parvar
              این همه خط نمیشه که
              چون سوئیچ می خواست یه دستور شرطه که اینم توی بسکام هست و یه شرط برای قطعیت برداشته شدن کلید،معکوس کردن وضعیت پین هم که تو هر دو یکیه

              من هم اول با بیسیک کار میکردم،بعد عوض کردم

              تفاوت این دوتا زبان تو این موارد نیست،توی موارد دیگست،البته به نظر من
              منظورم اینکه که
              طبق برنامه شما وقتی پین x شما صفر یا یک شد دیگه خط بهدی ننویسید که این پین مساوی فلان
              بنویسید toggle و خلاص
              از دو چیز بسیار زیاد یاد گرفتم (1) نمونه مدارهای موجود در سایت های خارجی (2) مهندسی معکوس بردهای غیر ایرانی. به نقل از آقای مرتضی امانی
              --------------------------------------------------------
              تمام دنیا ما را تحریم کرده اند؛ حداقل خودمان همدیگر را تحریم نکنیم. به نقل از pencil
              --------------------------------------------------------
              اشک هایی که پس از هر شکست ریخته میشوند همان عرق هاییست که برای پیروزی ریخته نشده است. mehran901

              دیدگاه


                #8
                پاسخ : مشکل دستور زیر در زبان c

                نوشته اصلی توسط moghani1376
                منظورم اینکه که
                طبق برنامه شما وقتی پین x شما صفر یا یک شد دیگه خط بهدی ننویسید که این پین مساوی فلان
                بنویسید toggle و خلاص
                آها
                منظورت اینه اینجوری بنویسم
                کد:
                  if(PINB.0==0)PORTC.0=!PORTC.0;
                من چون دستور شرطی دوم هم داشتم یعنی while(PINB.0==0); اینجوری نوشتم،وگرنه اگر اشتباه نکنم همینجوریم میشه نوشت

                کد:
                  if(PINB.0==0)PORTC.0=!PORTC.0;while(PINB.0==0);

                دیدگاه


                  #9
                  پاسخ : مشکل دستور زیر در زبان c

                  نوشته اصلی توسط parvar
                  آها
                  منظورت اینه اینجوری بنویسم
                  کد:
                    if(PINB.0==0)PORTC.0=!PORTC.0;
                  من چون دستور شرطی دوم هم داشتم یعنی while(PINB.0==0); اینجوری نوشتم،وگرنه اگر اشتباه نکنم همینجوریم میشه نوشت

                  کد:
                    if(PINB.0==0)PORTC.0=!PORTC.0;while(PINB.0==0);
                  میبخشید من چون ترک زبانم نمیتونم خوب منظورم رو تو فارسی انتقال بدم
                  از دو چیز بسیار زیاد یاد گرفتم (1) نمونه مدارهای موجود در سایت های خارجی (2) مهندسی معکوس بردهای غیر ایرانی. به نقل از آقای مرتضی امانی
                  --------------------------------------------------------
                  تمام دنیا ما را تحریم کرده اند؛ حداقل خودمان همدیگر را تحریم نکنیم. به نقل از pencil
                  --------------------------------------------------------
                  اشک هایی که پس از هر شکست ریخته میشوند همان عرق هاییست که برای پیروزی ریخته نشده است. mehran901

                  دیدگاه


                    #10
                    پاسخ : مشکل دستور زیر در زبان c

                    نوشته اصلی توسط moghani1376
                    میبخشید من چون ترک زبانم نمیتونم خوب منظورم رو تو فارسی انتقال بدم
                    نه داداش،درست بود،من حواسم نبود

                    دیدگاه


                      #11
                      پاسخ : مشکل دستور زیر در زبان c

                      نوشته اصلی توسط masoud58
                      با عجله نوشتم
                      کد اولیه اشتباه بود
                      کدی که نوشته بودم اینطوریه
                      کد:
                      while (1)
                         {
                         if (PINB.0==0){
                         PINC.0=!PINC.0;
                         }
                         }
                      الان ایرادش چیه ؟
                      این کارو بکن:
                      کد:
                      #include <delay.h>
                      
                      void main(){
                        unsigned int delay = 500;
                        // device initialization
                        DDRB.0 = 0;
                        DDRC.0 = 1;
                      
                        while(1){
                          if(!PINB.0)
                            PORTC.0 = ~PORTC.0;
                          // wait a moment to slow down key pressing
                          delay_ms(delay);
                        }
                      }
                      If the wind will not serve, take to the oars

                      دیدگاه


                        #12
                        پاسخ : مشکل دستور زیر در زبان c



                        کد:
                             while (1){
                             
                              while (PINB.0==0);
                              if(PINB.0==1){ PINC.0= ! PINC.0 ; while (PINB.0==1);}
                             
                              }

                        دیدگاه


                          #13
                          پاسخ : پاسخ : مشکل دستور زیر در زبان c

                          نوشته اصلی توسط ASHIT AXAR
                          این کارو بکن:
                          کد:
                          #include <delay.h>
                          
                          void main(){
                            unsigned int delay = 500;
                            // device initialization
                            DDRB.0 = 0;
                            DDRC.0 = 1;
                          
                            while(1){
                              if(!PINB.0)
                                PORTC.0 = ~PORTC.0;
                              // wait a moment to slow down key pressing
                              delay_ms(delay);
                            }
                          }
                          اینم کار میکنه ولی مشکل تاخیر داره
                          باید مقدار تاخیر چقدر باشه تا هر کسی بتونه با مدار کار کنه؟
                          به نظر من کد قبلی جامع تر هست
                          مردود شدن بهتر از با تقلب قبول شدن است

                          دیدگاه


                            #14
                            پاسخ : پاسخ : مشکل دستور زیر در زبان c

                            نوشته اصلی توسط masoud58
                            اینم کار میکنه ولی مشکل تاخیر داره
                            باید مقدار تاخیر چقدر باشه تا هر کسی بتونه با مدار کار کنه؟
                            به نظر من کد قبلی جامع تر هست
                            می تونی مقدار تاخیر رو کمتر کنی اگه احساس میکنی زیاده

                            یا اینکه بدون درنگ:
                            کد:
                            #define LED PORTC.0
                            
                            void main(){
                              unsigned char button_cache = 0;
                              unsigned char button = 0;
                              // device initialization
                              DDRB.0 = 0;
                              DDRC.0 = 1;
                            
                              while(1){
                                button = PINB.0;
                                if(!button){
                                  if(button != button_cache){
                                    button_cache = button;
                                    // kelid feshorde shodeh ast (bedune tekrar)
                                    LED = ~LED;
                                  }
                                }
                                else
                                  button_cache = 1;        
                              }
                            }
                            If the wind will not serve, take to the oars

                            دیدگاه


                              #15
                              پاسخ : مشکل دستور زیر در زبان c

                              اون برنامه ای که من نوشتم با لبه بالا رونده کار میکنه

                              اگه میخوای با لبه پایین رونده باشه


                              کد:
                                   while (1){
                                   
                                    while ( PINB.0);
                                    if(! PINB.0){ PINC.0= ! PINC.0 ; while (! PINB.0);}
                                   
                                    }

                              دیدگاه

                              لطفا صبر کنید...
                              X