NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3645 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 9 از 9

موضوع: مشکل در استفاده همزمان از دو وقفه خارجی

  1. #1
    کاربر علاقه مند sadeqebrahimi آواتار ها
    تاریخ عضویت
    Jan 2012
    نوشته ها
    22
    تشکر
    25
    تشکر شده 0 بار در 0 پست

    پیش فرض مشکل در استفاده همزمان از دو وقفه خارجی

    با سلام
    من از دو وقفه خارجي به صورت همزمان استفاده کردم که درعمل فقط ايتراپت صفر جواب ميده اما تو پرتئوس هر دو جواب ميده :eek:
    اولش با کريستال 8 مگ کار ميکردم جواب نميداد گفتم شايد کم مياره و cpu زمان کافي براي انجام دستورات نداره اما 16 مگ هم گذاشتم جواب نداد که نداد
    پيش فرض با Atmel Studio کار ميکنم اما ويژن رو هم گذاشتم.
    (اين فقط يک برنامه دمو هستش )
    سورس
    http://uplod.ir/4kb7cfruuj33/New_folder_(4).rar.htm

    http://www.uplooder.net/cgi-bin/dl.c...4b2d6c87730505
    با تشکر
    کد:
    #include <mega8.h>
    #include <alcd.h>
    #include <delay.h>
    #include <stdio.h>
    int i=0,j=0;
    char str1[20],str2[20];
    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    i=i+1;
    }
    
    
    // External Interrupt 1 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    j=j+1;
    
    
    }
    
    
    // Declare your global variables here
    
    
    void main(void)
    {
    
    
    GICR|=0xC0;
    MCUCR=0x00;
    GIFR=0xC0;
    
    
    lcd_init(16);
    
    
    // Global enable interrupts
    #asm("sei")
    
    
    while (1)
          {
          delay_ms(1000);
           sprintf(str1,"%d",i);
         lcd_gotoxy(0,0);
         lcd_puts(str1);
          sprintf(str2,"%d",j);
         lcd_gotoxy(5,0);
         lcd_puts(str2);
          i=0;
          j=0;
    
    
          }
    }

    GCC:
    کد:
    #ifndef F_CPU
        #define F_CPU 16000000UL
    #endif
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    #include "myutils.h"
    #include "lcd.h" 
    int i=0,j=0;
    ISR(INT0_vect,ISR_BLOCK)
    {
        i=i+1;
    }
    ISR(INT1_vect,ISR_BLOCK)
    {
        j=j+1;
    }
    int main(void)
    {
    GICR=0xC0;
    MCUCR=0x00;
    GIFR=0xC0;
    sei();    
        InitLCD(LS_ULINE);
        LCDClear();
        while(1)
        {
            _delay_ms(1000);
           LCDWriteIntXY(0,0,i,2)
           LCDWriteIntXY(5,0,j,2)
           i=0;
           j=0;
        }
    }

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام مهندس
    خودم برنامه نويسي با Atmel studio ترجيح ميدم.
    همه چي ظاهرا" درسته ....
    اما رجيستر MCUCR رو تنظيم نكردي. اين رجيستر تعيين ميكنه كه وقفه به لبه بالارونده يا پايين رونده حساس بشه. در صورتي كه اينجا روي صفر تنظيم شده.
    اگه ميخواي به لبه بالا رونده حساس باشه پايه مربطه رو Pull-down كن و بالعكس.
    ویرایش توسط sadmonew : 04-05-2014 در ساعت 19:06
    _____________________________________
    _____________________________________

  4. تشکرها از این نوشته :


  5. #3
    کاربر علاقه مند sadeqebrahimi آواتار ها
    تاریخ عضویت
    Jan 2012
    نوشته ها
    22
    تشکر
    25
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sadmonew نمایش پست ها
    سلام مهندس
    خودم برنامه نويسي با Atmel studio ترجيح ميدم.
    همه چي ظاهرا" درسته ....
    اما رجيستر MCUCR رو تنظيم نكردي. اين رجيستر تعيين ميكنه كه وقفه به لبه بالارونده يا پايين رونده حساس بشه. در صورتي كه اينجا روي صفر تنظيم شده.
    اگه ميخواي به لبه بالا رونده حساس باشه پايه مربطه رو Pull-down كن و بالعكس.
    با سلام و تشکر
    اما من این رجیستر رو تنظیم کردم(حساس به سطح صفر) و با مقاومت پول آپ شدن

  6. #4
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

    در شبیه سازی جواب میده. پس در واقعیت و سخت افزار یکجای کار میلنگه. پروگرامر چیه؟ میکرو اصلی همین mega8 هست؟ پایه اینتراپتی که کار نمیکنه با jtag یکی نیست؟

  7. تشکرها از این نوشته :


  8. #5
    کاربر علاقه مند sadeqebrahimi آواتار ها
    تاریخ عضویت
    Jan 2012
    نوشته ها
    22
    تشکر
    25
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط esisafa نمایش پست ها
    در شبیه سازی جواب میده. پس در واقعیت و سخت افزار یکجای کار میلنگه. پروگرامر چیه؟ میکرو اصلی همین mega8 هست؟ پایه اینتراپتی که کار نمیکنه با jtag یکی نیست؟
    سلام
    میکرو مگ 8
    پروگرمر usb
    نه جیتگ نیست

  9. #6
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

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

  10. #7
    کاربر علاقه مند sadeqebrahimi آواتار ها
    تاریخ عضویت
    Jan 2012
    نوشته ها
    22
    تشکر
    25
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط esisafa نمایش پست ها
    همزمان کار نمیکنه یا جدا جدا هم کار نمیکنه. یعنی اگر فقط int1 رو تریگر کنید چی؟ اگر کار نکرد یا مشکل از برنامه نویسی هست یا سخت افزار. چیز دیگه ای امکان نداره.
    ینی با این اینتراپت دارم به مرز جنون میرسم
    تکی کار مینه اما وقتی میخام جفتشون باهم کار کنن نمیشه میکرو رو هم عوض کردم.(دارم مخ مخه میشم برم سراغ آرم(مثل این میمونه با خمیر دندون لباساتو بشوری))

  11. #8
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

    در avr وقتی دو وقفه با هم اتفاق بیافته و روتین وقفه نوشته شده باشه ابتدا وقفه ای که عدد بردار وقفه ی کمتری داره اجرا میشه و بعد از اتمام اولی بعدی اجرا میشه. شما در روتین ها فقط بیا یک پایه رو صفر و یک کن و به هیج وجه از تاخیر استفاده نکن. یعنی در روتین وقفه ببین اگر پین صفر باشه پورت رو یک کن در غیر این صورت پورت رو یک کن همین. ببین چی میشه.

  12. تشکرها از این نوشته :


  13. #9
    کاربر علاقه مند sadeqebrahimi آواتار ها
    تاریخ عضویت
    Jan 2012
    نوشته ها
    22
    تشکر
    25
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام مهندس
    درست شد
    باز تو رجیستر ها سوتی دادم
    کد:
    MCUCR=0xََA;

موضوعات مشابه

  1. پاسخ: 3
    آخرين نوشته: 24-03-2013, 18:38

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •