اطلاعیه

Collapse
No announcement yet.

[گفتگو و تبادل نظر] سوالات برنامه نویسی در کامپایلر CCS

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

    [گفتگو و تبادل نظر] سوالات برنامه نویسی در کامپایلر CCS

    سلام
    من یه سری مشکلات تو برنامه نویسی در CCS دارم که از دوستان می خوام مثل همیشه کمک کنن !
    اگه کسی هم مشکلی تو برنامه نویسی داره اینجا مطرح کنه تا یه تاپیک جامع برای مبتدی هایی مثل من باشه !
    ممنون
    جدیدترین ویرایش توسط شاهرخ مستقیمی; ۱۸:۴۹ ۱۳۹۵/۰۵/۱۷.
    زمان تنها واحد حقیقی اندازه گیریه
    زمان وجود ماده رو اثبات میکنه
    بدون زمان هیچکدوم ما وجود نخواهیم داشت
    زمان یکتاست

    #2
    پاسخ : سوالات برنامه نویسی در کامپایلر CCS

    ‏!
    خوب دوست عزیز مشکلت رو بگو نه اینکه فقط بگی "من مشکل دارم" !!

    دیدگاه


      #3
      پاسخ : سوالات برنامه نویسی در کامپایلر CCS

      همین الان می خواستم بگم ! فک نمی کردم به چند ثانیه هم نکشیده کسی جواب بده !!!
      برای تعریف پورت ها به عنوان خروجی/ورودی دستور SET_TRIS_X یا اینکه از #byte PORT = . . . . استفاده کنیم فرقی داره ؟

      اضافه شده در تاریخ :
      ببخشید اشتباه نوشتم !
      فرق byte TRISx# با SET_TRIS_X

      اضافه شده در تاریخ :
      آیا استفاده از دستور GOTO تو هنگ کردن میکرو تاثیری داره ؟
      زمان تنها واحد حقیقی اندازه گیریه
      زمان وجود ماده رو اثبات میکنه
      بدون زمان هیچکدوم ما وجود نخواهیم داشت
      زمان یکتاست

      دیدگاه


        #4
        پاسخ : سوالات برنامه نویسی در کامپایلر CCS

        برای تعیین ورودی یا خروجی بودن پین ها از دستور set_tris_x استفاده میکنیم. و اما دستور ‎#byte . ببینید این دستور فقط یک نام (یا alias ) به یک آدرس رجیستری میکرو اختصاص میدهد که شما در طول برنامه برای مقدار دهی همان رجیستر ،فقط کافی است نامی که برایش انتخاب کرده اید را به کار برید. (لازم به ذکر است که آدرس تمام رجیسترها در دیتاشیت هر میکرو آورده شده است) .
        حال اگر در این دستور شما برای رجیستر tris نام انتخاب کنید، عملکردش شبیه دستور set_tris_x می شود. یا اگر برای رجیستر های PORT نام انتخاب کنید، عملکردش شبیه دستور output_x می شود.

        اضافه شده در تاریخ :
        نوشته اصلی توسط Robo-amir
        آیا استفاده از دستور GOTO تو هنگ کردن میکرو تاثیری داره ؟
        دستور GOTO خیر! تاثیر چندانی بر عملکرد میکرو ندارد. اما دستوراتی مثل CALL در زبان اسمبلی چون مستقیما با موضوعاتی همچون stack در ارتباط هستند، در مورد استفاده از آنها باید دقت کنید.

        دیدگاه


          #5
          پاسخ : سوالات برنامه نویسی در کامپایلر CCS

          با توجه به دستور #define زیر میشه با یه مثال توضیح بدید هرجا hi داشته باشیم چه اتفاقی میفته ؟
          ((d#define hi(x) (*((int8 *)&x+1

          اینو توی کتابخانه ی 9366 دیدم !(یهٍ EEPROM)
          زمان تنها واحد حقیقی اندازه گیریه
          زمان وجود ماده رو اثبات میکنه
          بدون زمان هیچکدوم ما وجود نخواهیم داشت
          زمان یکتاست

          دیدگاه


            #6
            پاسخ : سوالات برنامه نویسی در کامپایلر CCS

            من احتمال میدم اینطوری باشه که : آدرس x رو درمیاره ، بعد محتویات اون آدرس رو به عدد صحیح 8بیتی تبدیل میکنه و سپس با 1 جمع میکنه و احتمالا اون ستاره سمت چپ هم باید ضرب باشه . البته این سوال رو شما باید در انجمن زبان C مطرح کنید تا بهتر به نتیجه برسید .

            دیدگاه


              #7
              پاسخ : سوالات برنامه نویسی در کامپایلر CCS

              سلام
              من یه برنامه برای را اندازی lcd در css نوشتم ولی lcd اصلا راه اندازی نمیشه oo: برنامه که مشکل نداره پایه های lcd را هم درست وصل کردم.کسی می دونه مشکل چیه؟

              #include "C:\Users\win7\Desktop\ccs compiler\main.h"
              #include <lcd.c>
              #use delay(clock=4000000)
              #define use_portb_lcd TRUE

              void main()
              {
              lcd_init();
              set_tris_d(0x00);
              while(true)
              {
              output_high(PIN_D6);
              delay_ms(100);
              output_low(PIN_D6);
              delay_ms(100);
              lcd_putc("jlkm"
              }
              }
              مواظب افكارت باش كه گفتارت مي شود
              مواظب گفتارت باش كه رفتارت مي شود
              مواظب رفتارت باش كه عادتت مي شود
              مواظب عادتت باش كه شخصيتت مي شود
              مواظب شخصيتت باش كه سر نوشتت مي شود

              دیدگاه


                #8
                پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                سلام
                برنامتو شبیه سازی هم کردی؟(تو Proteus)
                زمان تنها واحد حقیقی اندازه گیریه
                زمان وجود ماده رو اثبات میکنه
                بدون زمان هیچکدوم ما وجود نخواهیم داشت
                زمان یکتاست

                دیدگاه


                  #9
                  پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                  نوشته اصلی توسط omidi2008
                  سلام
                  من یه برنامه برای را اندازی lcd در css نوشتم ولی lcd اصلا راه اندازی نمیشه oo: برنامه که مشکل نداره پایه های lcd را هم درست وصل کردم.کسی می دونه مشکل چیه؟

                  #include "C:\Users\win7\Desktop\ccs compiler\main.h"
                  #include <lcd.c>
                  #use delay(clock=4000000)
                  #define use_portb_lcd TRUE

                  void main()
                  {
                  lcd_init();
                  set_tris_d(0x00);
                  while(true)
                  {
                  output_high(PIN_D6);
                  delay_ms(100);
                  output_low(PIN_D6);
                  delay_ms(100);
                  lcd_putc("jlkm"
                  }
                  }
                  برنامت درسته . من همین الآن ریختم رو میکرو درست کار کرد . تو پروتئوس هم جواب داد . فقط حتما دستور #incude <lcd.c > رو بعد از دستور #define use_portb_lcd TRUE قرار بده .

                  دیدگاه


                    #10
                    پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                    #include <lcd.c> را بعد از #define use_portb_lcd TRUE قرار دادم درست شد :wow:
                    یعنی تو CCS دستورات define باید قبل از include بیاید؟
                    مواظب افكارت باش كه گفتارت مي شود
                    مواظب گفتارت باش كه رفتارت مي شود
                    مواظب رفتارت باش كه عادتت مي شود
                    مواظب عادتت باش كه شخصيتت مي شود
                    مواظب شخصيتت باش كه سر نوشتت مي شود

                    دیدگاه


                      #11
                      پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                      با سلام دوباره ... منظورم byte id = x # بود... یک مثال کاربردی میخوام ... من بجای id یک متغیر و بجای x یک رجیستر گذاشتم ولی خطا میده
                      دست هایی که کمک میکنند از دست هایی که دعا میکنند مقدس ترند....کوروش کبیر

                      دیدگاه


                        #12
                        پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                        سلام
                        منم با این byte # مشکل دارم !
                        وقتی یه متغییر رو به صورت byte id # تعریف کنیم با اینکه بنویسیم int8 id چه فرقی داره ؟
                        ممنون

                        اضافه شده در تاریخ :
                        سلام
                        نوشته اصلی توسط محمد ایجی
                        برنامت درسته . من همین الآن ریختم رو میکرو درست کار کرد . تو پروتئوس هم جواب داد . فقط حتما دستور #incude <lcd.c > رو بعد از دستور #define use_portb_lcd TRUE قرار بده .
                        مگه میشه بدون دسترسی به فایل هدر برنامه رو تست و Compile کرد ؟
                        درسته تو این برنامه ظاهرا main.h هدر میکرو بوده اما باز چه جوری تشخیص دادید چی بوده ؟
                        ممنون

                        اضافه شده در تاریخ :
                        سلام
                        من توی یه برنامه تایع زیرو دیدم !


                        void memory_W(int16 ADDRES ,int16 dat)
                        {
                        WRITE_EXT_EEPROM(ADDRES,hi(dat));
                        ADDRES++;
                        WRITE_EXT_EEPROM(ADDRES,(BYTE)dat);
                        }

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

                        دیدگاه


                          #13
                          پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                          نوشته اصلی توسط Robo-amir
                          سلاممگه میشه بدون دسترسی به فایل هدر برنامه رو تست و Compile کرد ؟
                          درسته تو این برنامه ظاهرا main.h هدر میکرو بوده اما باز چه جوری تشخیص دادید چی بوده ؟
                          ممنون
                          تجربه!!

                          اضافه شده در تاریخ :
                          نوشته اصلی توسط amintlk
                          با سلام ... تاپیک خیلی جالبیه... میشه برای
                          #byte id = x
                          یک مثال کاربردی بیارید... من که هر کاری باهاش میکنم خطا میده
                          ببینید این دستور پیش پردازنده برای انتخاب یک نام مستعار برای یک رجیستر فیزیکی می باشد . آن را با متغییر های 8بیتی اشتباه نگیرید ...
                          برای استفاده از این دستور حتما شما باید به دیتاشیت میکرو اشراف کامل داشته باشید . نحوه کارکردش هم اینطوریه که به جای id یک نام دلخواه انتخاب میکنید (فقط باید قوانین انتخاب نام را رعایت کنید مثلا با عدد شروع نشه و کاراکتر های استاندارد داشته باشه و ....) و به جای x هم باید آدرس یکی از رجیستر های میکرو را بنویسید .
                          یه مثال : من از دستور output_b زیاد خوشم نمیاد و میخواهم که همانند کامپایلر pic basic به صورت خیلی راحت به پورت b دسترسی داشته باشم . یعنی به جای دستور output_b(122) بنویسم portb=122 !!! خوب برای این کار باید از دستور #byte استفاده کنم و برای آدرس رجیستر پورتb یک نام مستعار انتخاب کنم . به این صورت :
                          #bye pB=0x06
                          در دستور فوق ، pB یک نام دلخواه است که من برای انتساب به پورتb انتخاب کرده ام . و عدد 0x06 هم آدرس رجیستر پورتb می باشد . برای اطلاع از آدرس رجیستر های مختلف میکروکنترلر pic16f877a به صفحه 19 از دیتاشیت مراجعه کنید. پس از این دستور دیگر نیازی به استفاده از دستور output_b نیست و میتوان از دستور pB استفاده کرد.....
                          سوالی بود در خدمتیم

                          اضافه شده در تاریخ :
                          نوشته اصلی توسط Robo-amir
                          سلام
                          من توی یه برنامه تایع زیرو دیدم !


                          void memory_W(int16 ADDRES ,int16 dat)
                          {
                          WRITE_EXT_EEPROM(ADDRES,hi(dat));
                          ADDRES++;
                          WRITE_EXT_EEPROM(ADDRES,(BYTE)dat);
                          }

                          این ( BYTE (dat چه بلایی سر متغییر dat میاره بعد میفرستتش ؟
                          ممنون
                          متغیر dat در ابتدا به صورت 16بیتی تعریف شده است ولی بنا به دلایلی باید به صورت 8بیتی ارسال شود . دستور ( BYTE (dat این متغیر را 8بیتی میکند.....

                          دیدگاه


                            #14
                            پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                            سلام .... من همش اسم رجیستر رو وارد می کردم و نه آدرس رجیستر .. واسه همین همش خطا میداد.... اگر بخواهیم یک بیت از این رجیستر رو مقدار دهی کنیم باید چیکار کنیم؟
                            مثلا من رجیستر تایمر 1 رو با نام t1con نام گذاری کردم و حالا می خوام تایمر رو روشن کنم بدون دستور bit# میخوام این کارو بکنم...
                            با تشکر
                            دست هایی که کمک میکنند از دست هایی که دعا میکنند مقدس ترند....کوروش کبیر

                            دیدگاه


                              #15
                              پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                              خوب اصولی ترین روشش استفاده از همون دستور پیش پردازنده #bit می باشد ولی بدون این هم میشه بیت ها رو دستکاری کرد . مثلا شما میخواهید بیت شماره 2 از رجیستر t0con رو تغییر بدید(بدون اینکه مقدار بقیه بیت ها تغییر کند) ، خوب به این منظور فقط کافیه که شما مقدار فعلی رجیستر را با مقدار باینری 0b00000100 یا منطقی کنید (Logical OR)

                              دیدگاه

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