اطلاعیه

Collapse
No announcement yet.

برگشت ار اینتراپت به یه جای خاص از برنامه

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

    برگشت ار اینتراپت به یه جای خاص از برنامه

    بازم سلام به همگی دوستان و اساتید
    مشکل قبلی من نصفه و نیمه حل شده ولی منتظرم تا یکی از دوستان همچنان کمک کنه بهتر بشه اوضا
    حالا میخام وقتی اینتراپت میباد و زیربرنامش اجرا میشه ،برنامه بیاد و از یه خط دیگه اجرا بشه نه اینکه از دنبال خطی که اینتراپت اومده به کارش ادامه بده.(به جایی که اینتراپت امده برنگرده و بره به یه خط دیگه)باید چیکار کنم تا به این خواسته برسم؟!!
    2 اینکه میخام فقط و فقط وقتی میکرو روشن میشه 1 پینی رو تنها همون اول که برق میکرو میاد 1(روشن) کنه و بعد خاموش بشه و دیگه اجرا نشه تا زمان ریست میکرو!!!؟؟
    ممنون از همگی
    :nerd:

    #2
    جناب حمید رضا رضایی لطفا به دلیل هاستینگ بالا و دادن پول هاستینگ از جیب خود تایپ

    جناب حمید رضا رضایی لطفا به دلیل هاستینگ بالا و دادن پول هاستینگ از جیب خود تایپیک را حذف نمایید !
    خواستن توانستن است !

    دیدگاه


      #3
      پاسخ : برگشت ار اینتراپت به یه جای خاص از برن&#1575

      نوشته اصلی توسط bstar2
      سلام دوست عزیز اگر با بسکام مینویسی با یه دستور goto x میتونی این کارو انجام بدی
      کد:
      $regfile = "m16def.dat"
      $crystal = 4000000
      
      '============================================================================
      Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 64
      Config Portc = Input
      Config Portd = Output
      
      Config Lcd = 16 * 2
      
      Config Lcdpin = Pin , Db4 = Pina.2 , Db5 = Pina.3 , Db6 = Pina.4 , Db7 = Pina.5 , Rs = Pina.0 , E = Pina.1
      
      Cursor Off
      
      '============================================================================
      Dim A As Byte , B As Bit , C As Bit
      '============================================================================
      
      A = 200
      
      '============================================================================
      Set Portd.1
      Waitms 20
      Reset Portd.0.1
      
      Do                             'حلقه اصلی
      
      
      Loop
      
      End
      به این صورت مینویسی و فقط یکبار اول برنامه اجرا میشه
      دوست عزیز خیلی ممنون ولی من با زبان c مینویسم.اگه میشه کد سی برام یزارید.مرسی...
      توی زبان c دستور goto داریم ولی وقتی توی اینتراپت تعریق میکنم ارور میده.باید چیگار کنم؟!!
      اون قسمت دوم سوال رو هم نفهمیدم چون تو بیسیک نوشتی.مرسی از لطفت
      شاید باید محتویتات pc رو ریست کنیم!!اما چطوریس رو نمیدونم!کسی راهی داره واسه من؟

      دیدگاه


        #4
        پاسخ : برگشت ار اینتراپت به یه جای خاص از برنامه

        2- کافیه که کد رو قبل از حلقه قرار بدید. توی تابع اصلی
        1- چه کاریه؟ چطوری مگه که توی خود رویه وقفه نمی ذاریش؟

        دیدگاه


          #5
          پاسخ : برگشت ار اینتراپت به یه جای خاص از برنامه

          نوشته اصلی توسط magyd
          بازم سلام به همگی دوستان و اساتید
          مشکل قبلی من نصفه و نیمه حل شده ولی منتظرم تا یکی از دوستان همچنان کمک کنه بهتر بشه اوضا
          حالا میخام وقتی اینتراپت میباد و زیربرنامش اجرا میشه ،برنامه بیاد و از یه خط دیگه اجرا بشه نه اینکه از دنبال خطی که اینتراپت اومده به کارش ادامه بده.(به جایی که اینتراپت امده برنگرده و بره به یه خط دیگه)باید چیکار کنم تا به این خواسته برسم؟!!
          2 اینکه میخام فقط و فقط وقتی میکرو روشن میشه 1 پینی رو تنها همون اول که برق میکرو میاد 1(روشن) کنه و بعد خاموش بشه و دیگه اجرا نشه تا زمان ریست میکرو!!!؟؟
          ممنون از همگی
          :nerd:
          سلام.
          برای این کار باید آدرس برگشت که در هنگام فراخوانی وقفه در STACK ذخیره شده رو دستکاری کنید. اگر از زبانهای سطح بالا مثل C استفاده میکنید این کار کمی مشکل هست به دلیل اینکه در هنگام وقفه به جز آدرس برگشت متغیر ها و رجیسترهای دیگری هم در STACK به اصطلاح PUSH میشن . که این مورد خود در کامپایلرهای مختلف تفاوت داره. ولی چنانچه از اسمبلی استفاده کنید میتونید اینکار رو راحت انجام بدید. به این صورت که بلافاصله بعد از ورود به روتین وقفه محتوای بالاترین آدرس استک رو تغییر داده و برابر آدرس مورد نظر خود قرار بدید.

          دیدگاه


            #6
            پاسخ : برگشت ار اینتراپت به یه جای خاص از برن&#1575

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

            دیدگاه


              #7
              پاسخ : برگشت ار اینتراپت به یه جای خاص از برنامه

              میتونی هر قسمت از برنامه رو که دوس داری تو یه تابع خاص بنویسی و بعد از پایان اینتراپت ادرس بدی

              دیدگاه


                #8
                پاسخ : برگشت ار اینتراپت به یه جای خاص از برنامه

                ممنون داداش.
                میشه یه نمونه کد بزارید؟؟؟
                تابع نویسی هم بلد نیستم.

                دیدگاه


                  #9
                  پاسخ : برگشت ار اینتراپت به یه جای خاص از برن&#1575

                  سلام
                  میتونی از یک flag استفاده کنی
                  موقعی که وقفه صورت گرفت flag را 1 کنی و در روتین(while(1 با قرار دادن یک شرط هر عملی دوست داشته باشی میتونی انجام بدی
                  مثلا در GCC
                  کد:
                  unsigned char Flag=0;
                  
                  ISR(USART_RX_vect)
                  {
                  Flag = 1;
                  }
                  
                  int main (void)
                  {
                  while(1)
                  {
                  if(Flag)
                  {
                  Flag = 0;
                  // your code
                  }
                  }
                  }
                  موفق باشید
                  امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                  دیدگاه


                    #10
                    پاسخ : برگشت ار اینتراپت به یه جای خاص از برنامه

                    دوستان اشاره کردید به ادرس دلخواه .توبسکام از کجا ادرس هارو میشه پیدا کرد؟

                    دیدگاه

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