اطلاعیه

Collapse
No announcement yet.

وقفه تغییر پورت B

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    وقفه تغییر پورت B

    سلام خدمت اساتید ...
    این وقفه ناشی از تغییر پایه های PB4,PB5,PB6,PB7دقیقا چی کار میکنه؟
    میتونم یه جورایی جای اینتراپت ازش استفاده کنم؟

    #2
    پاسخ : وقفه تغییر پورت B

    نوشته اصلی توسط darkness.signals
    سلام خدمت اساتید ...
    این وقفه ناشی از تغییر پایه های PB4,PB5,PB6,PB7دقیقا چی کار میکنه؟
    میتونم یه جورایی جای اینتراپت ازش استفاده کنم؟
    بععله که میشه
    وقتی حالت یکی از پایه هایی که ذکر کردید تغیر پیدا کند وقفه اتفاق می افتد
    بیت فعال سازی کلیه وقفه ها و بیت فعال سازی تغیر وضعیت پورت B را یک کنید
    :job:
    من نبودم آنکه از من در خیالت ساختی ...
    پس تو هم چون دیگران چندان مرا نشناختی

    دیدگاه


      #3
      پاسخ : وقفه تغییر پورت B

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

      دیدگاه


        #4
        پاسخ : وقفه تغییر پورت B

        سلام دوست من.
        تو این برنامه که از کتاب دکتر میرزا کوچکی گرفته شده برای ایجاد وقفه ی تغییر وضعیت پورت b به پایه ی RB5 کلید متصل شده که با فشردن اون وقفه ایجاد شده و زیر برنامه ی وقفه LED متصل به پایه ی RB0 رو خاموش میکنه.
        (البته به زبان بیسیک)

        define osc 12
        ON INTERRUPT GOTO ISR
        TRISB = %11110000
        INTCON = %10001000
        MAIN:
        PORTB.0 = 1
        PAUSE 100
        GOTO MAIN
        'زیر روال وقفه
        DISABLE
        ISR:
        PORTB.0 = 0
        PAUSE 1000
        INTCON.0 = 0
        RESUME
        ENABLE
        END

        البته خط مربوط به تنظیم فیوز بیتها رو هم اول برنامه یادتون نمیره!
        @ DEVICE pic16f877a,WDT_OFF ,PWRT_ON ,PROTECT_OFF ,LVP_ON ,HS_OSC ,BOD_OFF
        در صورتی که از کریستال خارجی استفاده کردید HS_OSC رو میارید، که تو این برنامه از کریستال 12 مگ استفاده کرده.

        امیدوارم به کارتون بیاد.
        زندگی برگ بودن در مسیر باد نیست
        امتحان ریشه هاست
        ریشه هم هرگز اسیر باد نیست
        زندگی چون پیچک است
        انتهایش میرسد پیش خدا!

        دیدگاه


          #5
          پاسخ : وقفه تغییر پورت B

          oo:
          ببخشید ...آقا ما آماتوریم...میشه کد رو واسمون تریس هم بکنید...شرمندم بخدا... :redface:

          دیدگاه


            #6
            پاسخ : وقفه تغییر پورت B

            سلام دوست من.
            میشه یه کم واضح تر منظورتون رو بفرمائید تا اگه کمکی از دستمون بر بیاد در خدمت باشیم.
            دشمنتون شرمنده، من یکی که خودمم هنوز آماتورم :smile:
            زندگی برگ بودن در مسیر باد نیست
            امتحان ریشه هاست
            ریشه هم هرگز اسیر باد نیست
            زندگی چون پیچک است
            انتهایش میرسد پیش خدا!

            دیدگاه


              #7
              پاسخ : وقفه تغییر پورت B

              نفرمایید از من که خیلی بیشتر میدونید...
              از main تا end رو متوجه نمیشم...بدشم اینکه...این کد مال mikro basic هست؟

              دیدگاه


                #8
                پاسخ : وقفه تغییر پورت B

                خواهش میکنم، بنده هم بدون اساتید این سایت هیچم.

                این برنامه مربوط به کامپایلر pic basic pro هست.

                @ DEVICE pic16f877a,WDT_OFF ,PWRT_ON ,PROTECT_OFF ,LVP_OFF ,BOD_OFF ' این خط مربوط به تنظیم فیوزبیتها برای میکرو pic16f877a است


                ON INTERRUPT GOTO ISR 'رسیدگی به وقفه هنگامی که وقفه روی داد، یعنی هر زمان وقفه روی داد به برچسب ISR برو.
                TRISB = %11110000 'چهار بیت بالای پورت b در گرایش ورودی قرار بگیرد.
                INTCON = %10001000 ' فعالسازی وقفه ی تغییر وضعیت پورتb ، بیت سه در رجیستر INTCON مربوط به فعال سازی وقفه ی تغییر پورت b
                هست که باید 1 بشه و بیت هفتم هم که بیت فعالسازی همه ی وقفه هاست رو باید 1 کنیم ، و مابقی باید غیر فعال یا صفر باشند.

                MAIN:
                PORTB.0 = 1 ' نشاندن پایه ی RB0 .
                PAUSE 100 ' تاخیر 100 میلی ثانیه ای
                GOTO MAIN ' تکرار حلقه ی اصلی برنامه
                'زیر روال وقفه
                DISABLE ' غیر فعال کردن وقفه ها
                ISR : ' برچسبی که قرار هست بعد از روی دادن وقفه به این برچسب بیایم
                PORTB.0 = 0 ' باز نشاندن پایه ی RB0 .
                PAUSE 1000 ' تاخیر 1 ثانیه ای
                INTCON.0 = 0 ' باز نشاندن یا صفر کردن پرچم وقفه ی تغییر وضعیت پورت B برای راه اندازی مجدد وقفه
                RESUME 'بازگشت به حالت قبل از وقفه
                ENABLE 'فعال کردن وقفه ها
                END

                در ضمن اگر از همون میکروی 16f877 استفاده کنید باید کلید رو به RB5 یا همون پایه ی 38 میکرو وصل کنید که این کلید از یک طرف با یک مقاومت 10 کیلو به +5 ولت میره و LED هم به RB0 یا همون پایه ی 33 میاد علاوه بر این که مدار راه انداز میکرو رو هم باید در نظر بگیرید که باید پایه ی 11 و 32 رو به + 5 ولت بدید، 12 و 31 رو زمین کنید، بین پایه ی 13 و 14 هم باید کریستال 4 مگ بگذارید و هر پایه ی کریسستال رو با یک خازن 22 پیکو زمین کنید، و پایه ی 1 هم با یک مقاومت 4.7 کیلو به +5 ولت میره.

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

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

                دیدگاه


                  #9
                  پاسخ : وقفه تغییر پورت B

                  وقفه B4 تا B7 فرقی که با وقفه INT داره اینه که هم تو تغییر 0 به 1 فعال میشه و هم تو تغییر 1 به 0
                  [glow=red,2,300]تاپیک های ایجاد شده[/glow]

                  دیدگاه


                    #10
                    پاسخ : وقفه تغییر پورت B

                    وقفه B4 تا B7 فرقی که با وقفه INT داره اینه که هم تو تغییر 0 به 1 فعال میشه و هم تو تغییر 1 به 0
                    واسه اینکه وقفه خارجی و وقفه تغییر پورت bرو با هم مدیریت کنم پیشنهادی دارید؟

                    دیدگاه


                      #11
                      پاسخ : وقفه تغییر پورت B

                      منظورتون از مدیریت چی هست؟ اگه منظورتون همزمان روی دادن وقفه هست: تو میکروهای سری18f میتونین اولویت وقفه رو تغییر بدین.اگه هم سری16f یا پایینتر هست که تو روتین وقفه به صورت نرم افزاری اون وقفه ای که زودتر چک میکنین مشخصا اولویت بالاتری داره.

                      دیدگاه


                        #12
                        پاسخ : وقفه تغییر پورت B

                        منظورم یه چیزی تو این مایه ها بود...اما هنوز تست نشده...

                        sub procedure interrupt
                        if intcon.rbif=1 then
                        intcon.rbif=0
                        flag.0=1
                        end if
                        if intcon.intf=1 then
                        intcon.intf=0
                        flag.1=1
                        end if
                        current_portb=portb
                        chgdpin= current_portb xor prev_portb
                        prev_portb=chgdpin
                        end sub

                        دیدگاه


                          #13
                          پاسخ : پاسخ : وقفه تغییر پورت B

                          نوشته اصلی توسط شاهرخ
                          منظورتون از مدیریت چی هست؟ اگه منظورتون همزمان روی دادن وقفه هست: تو میکروهای سری18f میتونین اولویت وقفه رو تغییر بدین.اگه هم سری16f یا پایینتر هست که تو روتین وقفه به صورت نرم افزاری اون وقفه ای که زودتر چک میکنین مشخصا اولویت بالاتری داره.
                          البته اینم باید اضافه کرد که خیلی بعیده 2 وقفه همزمان رخ بدن
                          معمولا مشکل اینجاست که قبل از اینکه تو روتین وقفه ، وقفه عمومی غیر فعال بشه وقفه جدیدی رخ بده. بهترین کار اینه تو روتین وقفه اولین دستور غیر فعال کردن وقفه عمومی باشه
                          [glow=red,2,300]تاپیک های ایجاد شده[/glow]

                          دیدگاه


                            #14
                            پاسخ : وقفه تغییر پورت B

                            نوشته اصلی توسط rayk
                            البته اینم باید اضافه کرد که خیلی بعیده 2 وقفه همزمان رخ بدن
                            معمولا مشکل اینجاست که قبل از اینکه تو روتین وقفه ، وقفه عمومی غیر فعال بشه وقفه جدیدی رخ بده. بهترین کار اینه تو روتین وقفه اولین دستور غیر فعال کردن وقفه عمومی باشه
                            بله کاملا حق با شماست.اولا تو روال رسیدگی به وقفه،همون ابتداوقفه رو خفه میکنیم تا صداش در نیاد! :mrgreen: دوما احتمال وقوع دو وقفه ی همزمان خیلی خیلی کمه.اما تو سری 18 این قابلیت وجود داره که کدوم یک از منابع اینتراپت اولویت بالاتری داشته باشند.تو کامپایلر MikroCهم این هست:
                            کد:
                            void interrupt_low(void);

                            دیدگاه


                              #15
                              پاسخ : وقفه تغییر پورت B

                              نوشته اصلی توسط شاهرخ
                              بله کاملا حق با شماست.اولا تو روال رسیدگی به وقفه،همون ابتداوقفه رو خفه میکنیم تا صداش در نیاد! :mrgreen: دوما احتمال وقوع دو وقفه ی همزمان خیلی خیلی کمه.اما تو سری 18 این قابلیت وجود داره که کدوم یک از منابع اینتراپت اولویت بالاتری داشته باشند.تو کامپایلر MikroCهم این هست:
                              کد:
                              void interrupt_low(void);
                              کاملا درسته. وقفه low و high میشه جدا از هم غیر فعال کرد اما باز هم مشکل همزمانی خیلی کمه میشه وقفه تو در تو.

                              از بحث منحرف نشیم. بهترین مثال برای RB4 تا RB7 اینه که مثلا یه ربات داریم با 4 سنسور. اگه این وقفه فعال کنیم هر وقت وضعیت سنسور ها تغییر کند این وقفه فعال میشه. حالا فرقی نداره از 0 به 1 تغییر بده یا از 1 به 0. به عبارت ساده هر وقت مقدار باینری ورودی تغییر کند.
                              در صورتی که وقفه INT0 بعد از تعریف تنها هنگامی که ورودی فقط از 0 به 1 یا فقط از 1 به 0 تغییر وضعیت بده فعال میشه.
                              [glow=red,2,300]تاپیک های ایجاد شده[/glow]

                              دیدگاه

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