اطلاعیه

Collapse
No announcement yet.

مشکل با اینتراپت

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

    مشکل با اینتراپت

    سلام.
    وقتی که int0 فعال میشه میکرو می پره تو زیر برنامه وققه یه متغیر not می کنه.
    مشکل اینجاس زمانی که از زیر برنامه بر میگرده میره تو برنامه اصلی از اونجا که پریده ادامه میده.در حالی که می خوام از اول برنامه شروع بکار کنه.اینم برنامه(البته چون زیاد بود یه برنامه سمبلیک نوشتم) :
    #include <mega32.h>
    #include<delay.h>
    char buffer1[10];
    char buffer2[10];
    bit a;
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    a=~a;
    }
    void main(void)
    {
    GICR|=0x40;
    MCUCR=0x02;
    MCUCSR=0x00;
    GIFR=0x40;
    #asm("sei&quot
    while (1)
    {
    if (a==0){
    buffer1[1]=buffer2[9];
    buffer1[2]=buffer2[8];
    buffer1[3]=buffer2[7];
    buffer1[4]=buffer2[6];
    buffer1[5]=buffer2[5];
    buffer1[6]=buffer2[4];
    buffer1[7]=buffer2[3];
    buffer1[8]=buffer2[2];
    buffer1[9]=buffer2[1];
    }
    if (a==1){
    buffer1[1]=buffer2[1];
    buffer1[2]=buffer2[2];
    buffer1[3]=buffer2[3];
    buffer1[4]=buffer2[4];
    buffer1[5]=buffer2[5];
    buffer1[6]=buffer2[6];
    buffer1[7]=buffer2[7];
    buffer1[8]=buffer2[8];
    buffer1[9]=buffer2[9];
    }
    };
    }
    گسترده تر از هر چیز دل مومن است(امام علی (ع))
    [glow=red,2,300]R[/glow]
    [glow=green,2,300]G[/glow]
    [glow=blue,2,300]B[/glow]

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

    سلام

    دقیق بگو ببینم ...برنامت چیه؟؟

    اگه برات مهمه که هر وقت یه کلیدو زدی...همون موقع بپره و یه کاری کنه..
    ....باید از اینتراپت استفاده کنی....حالا اگه میخوای بعد اینتراپت از اول شروع کنه....آخر حلقه اینتراپت ریست نرم افزاریش کن.


    اگه برات مهم نیست ... خب برا چی اینتراپت نوشتی..؟؟

    یه if یا while (بسته به کارت) بذار آخر برنامت..کارت رو اونتو کن...بعد خودش در میاد میره برنامه رو از اول اجرا میکنه. :mrgreen:


    موفق باشی
    خوب بودن تنها ویژگی ای است که برای دستیابی به آن نیاز به هیچ استعدادی نیست.... دکتر قمشه ای

    دیدگاه


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

      ممنون از پاسوخت.
      حتما باید از اینتراپت استفاده کنم. :angry:
      اگه ریست کنم اعداد داخل بافرا پاک میشه. :angry:
      گسترده تر از هر چیز دل مومن است(امام علی (ع))
      [glow=red,2,300]R[/glow]
      [glow=green,2,300]G[/glow]
      [glow=blue,2,300]B[/glow]

      دیدگاه


        #4
        اینتراپت بازها کمک کنن

        اینتراپت بازها کمک کنن
        گسترده تر از هر چیز دل مومن است(امام علی (ع))
        [glow=red,2,300]R[/glow]
        [glow=green,2,300]G[/glow]
        [glow=blue,2,300]B[/glow]

        دیدگاه


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

          این دستوراتی که تو تابع اصلی نوشتی رو به صورت یه تابع در بیار.بعد توی اول تابع وقفه رو غیر فعال کن .آخر تابع دوباره فعالش کن.
          این طوری میتونی مطمئن باشی که وسط تابع وقفه ای رخ نمی ده.
          فقط اگر توی lwhile(1)تنها این تابع رو صدا می کنی بهتره از چند تا ; بعد از تابع استفاده کنی .این طوری وقفه زمان کافی برای فعال شدن داره
          [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

          دیدگاه


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

            شاید بشه وقتی اینتراپتت زده شد، مثلا یه متغیر رو توش یک کنی ...بعد تو برنامه اصلی یه if بزنی که اگه متغیره یک شده، برنامه بپره به خطی که میخوای (با goto) و اونجا دوباره متغیره رو صفر کنی...البته اینجوری همه خطها باید این if رو بنویسی و حجم کار بالا میره.

            دیدگاه


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

              ممنون از پاسختون.
              :wow:با دستور اسمبلی مشکلم حل شد(خدا پدرشو بیاموزه)
              گسترده تر از هر چیز دل مومن است(امام علی (ع))
              [glow=red,2,300]R[/glow]
              [glow=green,2,300]G[/glow]
              [glow=blue,2,300]B[/glow]

              دیدگاه

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