اطلاعیه

Collapse
No announcement yet.

مشکل در کار با وقفه برای تایمر 2

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

    مشکل در کار با وقفه برای تایمر 2

    با سلام :
    توی frankline
    می خوام تایمر 2 در 8052 رو در حالت auto-reloade قرار بدم و برای تایمر 2 وقفه تعریف کنم که با هر بار سر ریز شدن تایمر یه متغییر ++بشه
    یه نفر محبت کنه کمکی بکنه

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

    این تایمر هم مثل 1 و 0 کار می کنه که ... منظورت از کمک چیه ؟ آموزش طریق کارکردش رو می خوای ؟ کار با تایمر های 1 و 0 رو بلدی و با 2 مشکل داری ؟

    دیدگاه


      #3
      پاسخ : مشکل در کار با وقفه برای تایمر 2

      سلام دوستان .
      من هم همچین مشکلی دارم . که البته فکر کنم باید بازش کنم :
      فرض کنید یک برنامه داریم که در اون از تایمر 1 برای ایجاد delay استفاده شده. وهرگاه لازمش داشته باشیم توسط تابع فرضی ایجاد شده باین تایمر صداش می زنیم .
      مثلاً delay(1000); 1 یک تأخیر یک ثانیه ای ایجاد می کنه .
      حال من برنامه ای به زبان سی لازم دارم که تابمر دوم رو بصورت وقفه فعال کنه وهر(مثلاً یک میلی ثانیه ) یک بار به متغیر سراسری ( global) مورد نظر یک واحد اضافه کنه بطوریکه بتونیم توی برنامه اصلی از مقدار لحظه ای متغیر استفاده کنیم.
      نکته که باید دقت کرد اینه که متغیر در وقفه تایمر افزایش پیدا کنه و در برنامه اصلی ( main ) مورد استفاده قرار بگیره( نه در پروسه وقفه ) .
      این سوال رو من چند جای دیگه هم پرسیدم ولی هنوز کسی نتونسته جواب بده.
      خبرآمد خبري در راه است
      سرخوش آن دل كه از آن گاه است

      دیدگاه


        #4
        پاسخ : مشکل در کار با وقفه برای تایمر 2

        من با c خیلی وقته برای 8051 و 8052 برنامه ننوشتم .. با اسمبلی می نویسم اصولا ... ولی می تونی این چند تا مثال رو در مورد تایمر 2 نگاه کنی ... این مثالا همونطور که می خوای به زبان c هست .

        http://www.atmel.com/dyn/products/to...p?tool_id=3418

        علاوه بر چند تا فایل ZIP یه فایل PDF تو این صفحه هست .. اون رو دانلود کنی پر از مثال برای انواع تایمر ها هم به زبان C و هم به زبان Assembly هست !
        امیدوارم به دردت بخوره .

        دیدگاه


          #5
          پاسخ : مشکل در کار با وقفه برای تایمر 2

          آقا صالح مطمئن هستی فایل reg52.h رو به برنامه اضافه کردی؟

          دیدگاه


            #6
            پاسخ : مشکل در کار با وقفه برای تایمر 2

            با سلام:
            ممنون که توجه دارین.
            آقا هادی من فایل reg52.h رو به برنامه اضافه اضافه کردم
            مشکل من در بارگذاری تایمر نیستش ولی در کار با وقفه مشکل دارم (تازه کارم...) من می خوام تایمر 2 داخل مد2 با عدد50000 بارگذاری کنم و با هر سرریز به تابع وقفه بره و یه متغییر رو++ کنه وتوی برنامه اصلی از این متغییر استفاده کنم (برای اینکه یه تهخییر دقیق 1ثانیه بدست بیارم)

            دیدگاه


              #7
              پاسخ : مشکل در کار با وقفه برای تایمر 2

              ببین تو اول تایمر دو رو در مد دو یا همون بار شدن اتوماتیک 16 بیتی قرار بده ... داخل رجیستر RCAP2L عدد B0 و در RCAP2H عدد 3C رو بریز ... حالا با set کردن دو بیت ET2 و EA که تو اسمبلی اینجوری set میشه :

              SETB ET2
              SETB EA

              حالا وقفه ی تایمر تو فعال شده .. با راه اندازی تایمر با set کردن بیت TR2 بعد از شمردن 50000 به تابع وقفه میره ... تابع وقفه همیشه در آدرس 002B نوشته میشه ... برای همین توی این آدرس حافظه یه دستور پرش بزار ...مثلا به TIMER2 ... توی اسمبلی اینجوریه : (توی اسمبلی با دستور ORG محل نوشتن در حافظه رو مشخص می کنند.)

              ORG 002BH
              LJMP TIMER2

              حالا توی زیربرنامه ی TIMER2 هر کار می خوای انجام بدی رو می نویسی .. مثلا افزایش یه واحد رجیستر A

              TIMER2:
              INC A

              در آخر همه ی دستور ها RETI می گزاریم ( البته در اسمبلی) که معادل همون RET برای زیربرنامه ها هست .
              این روش کاره .. شرمنده که با C بلد نیستم .. امیدوارم یکی C کار بیاد با C توضیح بده ...

              تا اونجا که من میدونم برای تعریف توابع وقفه در برنامه نویسی با C باید از کلمه INTERRUPT و یک عدد که مشخص میکنه که این تابع چه وقفه ای هست استفاده کنی یعنی برای وقفه ی تایمر دو باید از یک تابع با نام INTERRUPT5 تعریف و در اون کارایی که می خوای انجام بشه رو بنویسی .. فکر کنم نیازی به دادن آدرس وقفه مثل اسمبلی نداره ... و همچنین نیازی به معادل RETI نداشته باشه ... اگه درست بگم .. با زیر برنامه ها یه مقایسه بکن ...

              دیدگاه


                #8
                پاسخ : مشکل در کار با وقفه برای تایمر 2

                دستت درد نکنه آقاهادی:
                مثل اینکه شما با اسمبلی کار میکنید و ومسلط هستین کاش منم..... :cry:
                ولی من دارم توی C می نویسم که متاسفانه تا هالا موفق نبودم اگه کسی می تونه کمکی بکنه :cry: :cry: :cry: :cry: :cry:
                بر نامه تااینجا ERROR نمی ده ولی توی پروتئوس جواب نمیده



                #include<reg52.h>
                sbit led=P1^0;
                int a;
                void intfunc(void)interrupt 5 using 2
                {
                TF2=0;
                a=a++;
                }

                void main()
                {
                led=0;
                ET2=1;
                T2CON=0x00;
                RCAP2H=0xc3;
                RCAP2L=0x50;
                EA=1;
                TR2=1;
                while (1)
                {
                if (a==20)
                {
                a=0;
                led=~led;
                }
                }
                }

                دیدگاه


                  #9
                  پاسخ : مشکل در کار با وقفه برای تایمر 2

                  سلام صالح جان؟
                  ایرادی که به ذهن من میرسه

                  به a مقدار اولیه ندادید.

                  اگه این کار رو هم کردید و درست نشد، موقت با یه تایمر دیگه کار کنید وقتی از اون جواب گرفتید بیایید سراغ این تایمر شاید گیر از کامپایلر باشه یا یه نکته داشته باشه که ما الان بهش دقت نمیکنیم اگه بدونیم الگوریتم برنامه درسته ایراد یابی راحت تر میشه.
                  موفق باشید.
                  شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
                  هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
                  چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

                  دیدگاه


                    #10
                    پاسخ : مشکل در کار با وقفه برای تایمر 2

                    از نظر من هم اشکالی نداره برنامه ات ... البته با توجه به کتاب !!! فهمیدی به منم بگو !

                    دیدگاه


                      #11
                      پاسخ : مشکل در کار با وقفه برای تایمر 2

                      توی برنامه ای که بالا نوشته بودم به a مقدار اولیه نداده بودم وقتی بهش مقدار دادم بازم برنامه جواب نداد البته خود برنامه توی frankline مشکلی پیش نمی اره وerror نمی ده ولی وقتی می خوام با proteus شبیه سازی کنم این eeror رو می ده: Real Time Simulation Eeror
                      من این مشکل رو توی قسمت اموزش نرم افزار های انالیز و شبیه ساز مطرح کردم ولی کسی جوابی نداده (تا حالا...) شاید برنامه درسته ولی توی proteus مشکل دارم

                      دیدگاه


                        #12
                        پاسخ : مشکل در کار با وقفه برای تایمر 2

                        نوشته اصلی توسط saleh
                        توی برنامه ای که بالا نوشته بودم به a مقدار اولیه نداده بودم وقتی بهش مقدار دادم بازم برنامه جواب نداد البته خود برنامه توی frankline مشکلی پیش نمی اره وerror نمی ده ولی وقتی می خوام با proteus شبیه سازی کنم این eeror رو می ده: Real Time Simulation Eeror
                        من این مشکل رو توی قسمت اموزش نرم افزار های انالیز و شبیه ساز مطرح کردم ولی کسی جوابی نداده (تا حالا...) شاید برنامه درسته ولی توی proteus مشکل دارم
                        سلام. آره این خطا مربوط به پروتئوس هست. فایل پروتوس به همراه برنامه و فایل هگز رو پلود کن (در قسمت اطلاعیه های سایت نحوه پلود هست) شاید بشه کمکی کرد.
                        نیازی به مطرح کردم سوال در چند قسمت نیست اگه محل مناسبی مطرح کرده باشید و دوستان پاسخ سوال رو بدونن کسی دریغ نخواهد کرد.
                        منتظرم.
                        موفق باشید.
                        شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
                        هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
                        چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

                        دیدگاه


                          #13
                          پاسخ : مشکل در کار با وقفه برای تایمر 2

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

                          http://www.4shared.com/file/8022014/...zx_online.html

                          دیدگاه


                            #14
                            پاسخ : مشکل در کار با وقفه برای تایمر 2

                            سلام
                            من برنامه ی تورو روی پروتئوس اجرا کردم و جواب داد .. Error هم نمیده .. فقط به جای اینکه 1 ثانیه یه بار LED تغییر وضعیت بده هر 0.35 ثانیه یه بار این اتفاق میفته ... البته طبق برنامه باید همون 1 ثانیه بشه ...
                            ولی در کل اینکه پروتئوس Error نمیده و LED روشن خاموش میشه شاید پروتئوس تو مشکل داره .. یکی دیگه نصب کن ...

                            دیدگاه


                              #15
                              پاسخ : مشکل در کار با وقفه برای تایمر 2

                              با سلام:
                              پروتئوس من ورژن 6.2 هستش
                              به نظر شما مشکل از کجا هستش؟

                              دیدگاه

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