اطلاعیه

Collapse
No announcement yet.

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

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

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

    نوشته اصلی توسط moji_0731
    سلام دوستان. من با دستوره if مشکل دارم وقتی شرط رو بینه یه محدوده میزارم اصلا شرطو در نظر نمیگیره و کلا رد میکنه دستورایه تو شرطم نمیگیره ای یه تیکه از برنامست :sad:

    ;(set_adc_channel(0
    }(++for(i=0;i<=200;i

    ;()key=read_adc

    }(if (900<key<999
    ;goto check
    ...
    { ...
    {
    1-دستور for رو بعد از if بستید پس چه شرط شما بر قرار باشد یا نه کاری انجام نمی دهد(Goto رو بیار قبل بریس بسته)
    2-شرط if شما عملا هیچ وقت اصلا اتفاق نمیفته
    3-یه کم واضح تر بنویسید دستوراتتون رو
    زمان تنها واحد حقیقی اندازه گیریه
    زمان وجود ماده رو اثبات میکنه
    بدون زمان هیچکدوم ما وجود نخواهیم داشت
    زمان یکتاست

    دیدگاه


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

      سلام دوست عزیز با تشکر از پاسخت اما دستور if توی for قرار داره اون کانتر i هم برای اینه که اگه به مدت 5 ثانیه هیچ مقداری از adc گرفته نشد از for خارج بشه و دستوراته دیگرو انجام بده من تویه for یه تاخیر 25ms هم گذاشتم توی دستور if هم میره به check تا مقدار adc خونده شده رو با مقادیر دیگه مقایسه کنه



      ;(set_adc_channel(0

      } (++ for(i=0;i<=200;i

      ;()key=read_adc

      }(if (900<key<999
      ;goto check
      {;goto moto

      }(if (475<key<520
      ;goto check
      };goto select

      }(if (310<key<335
      ;goto check
      {;goto f1

      }(if (245<key<255
      ;goto check
      {;goto light
      ;(delay_ms(25

      {

      این همون قسمت از برنامست که باید مقدار adc با این 4 شرط مقایسه بشه
      حتی من این تاخیر 25ms رو برداشتم به جاش 4 تاخیر 6ms بین هر if گذاشتم باز هم تاثیر نداشت ممنون میشم راهنماییم کنین

      اضافه شده در تاریخ :
      سلام دوستان این مشکلم حل شد برای اینکه از if توی یه محدوده استفاده کنی باید اونو به این صورت بنویسی

      } ((if ((370<key) && (key<410
      .........
      .........
      {


      اگه اونو به به صورت زیر بنویسی تمام دستورات توی if رو بدون در نظر گرفتن شرط اجرا میکنه


      } (if (370<key<410
      .........
      .........
      {

      دیدگاه


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

        نوشته اصلی توسط Robo-amir
        سلام
        وقتی یه متغییر رو به صورت volatile تعریف می کنیم چه تاثیری داره ؟
        آحه یه جا خوندم : (کتاب پروژه های پیشرفته میکروکنترل های PICبه زبانC)
        متغییر های فرار در برنامه هایی که از وقفه ها استفاده می کنند و دارای توابع ورودی و خروجی هستند بسیار مفید هستند . متغییر های فرار توسط کمپایلر بهینه نمیشوند زیرا ممکن است به صورت ناگهانی تغییر کند .

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

        دیدگاه


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

          سلام دوستان
          من چطور میتونم اعداد اعشاری رو رو lcd نمایش بدم اگه میشه 1 برنامه کوچیک برام با lcd بزارید که مثلا (a=10/3) aرو واسم رو lcd نمایش بده. من یه مشکل دیگه هم که دارم اینه که lcd من فقط رو پرت D کار میکنه حتی وقتی از دستور #define use_portb_lcd_true استفاده میکنم.
          ممنون میشم کمک کنید. :rolleyes:

          دیدگاه


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

            سلام
            آقای ایجی عزیز من یه جریان دائم و بدون وقفه دیتای سریال از PLC دارم که بوسیله یه Pic16f876 دریافت میشه البته در حالت عادی تو نرم افزار کاری به دیتای ورودی سریال نداریم فقط هر زمان که یه میکروسوییچ فعال بشه باید دیتای مربوطه رو از PLC بیرون بکشه و رو LCD نمایش بده
            حالا مشکل اینجاست که فقط یه بایت سریال دریافت و نمایش داده میشه و بعد از اون دیگه تو دستور getc() میکرو قفل میکنه
            وقتی کاملتر تست کردم متوجه شدم تا 2 بایت رو میکرو بافر میکنه و از اون به بعد با اینکه تو ورودی سریال دیتا داریم عملا دیگه کاراکتری دریافت نمیشه
            ممنون میشم راهنمایی کنین :smile:

            نمونه کد برای دریافت دیتا:
            if (kbhit()) c=getc

            البته زمانی که از وقفه سریال استفاده میکنم مشکل حل میشه میخواستم بدونم چطور میشه بدون وقفه سریال این مشکلو حلش کرد

            دیدگاه


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

              نوشته اصلی توسط sajjadonline
              سلام دوستان
              من چطور میتونم اعداد اعشاری رو رو lcd نمایش بدم اگه میشه 1 برنامه کوچیک برام با lcd بزارید که مثلا (a=10/3) aرو واسم رو lcd نمایش بده. من یه مشکل دیگه هم که دارم اینه که lcd من فقط رو پرت D کار میکنه حتی وقتی از دستور #define use_portb_lcd_true استفاده میکنم.
              ممنون میشم کمک کنید. :rolleyes:
              سلام دوست عزیز
              1- شما میتوانید مقدار مورد نظر خود را در یک متغییر اعشاری ذخیره کنید و سپس آنرا نمایش دهید .
              float f=0.0;
              f=10.0/3.0;
              printf(lcd_putc,"%f",f);
              2- خط 39 از کتابخانه lcd.c را از حالت کامنت شده در بیاورید .

              اضافه شده در تاریخ :
              نوشته اصلی توسط majid sh
              سلام
              آقای ایجی عزیز من یه جریان دائم و بدون وقفه دیتای سریال از PLC دارم که بوسیله یه Pic16f876 دریافت میشه البته در حالت عادی تو نرم افزار کاری به دیتای ورودی سریال نداریم فقط هر زمان که یه میکروسوییچ فعال بشه باید دیتای مربوطه رو از PLC بیرون بکشه و رو LCD نمایش بده
              حالا مشکل اینجاست که فقط یه بایت سریال دریافت و نمایش داده میشه و بعد از اون دیگه تو دستور getc() میکرو قفل میکنه
              وقتی کاملتر تست کردم متوجه شدم تا 2 بایت رو میکرو بافر میکنه و از اون به بعد با اینکه تو ورودی سریال دیتا داریم عملا دیگه کاراکتری دریافت نمیشه
              ممنون میشم راهنمایی کنین :smile:

              نمونه کد برای دریافت دیتا:
              if (kbhit()) c=getc

              البته زمانی که از وقفه سریال استفاده میکنم مشکل حل میشه میخواستم بدونم چطور میشه بدون وقفه سریال این مشکلو حلش کرد
              سلام دوست گرامی
              در مرحله اول اینکه تا حد امکان سعی کنید کار ها را با استفاده از وقفه ها پیش ببرید .
              در استفاده از تابع kbhit هم اگر به صورت زیر استفاده شود بهتر است :
              while(!kbhit());
              c=getc();

              پ ن : دوست گرامی لطف کنید من بعد اسم بنده را در پستی نیاورید . زیرا در این انجمن اساتید گرانقدری حضور دارند که آوردن اسم بنده اصلا جایز و جالب نیست . ممنون .

              دیدگاه


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


                سلام کسی میدونه پسوند A در میکروهای PIC بیانگر چیه؟
                مثلا تفاوت PIC16f627 با PIC16f627A چی هستش؟

                دیدگاه


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

                  با سلام. بچه ها من چیکار کنم ؟ برنامه ای که با ccs مینویسم توی poroteus قشنگ کار میکنه ولی توی عمل اصلا جالب کار نمیکنه.انگار کلا برنامه مشکل داره. چیکار گنم که همونجورکه تو پروتیوس کار میکنه کار کنه؟؟؟؟ اینم بگم که توی برنامم هم از وقفه تایمر یک استفاده شده. هم وقفه پورت b و هم adc . برنامم حدود 400 خطه . حالا که تموم شده تو عمل کار نمیکنه!!!!!! موندم کجای برنامر نگاه کنم

                  اضافه شده در تاریخ :
                  کسی نظر خاسی نداره؟
                  زیر برنامه وقفم هم این پایین گداشتم. چیزی از قلم ننداختم؟؟
                  #int_timer1
                  void Timer1_isr()
                  {برنامه
                  return;}

                  اضافه شده در تاریخ :
                  آقت من فهمیدم زمانی که وقفه تایمر یک و وقفه پورت b فعال میشه باهم قاط میزنه مدار این خطار proteus نمیگیره. چیکار کنم که باهم فعال نشن؟؟ 2 روزه سرش گیرم یکی کمکم کنه انصافا
                  طب اسلامی

                  دیدگاه


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

                    متأسفانه من با CCS کار نکردم تا دقیق راهنماییتون کنم. تو زیربرنامه وقفه اول بسم الله وقفه ی عمومی رو غیر فعال کنین بعد که دیدین کدوم وقفه اتفاق افتاده و برنامه مربوطه اجرا شد،وقفه رو فعال کنین.احتمال میدم ایراد از این باشه.

                    دیدگاه


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

                      خودمم همین فکر میکنم آقا شاهرخ ولی این کارم میکنم اصلا هیچ تغییری نمیکنه. انگار هیچکار نکردم اصلا.منظورتون از وقفه عمومی همون کلیه هستش؟؟ intcon بیت هفتم یعنی؟
                      طب اسلامی

                      دیدگاه


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

                        بله منظورم همون بیت هفتم از intcon هست که کلا اینتراپت رو خاموش میکنه.همین که وارد زیربرنامه وقفه شدین این بیت رو صفر کنین،تو آخر زیربرنامه ی وقفه هم همین بیت رو 1 بکنین.
                        انشاالله درست بشه.اگه نشد... خلاصه باید بشه!! کار نشد نداره! :applause: اونقدر باهاش ور برین تا بالاخره جواب بده! :agree: مگه دست خودشه! :twisted: :mrgreen:

                        دیدگاه


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

                          مرسی آقا ساهرخ ولی نشد. نشد.عجب گیری افتادما.اصلا انگار نه انگار که بیتش صفر میکنم. کسی نیس که با 2 تا از وقفه ها تو ccs کار کرده باشه ؟؟درستشه برنامم مثل هلو کار میکنه ها البته اگر جای دیگش به مشکل نخوره.تو بیسیک چقد راحت بودیما. این سی سی اس خیلی گیره .عجیبه!!

                          اضافه شده در تاریخ :
                          یعنی هیچکس با سی سی اس کار نکرده!!!! موندم. زمینیکه تو یه حلقه هستم و تایمر داره میشماره زمانیکه یه کلید فشار میدم میره تو وقفه کلیده و باید به یه متغییر 1 عدد اضافه کنه ولی زمانیکه میره تو وقفه کلید اون متغییر خود به خود صفر میشه!!!چیکار کنم ؟؟ کسی نظری نداره؟

                          اضافه شده در تاریخ :
                          ایول. بالاخره درست شد. شاید باورتون نشه ولی همون اوله اول که متغییر هار عدد میدیم من اون متغییر صفر کرده بودم. هروقت تو 2 تا وقفه میره انگار میره از همون بالا برنامه اجرا میشه و اون متغییر صفر میکنه!!!!!! تاهالا به همچین مشکلی نخورده بودم!!!!!!!!!!!!

                          اضافه شده در تاریخ :
                          بازم سلام. بجه ها منکه برناممو مینویسم تموم میشه واس اولین بار قشنگ کار میکنه ولی وقتی از برق میکشم دوباره میزنم تو برق تغذیر اولش قاط میزنه. power on reset هم فعال کردم ولی فرقی نکردش. باید چیکار کنم به نظرتون؟؟اصلا انگار برنامه از تابع اصلی شروع به کار نمیکنه. میره واس خودش تو یه تابع دیگه!!!!!!البته تئ پروتیوس درست اجرا میشه ها تو عمل ایجوریه

                          اضافه شده در تاریخ :
                          انصافا این بچه هایی که ccs بلدن این همه پست دادن اینجا کجا هستن!!!! انگار اصلا هیچکی نیست تو این انجمن
                          طب اسلامی

                          دیدگاه


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

                            نوشته اصلی توسط mahdifaheca
                            انصافا این بچه هایی که ccs بلدن این همه پست دادن اینجا کجا هستن!!!! انگار اصلا هیچکی نیست تو این انجمن
                            درسته که CCS زیاد بلد نیستم! ولی عوضش هستم!! همینجام!! :mrgreen:

                            میتونی اول ورود توی هر زیر برنامه یه LED روشن خاموش کنی تا اینجوری بفهمی چی به چی هست؟؟

                            دیدگاه


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

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

                              دیدگاه


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

                                اگه mikroC بود بهتر میشد!!
                                یه سوال حساس!! از سورس برنامه ت که تیکه تیکه نوشتی و اضافه کردی،خودت backup برداشتی؟(بعد از اضافه کردن قسمت جدید یا تغییرات جدید) شبیه سازی درست جواب میده؟ اگه تونستی سریال میکرو رو راه بنداز تو پروتئوس متغیرهای هرجایی که لازم هست رو با سریال بفرست.خییییییلییییییی به درد میخوره.با این روش مشگل گشایی ها کردم!! :nerd:
                                اگه تو پروتئوس درست کار کرد، با همون LED چک کن.متن برنامه رو هم یه خرده بیشتر دقت کن....شاید یه جا یه اشتباه محاسباتی داری...

                                دیدگاه

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