اطلاعیه

Collapse
No announcement yet.

ریست کردن وقفه

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

    ریست کردن وقفه

    سلام دوستان یه برنامه نوشتم به این صورته که کلید متصل به وقفه صفر که زده میشه، یک پایه میکرو روشن میشه. بعد از پنج ثانیه خاموش میشه. بعد چهارثانیه خاموش میشه و پایه بعدی روشن میشه و روشن می مونه.
    حالا مشکل اینکه کلید ریست میکرو که زده میشه ، می خوام کل کار از سر گرفته بشه، ولی اتفاقی که میفته این است که پایه خروجی غیرفعال میشه ولی کلید متصل به وقفه دیگه کار نمی کنه.
    البته توی پروتئوس تست کردمش.
    کسی می دونه مشکل از چیه؟
    امضاندارم. ميشه انگشت بزنم...؟

    www.AsanService.ir

    #2
    پاسخ : ریست کردن وقفه

    نوشته اصلی توسط hossein.ahmadvand نمایش پست ها
    سلام دوستان یه برنامه نوشتم به این صورته که کلید متصل به وقفه صفر که زده میشه، یک پایه میکرو روشن میشه. بعد از پنج ثانیه خاموش میشه. بعد چهارثانیه خاموش میشه و پایه بعدی روشن میشه و روشن می مونه.
    حالا مشکل اینکه کلید ریست میکرو که زده میشه ، می خوام کل کار از سر گرفته بشه، ولی اتفاقی که میفته این است که پایه خروجی غیرفعال میشه ولی کلید متصل به وقفه دیگه کار نمی کنه.
    البته توی پروتئوس تست کردمش.
    کسی می دونه مشکل از چیه؟
    سلام شکل برنامه خودتو عوض کن چرا با ریست باید برنامه به
    حالت اول برگرده ؟؟
    قصه زندگی همیشه با مدادی که ما دوست داریم نوشته نمی شه .....

    دیدگاه


      #3
      پاسخ : ریست کردن وقفه

      نوشته اصلی توسط خلبان نمایش پست ها
      سلام شکل برنامه خودتو عوض کن چرا با ریست باید برنامه به
      حالت اول برگرده ؟؟
      یعنی چیکارش کنم ؟ میشه توضیح بدین؟
      این هم برنامه ام :



      #include <mega32a.h>
      #include <delay.h>


      interrupt [EXT_INT0] void ext_int0_isr(void)
      {
      PORTB.0=1;


      }




      void main(void)
      {
      PORTA=(1<<PORTB0) |(1<<PORTB1)|(0<<PORTB2)|(0<<PORTB3)| (0<<PORTB4)|(0<<PORTB5)|(0<<PORTB6)|(0<<PORTB7);






      // External Interrupt(s) initialization
      // INT0: On
      // INT0 Mode: Rising Edge
      // INT1: Off
      // INT2: Off
      GICR|=(0<<INT1) | (1<<INT0) | (0<<INT2);
      MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00);
      MCUCSR=(0<<ISC2);
      GIFR=(0<<INTF1) | (1<<INTF0) | (0<<INTF2);




      #asm("sei")




      while (1)
      {


      }
      }


      جدیدترین ویرایش توسط hossein.ahmadvand; ۱۱:۵۸ ۱۳۹۸/۰۲/۱۶.
      امضاندارم. ميشه انگشت بزنم...؟

      www.AsanService.ir

      دیدگاه


        #4
        پاسخ : ریست کردن وقفه

        نوشته اصلی توسط hossein.ahmadvand نمایش پست ها
        یعنی چیکارش کنم ؟ میشه توضیح بدین؟
        این هم برنامه ام :



        #include <mega32a.h>
        #include <delay.h>


        interrupt [EXT_INT0] void ext_int0_isr(void)
        {
        PORTB.0=1;


        }




        void main(void)
        {
        PORTA=(1<<PORTB0) |(1<<PORTB1)|(0<<PORTB2)|(0<<PORTB3)| (0<<PORTB4)|(0<<PORTB5)|(0<<PORTB6)|(0<<PORTB7);






        // External Interrupt(s) initialization
        // INT0: On
        // INT0 Mode: Rising Edge
        // INT1: Off
        // INT2: Off
        GICR|=(0<<INT1) | (1<<INT0) | (0<<INT2);
        MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00);
        MCUCSR=(0<<ISC2);
        GIFR=(0<<INTF1) | (1<<INTF0) | (0<<INTF2);




        #asm("sei")




        while (1)
        {


        }
        }


        منظور من این بود که بجای استفاده از وقفه و باتن
        برنامه رو طوری بنویسی که با دو باتن ورودی عادی
        و بدون وقفه این کار رو انجام بدید و تست کنی بعد
        اگه خواستی یک کم مشکل تر میشه با همون یک دونه
        باتن هم میشه هر دو کار رو کرد دیگه نیاز به ریست
        کردن نیست
        جدیدترین ویرایش توسط خلبان; ۱۳:۵۹ ۱۳۹۸/۰۲/۱۶.
        قصه زندگی همیشه با مدادی که ما دوست داریم نوشته نمی شه .....

        دیدگاه


          #5
          پاسخ : ریست کردن وقفه

          نوشته اصلی توسط hossein.ahmadvand نمایش پست ها
          یعنی چیکارش کنم ؟ میشه توضیح بدین؟
          این هم برنامه ام :




          #include <mega32a.h>
          #include <delay.h>


          interrupt [EXT_INT0] void ext_int0_isr(void)
          {
          PORTB.0=1;


          }




          void main(void)
          {
          PORTA=(1<<PORTB0) |(1<<PORTB1)|(0<<PORTB2)|(0<<PORTB3)| (0<<PORTB4)|(0<<PORTB5)|(0<<PORTB6)|(0<<PORTB7);






          // External Interrupt(s) initialization
          // INT0: On
          // INT0 Mode: Rising Edge
          // INT1: Off
          // INT2: Off
          GICR|=(0<<INT1) | (1<<INT0) | (0<<INT2);
          MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00);
          MCUCSR=(0<<ISC2);
          GIFR=(0<<INTF1) | (1<<INTF0) | (0<<INTF2);




          #asm("sei")




          while (1)
          {


          }
          }


          سلام دوست عزیز
          چرا از دستور
          DDRx برای تعریف خروجی کردن پایه PINB.0 استفاده نکردی؟

          دیدگاه

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