اطلاعیه

Collapse
No announcement yet.

دستوری که فقط یکبار اجرا شود؟

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

    دستوری که فقط یکبار اجرا شود؟

    سلام
    خسته نباشید من یه برنامه دارم که در زیر اوردمش حالا من می خوام یه دستور بهش اضافه کنم که فقط بعد از اینکه ریست می شه اجرا شه و در حین اجرای برنامه اجرا نشه چی رو باید بهش اضافه کنم؟




    #include <mega16.h>
    #include <delay.h>

    void main(void)
    {
    unsigned char i;
    DDRA=0x00;
    DDRB=0xFF;
    DDRD=0xFF;



    while(1)
    {
    PORTA.0=1;
    if(PINA.0==0)
    {
    PORTD.4=0;
    }
    else
    {
    PORTD.4=1;
    for(i=180; i>=0; i--)
    {
    PORTD.4=1;
    if(PINB.0==1)//this is a off or on for set
    {
    break;
    }

    if(PINB.1==1)//this is a off sound for set
    {
    break;
    }


    delay_ms(34);


    if(i==0)
    {
    break;
    }

    }
    }
    }
    }




    #2
    پاسخ : دستوری که فقط یکبار اجرا شود؟

    میتونی از وقفه ریست استفاده کنی

    دیدگاه


      #3
      پاسخ : دستوری که فقط یکبار اجرا شود؟

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

      دیدگاه


        #4
        پاسخ : دستوری که فقط یکبار اجرا شود؟

        سلام
        کد:
        [left]
        bit flg=0;
        if (flg==0){
        دستورات مورد نظر
        flg=1;
        }
        
        
        [/left]

        دیدگاه


          #5
          پاسخ : دستوری که فقط یکبار اجرا شود؟

          عذر می خوام این flgبر چه اساسی تغییر می کنه؟

          دیدگاه


            #6
            پاسخ : دستوری که فقط یکبار اجرا شود؟

            نوشته اصلی توسط bravehamid
            عذر می خوام این flgبر چه اساسی تغییر می کنه؟
            اگر صفر باشه وارد شرط میشه و دستورات اجرا میشه و در آخر هم یک میشه تا دیگه دستورات اجرا نشه شما هر موقع خواستی که
            دستورات یه دفه اجرا بشن کافیه که flg رو صفر کنی

            دیدگاه


              #7
              پاسخ : دستوری که فقط یکبار اجرا شود؟

              فکر کنم یه سوء تفاهمی پیش اومد
              من می خوام وقتی ریست شد یا می خواست از اول کار کنه فقط سنس اول رو وارد if نشه
              و بقیه اش رو طبق روال بره جلو نه این که کل دستور یکبار انجام بشه

              اضافه شده در تاریخ :
              ببخشیدبرای اینکه بهترمتوجه شید میگم
              دفعه اولی که شرط ifبرقرار بود بهش اهمیت نده بعدش بیاد دوباره ifرو چک کنه

              دیدگاه


                #8
                پاسخ : دستوری که فقط یکبار اجرا شود؟

                نوشته اصلی توسط bravehamid
                ببخشیدبرای اینکه بهترمتوجه شید میگم
                دفعه اولی که شرط ifبرقرار بود بهش اهمیت نده بعدش بیاد دوباره ifرو چک کنه
                کد:
                bit flg=0;
                if (flg==1){
                کد برنامه
                }
                else flg=1;
                این دستور برای دفه اول اجرا نمیشه ولی بعد شروع به اجرای کد ها میکنه فقط باید بعد از اتمام کار flg رو دوباره صفر کنی

                دیدگاه


                  #9
                  پاسخ : دستوری که فقط یکبار اجرا شود؟

                  چه جوری؟

                  دیدگاه


                    #10
                    پاسخ : دستوری که فقط یکبار اجرا شود؟

                    نوشته اصلی توسط bravehamid
                    چه جوری؟
                    این دستور رو مثلا توی وقفه به کار بردی برای دفه اول چون flg صفر هست دستورات داخل if اجرا نمیشند و فقط
                    flg رو برابر 1 قرار میده ولی دفه بعد چون flg مقدار 1 رو داره دستورات اجرا میشن
                    برای این که همیشه این روال وجود داشته باشه شما میتونید داخل شرط آخر سر دوباره flg رو صفر قرار بدید

                    دیدگاه


                      #11
                      پاسخ : دستوری که فقط یکبار اجرا شود؟

                      سلام
                      شما میتونید با بررسی منابع ریست توسط بایت MCUCSR تشخیص بدی external یا watchdog , brown-out , power on بوده
                      جزییات بیشتر رو راجع به این بیت توی گوگل سرچ کن من در همین حد اطلاع داشتم دنبالش نرفتم :smile:
                      حالا چرا ریست میشه این دزدگیرت ؟ کارش چطوریه ؟ :read:
                      موفق باشی

                      دیدگاه


                        #12
                        پاسخ : دستوری که فقط یکبار اجرا شود؟

                        من منظور شما شاید درست نفهمیدم
                        اگر منظور شما این هست که بعد ریت شدن میکرو فقط دستورات اجرا بشن کافیه که دستورات رو داحل تابع main و قبل از while بنویسی
                        که فقط بعد از ریست شدن میکرو اجرا میشن

                        دیدگاه


                          #13
                          پاسخ : دستوری که فقط یکبار اجرا شود؟

                          سلام
                          ببین اگه درست متوجه شده باشم شما می خواین وقتی که دستگاه به برق وصل شد یا دزدگیرش فعال شد اگه احیانا برای اول بار یه چیزی تشخیص داد عکسالعمل نشون نده و از اون به بعد حساس باشه خوب برای اینکه بتونه برای اولین بار یه چیزی رو تشخیص بده باید سنسورت فعال باشه برای این کارمیتونی به صورت زیر عمل کنی
                          ابتدا یه متغیر تعریف کن مثلا a از نوع بایت

                          بعد بصورت زیر بنویس

                          #include <mega16.h>
                          #include <delay.h>

                          void main(void)
                          {
                          unsigned char i;
                          DDRA=0x00;
                          DDRB=0xFF;
                          DDRD=0xFF;


                          a=1;
                          while(1)
                          {
                          PORTA.0=1;
                          if(PINA.0==0)
                          {
                          PORTD.4=0;
                          }
                          else
                          {
                          if(a<=1
                          }
                          a=a+;
                          {
                          if(a=2
                          [glow=red,2,300]{[/glow]
                          PORTD.4=1;
                          for(i=180; i>=0; i--)
                          {
                          PORTD.4=1;
                          if(PINB.0==1)//this is a off or on for set
                          {
                          break;
                          }

                          if(PINB.1==1)//this is a off sound for set
                          {
                          break;
                          }


                          delay_ms(34);


                          if(i==0)
                          {
                          break;
                          }

                          }
                          }
                          }
                          }
                          [glow=red,2,300]{[/glow]
                          ابتدا قبل از حلقه while متغیر a برابر 1 می شود
                          بعد در صورت تحریک سنسور
                          متغیر a یک واحد افزایش پیدا می کند
                          در مرحله دوم تحریک سنسور باز یک واحد دیگر افزایش پیدا می کند که برابر با 2 می شود
                          بنابراین وارد حلقه شده و دستور for اجرا میگردد
                          برد جوجه کشی:
                          مطالعه پست 1 (حتما مطالعه کنید)


                          مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

                          دانلود

                          توجه:
                          این برد نیمه صنعتی و خانگی هست...
                          برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

                          آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

                          دیدگاه

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