اطلاعیه

Collapse
No announcement yet.

اینتراپت LPC 1768

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

    اینتراپت LPC 1768

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

    #2
    پاسخ : اینتراپت LPC 1768

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


    نوشته اصلی توسط kavous نمایش پست ها
    دوم این که کدی که باید در ساب روتین اینتراپت انجام بشه زیاده. میخوام در ساب روتین اینتراپت که رفت یک زیر برنامه جدا اجرا بشه. چجوری باید این زیر برنامه رو تعریف و فراخوانی کنم؟
    متوجه نشدم _ یکم توضیح بده لطفا
    ! Life doesn't get easier , you just get stronger

    دیدگاه


      #3
      پاسخ : اینتراپت LPC 1768

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

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

      بعد یه سوال دیگه. برنامه اینتراپت باید قبل از تابع main نوشته بشه یا بعدش؟ چون من قبل از تابع main که مینویسم اجرا نمیشه ولی بعد از تابع main که مینویسم اجرا میشه. چرا اینجوریه؟

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

      دیدگاه


        #4
        پاسخ : اینتراپت LPC 1768

        نوشته اصلی توسط kavous نمایش پست ها
        واسه قسمت دوم منظورم اینه که اگر کدی که قرار است توی اینتراپت اجرا بشه زیاد و طولانی باشه، مشکلی نداره؟
        نه بعید میدونم مگر اینکه مثالا هنگ کنه ... من که تا حالا چنین مشکلی نداشتم ... اتفاقا چنین برنامه ای که طولانی باشه توی اینتراپت نوشتم ... من با کیل کار میکنم ...

        نوشته اصلی توسط kavous نمایش پست ها
        نیازی نیست که توی اینتراپت یه تابع جدا فراخوانی بشه؟
        نه نیازی نیست ... حتی اگر هم تعریف کنی به شرط اینکه درست تعریف کنی بعد از اینکه به اون تابع مراجعه کرد دوباره به اینتراپت بر میگرده و خط بعد از فراخوانی رو اجرا میکنه مثلا تابع Delay


        نوشته اصلی توسط kavous نمایش پست ها
        بعد یه سوال دیگه. برنامه اینتراپت باید قبل از تابع main نوشته بشه یا بعدش؟ چون من قبل از تابع main که مینویسم اجرا نمیشه ولی بعد از تابع main که مینویسم اجرا میشه. چرا اینجوریه؟
        نه نه نه باید قبلش نوشته بشه ...البته من همیشه قبلش مینویسم ... از چه نوع وقفه ای استفاده میکنی ؟؟ درست کانفیگش میکنی ؟؟
        ! Life doesn't get easier , you just get stronger

        دیدگاه


          #5
          پاسخ : اینتراپت LPC 1768

          نوشته اصلی توسط Amirlopez نمایش پست ها
          از چه نوع وقفه ای استفاده میکنی ؟؟ درست کانفیگش میکنی ؟؟
          از اینتراپت خارجی 1 (P0.11) استفاده کردم.

          کد هم اینه:
          #include "LPC17xx.h"
          #include "delay.h"
          int a=1;


          int main(void)
          {
          SystemInit();

          LPC_SC->EXTINT = 1<<1;
          LPC_PINCON->PINSEL4 =1<<22;
          LPC_SC->EXTMODE = 1<<1;
          LPC_SC->EXTPOLAR = 1<<1;


          LPC_GPIO2->FIODIR=1<<0;
          LPC_GPIO0->FIODIR=1<<0;

          LPC_GPIO2->FIOSET=1<<0;
          LPC_GPIO0->FIOSET=1<<0;


          NVIC_EnableIRQ(EINT1_IRQn);

          while(1)
          {
          if (a==1)
          {
          LPC_GPIO2->FIOSET=1<<0;
          LPC_GPIO0->FIOCLR=1<<0;
          delay_ms(500);
          LPC_GPIO2->FIOCLR=1<<0;
          LPC_GPIO0->FIOSET=1<<0;
          delay_ms(500);
          }
          else if (a==0)
          {
          LPC_GPIO2->FIOCLR=1<<0;
          LPC_GPIO0->FIOCLR=1<<0;
          }


          }
          }


          void EINT1_IRQHandler(void)
          {

          if (a==1)
          {
          a=0;
          }
          else if (a==0)
          {
          a=1;
          }
          delay_ms(100);
          LPC_SC->EXTINT = (1<<1); /* Clear Interrupt Flag */
          }


          دیدگاه


            #6
            پاسخ : اینتراپت LPC 1768




            #include "LPC17xx.h"
            #include "delay.h"
            int a=1;
            unsigned char a_toggle = 0x00;


            void EINT1_IRQHandler(void)
            {


            if (a==1)
            {
            a=0;
            }
            else if (a==0)
            {
            a=1;
            }
            //delay_ms(100);big wrong
            a_toggle = 1;
            LPC_SC->EXTINT = (1<<1); /* Clear Interrupt Flag */
            }
            //--
            void check_a_is_toggled(void)
            {
            if(a_toggle)
            {
            delay_ms(100);
            a_toggle = 0;
            }
            //--
            return;
            }
            //--
            int main(void)
            {
            SystemInit();


            LPC_SC->EXTINT = 1<<1;
            LPC_PINCON->PINSEL4 =1<<22;
            LPC_SC->EXTMODE = 1<<1;
            LPC_SC->EXTPOLAR = 1<<1;




            LPC_GPIO2->FIODIR=1<<0;
            LPC_GPIO0->FIODIR=1<<0;


            LPC_GPIO2->FIOSET=1<<0;
            LPC_GPIO0->FIOSET=1<<0;




            NVIC_EnableIRQ(EINT1_IRQn);


            while(1)
            {
            //--
            check_a_is_toggled();
            //--
            if (a==1)
            {
            LPC_GPIO2->FIOSET=1<<0;
            LPC_GPIO0->FIOCLR=1<<0;
            delay_ms(500);
            LPC_GPIO2->FIOCLR=1<<0;
            LPC_GPIO0->FIOSET=1<<0;
            delay_ms(500);
            }
            else if (a==0)
            {
            LPC_GPIO2->FIOCLR=1<<0;
            LPC_GPIO0->FIOCLR=1<<0;
            }




            }
            }





            دیدگاه

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