اطلاعیه

Collapse
No announcement yet.

نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

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

    نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

    سلام . در محیط ccs چطوری میشه رجیستر های کنترلی را مقدار دهی کرد ؟ مثلا pir1 که مربوط به وقفه هاست . یا RCSTA , TXSTA , RCREG , ... من میخوام به این رجیستر ها دسترسی داشته باشم و از این طریق نحوه کار با usart و وقفه های مربوطه و ... را کنترل کنم . در codevision این کار ممکن بود و کامپایلر این رجیستر ها را به اسم خودشان میشناخت ... اما من در ccs برای مقدار دهی آنها چکار باید بکنم ؟
    و اما سوال دوم ... من وقتی فایل کتابخانه ای rs_485.c را که توسط خود شرکت نوشته شده است و در محل فایل های کتابخانه ای قرار دارد include میکنم ، کامپایلر از من اررور میگیرد ... یعنی میره از داخل این فایل کتابخانه ای 4-5 تا اررور میگیره ... که مثلا فلان جا ; نذاشتی و ... . میخواستم بپرسم واقعا سازنده این کامپایلر اینقدر شوت بوده است که فایل کتابخانه ایش این همه اررور دارد ؟ من باید چکار بکنم ؟ :cry: :cry: :cry: :cry:
    دلا خوبـــان دل خونيــــن پســـندند
    دلا خون شو که خوبان اين پسندند
    متاع کفر و دين بيآ‌مشتري نيست
    گروهــــي آن گروهي اين پســـندند

    #2
    پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

    تو CCS هم این امکان وجود داره. توسط دستور #byte name=regaddr میتونید اینکار رو بکنید.
    پارامتر name اسمی هستش که خودتون انتخاب میکنید.( مثل نام یه متغیر). regaddr هم آدرس رجیستر دلخواهتون هستش. برای دیدن آدرس رجیستر ها هم باید به دیتاشیت مراجعه کنید. بعد تو ادامه برنامه هم خیلی راحت میتونی باهاش به صورت یه متغیر کار کنی. مقدار بدی ، بخونیش و ...

    دیدگاه


      #3
      پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

      با سلام
      دوست عزیز شما برای این که مستقیما به ریجستری میکروکنترلر دست ببرید با از دو دستور byte# و bit# استفاده کنید ولی اولین کار برای نوشتن دستورات مراجعه به دیتاشیت میکرو هست. شما باید آدرس ریجستر مورد نظرتون رو از داخل دیتاشیت پیدا کنید و سپس دستورات زیر رو بنویسید:

      تصویر آدرس ریجسترهای PIC16F877A :

      حالا برای مثال چندتا از ریجسترها رو در نظر میگیریم:
      byte PIR1=0x0C#
      byte PIR2=0x0D#

      یا میتونید به شکل زیر هم بنویسید:
      byte SINA=0x0C#
      byte SA3ID=0x0D#

      به طور کلی هیچ فرقی نمیکنه که چه اسمی بنویسی مهم فقط آدرس ریجستره! با استفاده از دستور bit# نیز میتونی هر بیتی رو که دوست داری انتخاب کنی مثلا به شکل زیر:
      bit TMR2IF=0x0C.1#
      bit CMIF=0x0D.6#

      البته به خاطر مشکل تایپی علامت # در آخر قرار گرفته که این علامت باید در اول خط و قبل از دستور bit باید قرار گیرد

      درمورد مشکل دوم شما باید بگم که این مورد به برنامه نویسی برمیگرده شما ممکنه که در جایی خطایی انجام داده باشید که از آن بی خبرید! ولی اگه به نوشته خودتون مطمئن هستید یه سری به فروم ccs بزنید و از اونجا میتونید کلی مطلب در مورد این کتابخونه بگیرید درضمن من تو help کامپایلر دیدم که با استفاده از ماژول rs232 و نوشتن یک دستور ساده پروتکل rs-485 رو راه اندازی کزده بود :eek:

      موفق باشید

      دیدگاه


        #4
        پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

        یعنی در کامپایلر CCS حتی بعد از اضافه کردن فایل سرآیند نمیشه اسم پورت ها و رجیسترها رو مستقیم نوشت؟!!! مثلا دستوری مثل TRISD = 0X00; رو بنویسیم error میده؟ اگر اینجوری باشه که خیلی مسخره هست. مطمئنید باید برای رجیسترهای میکروها خودمون اسم و آدرس تعریف کنیم یا من اشتباه متوجه شدم؟ بالاخره بعد از گذشت این همه باید همه این رجسترها با آدرسهاشون جایی تعریف شده باشند!!
        از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
        هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
        اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
        اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
        شاد و موفق باشید

        دیدگاه


          #5
          پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

          بله شما درست متوجه شدید! دستور TRISD=0x70; بهتون ارور میده!! در کامپایلر CCS تنها راه دسترسی به رجیسترها همونیه که در بالا اشاره شد!

          دیدگاه


            #6
            پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

            سلام . خیلی ممنون از راهنماییتون . :applause:در مورد اون فایل سرآیند که من اول برنامه include میکردم و error میداد باید بگم که ، اگر محتویات فایل سرآیند را در برنامه کپی کنم ، هیچ ارروری نمیگیره ... ولی اگر include کنم اررور میگیره ... الله اعلم ... همینطوری هم کار ما راه میفته
            دلا خوبـــان دل خونيــــن پســـندند
            دلا خون شو که خوبان اين پسندند
            متاع کفر و دين بيآ‌مشتري نيست
            گروهــــي آن گروهي اين پســـندند

            دیدگاه


              #7
              پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

              عجب معادل این دستور رو توی CCS چطوری باید نوشت؟
              PORTD = ~PORTD;
              از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
              هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
              اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
              اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
              شاد و موفق باشید

              دیدگاه


                #8
                پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

                نوشته اصلی توسط Study
                عجب معادل این دستور رو توی CCS چطوری باید نوشت؟
                PORTD = ~PORTD;
                output_d(!input_d());

                دیدگاه


                  #9
                  پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

                  جل الخالق، اینجوریش رو دیگه ندیده بودیم، میدونید کد اسمبلی که براش تولید میکنه دقیقا چیه؟
                  من نسخه 4.057 رو دارم میخوام بیشتر با این کامپایلر آشنا بشم Help همین نسخه رو ببینم خوبه؟
                  از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
                  هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
                  اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
                  اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
                  شاد و موفق باشید

                  دیدگاه


                    #10
                    پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

                    نوشته اصلی توسط Study
                    جل الخالق، اینجوریش رو دیگه ندیده بودیم،
                    کجای این موضوع تعجب داره؟؟؟؟؟؟!!! مگه چشه؟؟ :redface:

                    آره همون ورژن 4.057 خوبه . هلپش رو بخونی راه میوفتی :biggrin:

                    دیدگاه


                      #11
                      پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

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

                      دیدگاه


                        #12
                        پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

                        نوشته اصلی توسط Study
                        عجب معادل این دستور رو توی CCS چطوری باید نوشت؟
                        PORTD = ~PORTD;
                        به این شکل هم میتونید عمل کنید
                        #byte portd=xf83
                        portd=!portd;

                        دیدگاه


                          #13
                          پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

                          نوشته اصلی توسط محمد ایجی

                          :redface:

                          آره همون ورژن 4.057 خوبه . هلپش رو بخونی راه میوفتی :biggrin:
                          عجب ... آدم هلپ این نرم افزار را بخواند راه میفتد ؟؟ واقعا ؟؟ این که هلپش خیلی بده ... این جزوه ای که یک نفر نوشته خیلی عالیه ... یعنی میشه با اون یاد گرفت ... ولی متاسفانه نسخه دومش را نمیده بیرون ... منبعش را هم اعلام نمیکنه ... اگه جلد دوم اون میومد بیرون خیلی خوب بود . ولی اینطوری ، از روی هلپش به نظر من خیلی سخته یاد گرفتنش . :cry2:.. هلپش خیلی پخش و پلاست .... . برنامه های sample ی هم که داره ، انقدر سخت و پیچیده هستند ، آدم اصلا ازشون سر در نمیاره ... نمونش همین مثالهاش برای کار با rs-485 . به نظر من برای کامپایلر های basic ، منابع خیلی خیلی بیشتری هست ... من هر چی کتاب آموزشی دارم برای کامپایلر های basic هستش . ولی حتی یک مورد برای ccs کتاب آموزشی ندیدم ...لطفا اگر منبع خوبی برای ایدگیری ccs میدونید معرفی کنید . یا اگر منبع آقای یک نفر ، هک از روی آن آن جزوه را نوشتند معرفی فرمایید . مثلا یک جایی که برنامه های ابتدایی و sample برای بکار گیری امکانات مختلف میکرو توش باشه
                          دلا خوبـــان دل خونيــــن پســـندند
                          دلا خون شو که خوبان اين پسندند
                          متاع کفر و دين بيآ‌مشتري نيست
                          گروهــــي آن گروهي اين پســـندند

                          دیدگاه


                            #14
                            پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

                            از اینکه پیگیری میکنید و پاسخ میدید ممنونم
                            خوب لازمه اینکار این هست که با هر میکروکنترلری که بخوایم کار کنیم بریم دیتاشیت رو نگاه کنیم و بعد بیایم برای هر رجیستری که باهاش کار داریم آدرس تعریف کنیم، یه جورایی اسمبلی بنویسیم سریعتر کار انجام میشه تا بخوایم اینکار رو در برنامه هامون انجام بدیم، مگر اینکه همیشه با یک میکرو خاص کار کنیم و یکروز که بیکار هستیم بشینیم خودمون همه آدرس ها رو معرفی کنیم که اینکار رو باید سازندگان کامپایلر میکردند.
                            آقا سینا آقای ایجی اون جمله رو خطاب به بنده گفتند، شما اگر هنوز اوایل کار هستی باید تلاشی بیشتر از Hlep بکنید ضمن اینکه اگر میخواد با این کامپایلر کار کنید باید Help رو هم بخوانید.
                            از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
                            هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
                            اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
                            اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
                            شاد و موفق باشید

                            دیدگاه


                              #15
                              پاسخ : نحوه مقداردهی رجیسترهای کنترلی در کامپایلر ccs

                              خیلی ممنون ... ولی آخه برای اون کامپایلرهای ضعیف basic اون همه منبع آموزشی هست ، خیلی سخته که آدم قبول کنه هیچ منبع آموزشی برای کامپایلر ccs که اینقدر مامانی و خوشگل و جمع و جور هست نباشه ... االبته مطمئنم که توی اینترنت هست ولی من متاسفانه سرچم خیلی قوی نیست و نتونستم چیزی پیدا کنم .
                              در ضمن خیلی ممنون از تذکری که در مورد خوندن data sheet دادید ... چون من هم به همین نتیجه رسیده بودم که اگر بخواهیم از هر قابلیت میکرو خوب سر در بیاریم و ازش استفاده کنیم ، باید datasheet بخونیم و رجسیتر هاشو خوب بشناسیم . ولی بعدش اشتباها فکر میکردم که برای این کار حتما باید به زبون اسمبلی برنامه بنویسم و چون اسمبلی خیلی ریزه کاری داره و سخته ، کلا بیخیال میشدم . اما اینکه آدم از داخل کامپایلر c هم به تمام رجیسترها دسترسی داشته باشه خیلی اصولیو خوب هست
                              دلا خوبـــان دل خونيــــن پســـندند
                              دلا خون شو که خوبان اين پسندند
                              متاع کفر و دين بيآ‌مشتري نيست
                              گروهــــي آن گروهي اين پســـندند

                              دیدگاه

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