اطلاعیه

Collapse
No announcement yet.

مشکل با وقفه

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

    مشکل با وقفه

    من این برنامه رو نوشتم
    $regfile = "m16def.dat"
    $crystal = 1000000


    Config Portb = Input
    Config Pind.0 = Output
    Config Pind.1 = Output
    Config Pind.3 = Output
    Config Pind.4 = Output


    Dim A As Byte
    Dim B As Byte

    Enable Interrupts
    Enable Int0
    On Int0 Main
    End If

    Main:
    B = Pinb
    If B = &B00000100 Then
    Sound Portd.0 , 150 , 100
    Set Portd.1
    Reset Portd.3
    Set Portd.4
    Wait 5
    Reset Portd.1
    Set Portd.3
    Reset Portd.4
    Wait 1


    Elseif B = &B00000010 Then
    Sound Portd.0 , 150 , 100
    Set Portd.1
    Reset Portd.3
    Set Portd.4
    Wait 5
    Reset Portd.1
    Set Portd.3
    Reset Portd.4
    Wait 1

    Elseif B = &B00000110 Then
    Sound Portd.0 , 150 , 100
    Set Portd.1
    Reset Portd.3
    Set Portd.4
    Wait 5
    Reset Portd.1
    Set Portd.3
    Reset Portd.4
    Wait 1

    Elseif B = &B00000001 Then
    Sound Portd.0 , 1500 , 200
    Set Portd.3
    Reset Portd.4
    Wait 1

    Elseif B = &B00000101 Then
    Sound Portd.0 , 1500 , 200
    Set Portd.3
    Reset Portd.4
    Wait 1

    Elseif B = &B00000011 Then
    Sound Portd.0 , 1500 , 200
    Set Portd.3
    Reset Portd.4
    Wait 1

    Elseif B = &B00000111 Then
    Sound Portd.0 , 1500 , 200
    Set Portd.3
    Reset Portd.4
    Wait 1

    End If

    Return

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

    #2
    پاسخ : مشکل با وقفه

    کسی هست راهنمایی کنه؟

    دیدگاه


      #3
      پاسخ : مشکل با وقفه

      شما تغییرات پورت B رو می خواهید ؟ برنامه شما فقط بر اساس وقفه INt0 کار می کند نه وقفه تغییرات پورت

      دیدگاه


        #4
        پاسخ : مشکل با وقفه

        نوشته اصلی توسط axiom2600 نمایش پست ها
        شما تغییرات پورت B رو می خواهید ؟ برنامه شما فقط بر اساس وقفه INt0 کار می کند نه وقفه تغییرات پورت
        بله....یعنی چی وقفه تغییرات پورت؟

        دیدگاه


          #5
          پاسخ : مشکل با وقفه

          شما وقفه int0 رو فعال کردید که با هر بار اینتراپت به main رفته و مقایسه ها را انجام می دهد.
          حالا اگر وقفه صورت نگیرد و پورت b تغییر کند میکرو متوجه نمی شود. برای اینکار بهتر است در قسمت اصلی برنامه یک حلقه ایجاد کنید که وضعیت پورت رو با یک رجیستر مقایسه کند که آیا تغییر کرده اند یا خیر . اگر تغییر بود آنگاه به روال مربوطه برود و بعد از آن رجیستر خودش هم تغییر کند.

          دیدگاه


            #6
            پاسخ : مشکل با وقفه

            نوشته اصلی توسط axiom2600 نمایش پست ها
            شما وقفه int0 رو فعال کردید که با هر بار اینتراپت به main رفته و مقایسه ها را انجام می دهد.
            حالا اگر وقفه صورت نگیرد و پورت b تغییر کند میکرو متوجه نمی شود. برای اینکار بهتر است در قسمت اصلی برنامه یک حلقه ایجاد کنید که وضعیت پورت رو با یک رجیستر مقایسه کند که آیا تغییر کرده اند یا خیر . اگر تغییر بود آنگاه به روال مربوطه برود و بعد از آن رجیستر خودش هم تغییر کند.
            میشه تو برنامه برام بنویسیدش...نمیدونم چطوره

            دلیل: ادغام دو پست برای جلوگیری از اسپم

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

            دیدگاه


              #7
              پاسخ : مشکل با وقفه

              کسی نیست که کمک کنه؟

              دیدگاه


                #8
                پاسخ : مشکل با وقفه

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

                دیدگاه


                  #9
                  پاسخ : مشکل با وقفه

                  نوشته اصلی توسط axiom2600 نمایش پست ها
                  نقشه مدارتون رو بفرستید تا از ایجاد پست های مکرر جلوگیری شود.
                  نمیتونم تصویر آپلود کنم

                  دیدگاه


                    #10
                    پاسخ : مشکل با وقفه

                    به علت سرعت بالا ، وقتی شما یک بار کلید رو فشار میدید چند بار وقفه اعمال میشه . شما میبایست بعد از رفتن به برنامه وقفه اونو غیر فعال کنید و بعد کاری رو که میخواید انجام بدید و در پایان کار دوباره وقفه رو فعال کنید .
                    الهم صل علی محمد و آل محمد و عجل فرجهم
                    www.adaksell.com

                    دیدگاه


                      #11
                      پاسخ : مشکل با وقفه

                      نوشته اصلی توسط mojitaba نمایش پست ها
                      به علت سرعت بالا ، وقتی شما یک بار کلید رو فشار میدید چند بار وقفه اعمال میشه . شما میبایست بعد از رفتن به برنامه وقفه اونو غیر فعال کنید و بعد کاری رو که میخواید انجام بدید و در پایان کار دوباره وقفه رو فعال کنید .
                      احسنت...منم دقیقا همینو میخوام ولی نمیدونم چطور تو بسکام بنویسمش...:((

                      دلیل: ادغام دو پست برای جلوگیری از اسپم

                      اینم نمونه برنامم

                      $regfile = "m16def.dat"
                      $crystal = 1000000


                      Config Portb = Input
                      Config Pind.0 = Output
                      Config Pind.1 = Output
                      Config Pind.5 = Output
                      Config Pind.4 = Output


                      Dim A As Byte
                      Dim B As Byte
                      On Int0 Main

                      Enable Interrupts
                      Enable Int0



                      Do

                      Set Portd.4
                      Reset Portd.5

                      Loop


                      Main:
                      B = Pinb

                      If B = &B00000100 Or B = &B00000010 Or B = &B00000110 Then
                      Sound Portd.0 , 150 , 100
                      Set Portd.1
                      Reset Portd.4
                      Set Portd.5
                      Wait 5
                      Reset Portd.1
                      Set Portd.4
                      Reset Portd.5
                      Wait 1


                      Elseif B = &B00000001 Or B = &B00000101 Or B = &B00000011 Or B = &B00000111 Then
                      Sound Portd.0 , 1500 , 200
                      Set Portd.4
                      Reset Portd.5
                      Wait 1


                      End If


                      Return
                      End

                      دیدگاه


                        #12
                        پاسخ : مشکل با وقفه

                        دیدگاه


                          #13
                          پاسخ : مشکل با وقفه

                          هیچ کسی نیست؟

                          دیدگاه


                            #14
                            پاسخ : مشکل با وقفه

                            قبل از return main یه wait بده به هر میزانی که می خواهید.
                            البته در طول main بهتره اینتراپت را غیر فعال کنی
                            disable int0
                            ...
                            ...
                            ...
                            enable int0

                            ولی باز فکر کنم منظورتون رو اشتباه فهمیدم. اینطوری وقفه فقط روی پایه int0 فعال میشه نه تغییر پایه های پورت...

                            دیدگاه


                              #15
                              پاسخ : مشکل با وقفه

                              نوشته اصلی توسط axiom2600 نمایش پست ها
                              قبل از return main یه wait بده به هر میزانی که می خواهید.
                              البته در طول main بهتره اینتراپت را غیر فعال کنی
                              disable int0
                              ...
                              ...
                              ...
                              enable int0

                              ولی باز فکر کنم منظورتون رو اشتباه فهمیدم. اینطوری وقفه فقط روی پایه int0 فعال میشه نه تغییر پایه های پورت...
                              بهه طور کلی وقتی وارد روتین وقفه میشید وقفه خا از کار میفتند و این کار پیشنهادی شما هیچ تاثیری نداره...

                              ایشون اگه سرعت و عکسالعمل واسشون مهم نیست بهتره که به جای وقفه مقدار پین رو چک کنند...اگر نه با گذاشتن خازن میشه bounce ناشی از کلید رو تا حدی خنثی کرد

                              Sent from my E2333 using Tapatalk
                              تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                              www.intelart.ir


                              ساخت کنترلر دما PID فازي با AVR [آموزشی]

                              دیدگاه

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