اطلاعیه

Collapse
هیچ اطلاعیه ای هنوز ایجاد نشده است .

آموزش pic ccs

Collapse
X
  • فیلتر
  • زمان
  • نمایش
پاک کردن همه
new posts

  • #16
    نوشته اصلی توسط javadkom نمایش پست ها
    یه پیشنهاد
    خدمتتون تسلیت عرض می کنم
    به نظرم اگه برید سراغ موضوعات اصلی بهتره باشه مثلا آموزش کار با ( i2c یا spi و...) چون کسانی که میکرو کار می کنند یه حداقل آشنایی با زبان c دارند.
    با تشکر از شما
    سلام و ممنون
    برای اینکه آموزش کامل باشه با همین روند پیش میرم ولی سعی میکنم تو همین یکی دو روز به پروتکل های اصلی برسم

    یاحق

    نظر


    • #17
      سلام

      دستور شرطی
      while

      یک حلقه ایجاد میکند و تا زمانی که شرط داخل پرانتز صحیح (TRUE) باشد دستور بعد از پرانتز را انجام میدهد


      کد:
      while(A==1)
      B=B+1;
      نکته: برای انجام چند دستور داخل شرط از {} استفاده میکنیم


      کد:
      while(A==1)
      {
      B=B+1;
      C=C+1;
      }
      یاحق

      نظر


      • #18
        سلام

        دستور شرطی
        do while

        یک حلقه ایجاد میکند و یک بار حتی در صورتی که شرط صحیح نباشد دستورات را اجرا میکند . تا زمانی که شرط داخل پرانتز صحیح (TRUE) باشد دستور بعد از پرانتز را انجام میدهد


        کد:
        do
        B = 2;
         while (A == 1);
        نکته: برای انجام چند دستور داخل شرط از {} استفاده میکنیم


        کد:
        do
        {
        B = 2;
        c = 3;
        }
         while (A == 1);
        یاحق

        نظر


        • #19
          سلام

          دستور شرطی FOR

          برای تکرار یک یا چند دستور به تعداد دفعات مشخص بکار میرود

          کد:
          for (A=0;A<=10;A++)
          B = A;
          نکته: برای انجام چند دستور داخل شرط از {} استفاده میکنیم


          کد:
          for (A=0;A<=10;A++)
          {
          B = A;
          C = B+1;
          }
          یاحق

          نظر


          • #20
            سلام

            دستور شرطی switch

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

            نکته :
            میتوان بینهایت CASE ایجاد کرد (موردهای متفاوت)

            بعد از دستور آخر هر CASE باید از دستور BREAK برای خروج از حلقه استفاده شود

            مورد DEFAULT را در آخر قرار میدهیم که در صورتی که شرط با هیچ کدام از CASE های تعریف شده برابر نبود مقدار DEFAULT برای ما برگردانده شود

            کد:
            switch (A) {
            
            
            case 0:B=1;
                
            break;
            
            
            case 1:B=2;
            
            
            break;
            
            
            default:B=255;
            
            break;
                
                }
            یا حق

            نظر


            • #21
              سلام

              دستور RETURN

              مقدار مورد نظر ما را به متغییر برمیگرداند و همزمان از حلقه خارج می شود

              در مثال زیر مقدار A برابر با 10 میشود

              کد:
              int test()
              {
              B = 10;
              
              
              return b;
              }
              
              
              void main()
              {
              
              
              A = test();
              
              
              }
              یاحق

              نظر


              • #22
                سلام

                برچسب گذاری یا لیبل

                برچسب گذاری بوسیله دونقطه (COLON) انجام میشود ( : )

                و به وسیله دستور GOTO به برچست یا لیبل مورد نظر میرویم

                کد:
                label1:
                
                A = 1;
                
                
                goto label1;
                یا حق

                نظر


                • #23
                  سلام

                  دستور BREAK

                  در هرجا بکار رود از حلقه (LOOP) یا سویچ (SWITCH) مورد نظر در همانجا بدون انجام دستورات بعد از آن خارج میشود

                  در مثال زیر A و B مقدار میگیرند ولی C و D مقدار نمیگیرند و مقدار قبلی خود را حفظ میکنند

                  کد:
                  VOID test()
                  {
                  A= 0;
                  
                  
                  B= 1;
                  
                  
                  BREAK;
                  
                  
                  C= 2;
                  
                  
                  D= 3;
                  }
                  دستور continue

                  این دستور برای از سر گیری حلقه بکار برده میشود

                  در مثال زیر تا زمانی که مقدار A به 10 نرسد حلقه به ابتدا برمیگردد و دوباره دستورات را اجرا میکند

                  کد:
                  VOID test()
                  {
                  A++;
                  
                  
                  B= 1;
                  
                  
                  IF (A <= 10)
                  continue;
                  
                  
                  C= 2;
                  
                  
                  D= 3;
                  }
                  یاحق

                  نظر


                  • #24
                    سلام

                    تعریف متغییر

                    انواع متعددی متغیر , ثابت و داده وجود داره که من برای شروع ساده ترین و کاربردی ترین آموزش میدم و در آموزش های بعدی مدل های مختلف اونو در مثال ها آموزش میدم

                    انوع متغیر در ccs

                    متغیر های مشترک
                    int1
                    int8
                    int16
                    int32
                    float
                    (اعشاری)

                    متغیر های سری 24 بیتی به بالا

                    int48
                    int64


                    کد:
                    int1 data;
                    
                    
                    int8 a,b,c,d;
                    
                    
                    int16 e;
                    
                    
                    int32 f,g;
                    
                    
                    float h,i;
                    یاحق

                    نظر


                    • #25
                      سلام

                      استفاده از پین ها و پورت ها بعنوان خروجی و ورودی

                      در کامپایلر ccs در حالت کلی نیازی به تعریف خروجی ها و ورودی ها در ابتدای برنامه نیست و خود کامپایلر این کار را انجام میدهد البته دستوراتی برای این کار وجود دارد که بعدا به برسی آنها میپردازیم

                      دستور output_high(pin) مقدار پین مورد نظر را یک (high) میکند

                      کد:
                      output_high(PIN_B0);

                      دستور output_low(pin) مقدار پین مورد نظر را صفر (low) میکند

                      کد:
                      output_low(PIN_B0);


                      دستور output_x (value) برای مقدار دهی به یک پورت استفاده میشود

                      کد:
                      OUTPUT_B(0xf0);

                      دستور output_bit (pin, value) مقدار پین مورد نظر را از متغیر (value) میگیرد

                      نکته:متغیر باید 1 بیتی باشد در غیر اینصورت مقدار بیت اول متغیر را فقط در نظر میگیرد


                      کد:
                      output_bit( PIN_B0, 0);
                      دستور output_float (pin) پین مورد نظر را در حالت open collector خروجی میکند

                      نکته:در این حالت باید پایه با مقاومت پول اپ (pull up) شود

                      کد:
                      output_float(pin_B0);
                      دستور input (pin) مقدار پین مورد نظر را بعنوان ورودی میگیرد

                      نکته:در صورتی که خارج از شرط استفاده شود و برای مقدار دهی متغیر باشد متغیر باید 1 بیتی باشد در غیر اینصورت مقدار بیت اول متغیر را تغییر میدهد


                      کد:
                      A=input(PIN_B1);

                      دستور input_state (pin) حالت پین را از لحاظ HIGH یا LOW برمیگرداند

                      نکته:در صورتی که خارج از شرط استفاده شود و برای مقدار دهی متغیر باشد متغیر باید 1 بیتی باشد در غیر اینصورت مقدار بیت اول متغیر را تغییر میدهد


                      کد:
                      A = input_state (pin_B0);
                      دستور input_change_x () حالت پورت را چک میکند و با بار قبل که همین دستور را اجرا کرده باشید مقایسه میکند در صورتی که مقدار پین های پورت تغییر کرده باشد عدد 1 (TRUE) و اگر تغییر نکرده باشد عدد 0 (FALSE) را برمیگرداند

                      نکته:در صورتی که خارج از شرط استفاده شود و برای مقدار دهی متغیر باشد متغیر باید 1 بیتی باشد در غیر اینصورت مقدار بیت اول متغیر را تغییر میدهد


                      کد:
                      A = input_change_b( );
                      یاحق

                      نظر


                      • #26
                        سلام

                        دستورات UART در CCS

                        برای استفاده از UART در CCS در ابتدا باید تنظیمات #USE RS232 را فراخوانی کنیم

                        در مثال زیر پین های سخت افزاری سریال و نرخ داده (سرعت انتقال) 9600 تنظیم شده
                        کد:
                        #use rs232(UART1,baud=9600)
                        در مثال زیر از پین B6 و B7 برای UART بصورت نرم افزاری استفاده شده و با استفاده از دستور INVERT میتوان بصورت مستقیم و بدون نیاز به MAX232 و مبدل های دیگر مستقیم به کامپیوتر متصل کرد

                        کد:
                        #use rs232(baud=9600, xmit=PIN_B6,rcv=PIN_B7,INVERT)
                        دستور STREAM به ما اجازه میدهد که بیش از یک پورت سریال تعریف کنیم

                        کد:
                        #use rs232(baud=9600, xmit=PIN_B6,rcv=PIN_B7,INVERT,STREAM=RS1)
                        
                        
                        #use rs232(baud=9600, xmit=PIN_B5,rcv=PIN_B4,STREAM=RS2)
                        
                        
                        #use rs232(baud=115200, xmit=PIN_B3,STREAM=RS3)
                        راسال کاراکتر با دستور putc انجام میشود

                        کد:
                        putc("A");
                        در صورت داشتن چند پورت UART و استفاده از STREAM دستور زیر را استفاده میکنیم

                        کد:
                        fputc ("A", stream);
                        دریافت کاراکتر با دستور getc انجام میشود

                        کد:
                        value = getc ();
                        در صورت داشتن چند پورت UART و استفاده از STREAM دستور زیر را استفاده میکنیم

                        کد:
                        value = fgetc (stream);
                        راسال رشته با دستور puts انجام میشود

                        کد:
                        puts ( "iranchip");
                        در صورت داشتن چند پورت UART و استفاده از STREAM دستور زیر را استفاده میکنیم

                        کد:
                        fputs ( "iranchip", stream);
                        دریافت رشته با دستور gets انجام میشود

                        کد:
                        value = gets ();
                        در صورت داشتن چند پورت UART و استفاده از STREAM دستور زیر را استفاده میکنیم

                        کد:
                        value = fgets (stream);
                        دستور kbhit در صورتی که داده ایی بر روی پایه دریافت پورت UART دریافت شود مقدار یک (TRUE) را برمیگرداند در غیر اینصورت مقدار صفر(FALSE)

                        کد:
                        value = kbhit();
                        در صورت داشتن چند پورت UART و استفاده از STREAM دستور زیر را استفاده میکنیم

                        کد:
                        value = kbhit (stream);
                        دستور printf برای ارسال انواع داده اعم از کاراکتر , رشته , اعشاری , اعداد صحیح و هگزال و ..... بکار میرود

                        کد:
                        printf("iranchip %c %s %u %lu %X %f \n\r",A,B,C,D,E,F);
                        نکته:

                        c% متغیر را بصورت کاراکتر نمایش میدهد

                        s% متغیر را بصورت رشته نمایش میدهد

                        u% متغیر را بصورت عدد صحیح 8 بیتی نا منفی نمایش میدهد

                        d% متغیر را بصورت عدد صحیح 8 بیتی نمایش میدهد

                        lu% متغیر را بصورت عدد صحیح +8 بیتی نا منفی نمایش میدهد

                        ld% متغیر را بصورت عدد صحیح +8 بیتی نمایش میدهد

                        x% متغیر را بصورت هگزال 8 بیتی نمایش میدهد

                        lx% متغیر را بصورت هگزال +8 بیتی نمایش میدهد

                        f% متغیر را بصورت عدد اعشاری نمایش میدهد


                        یاحق

                        نظر


                        • #27
                          سلام

                          دستورات I2C در CCS و نحوه استفاده از آن

                          برای تنظیم I2C از دستور زیر استفاده میکنیم

                          در مثال پایین

                          MASTER حالت I2C

                          FAST سرعت انتقال داده

                          SCL پایه همزمان سازی

                          SDA پایه انتقال داده

                          کد:
                          #use i2c(Master,Fast, scl=PIN_C3, sda=PIN_C4)
                          دستور i2c_start در زمان شروع انتقال داده START با نماد ( S ) و یا در زمان تغییر حالت RESTART با نماد ( R ) بکار میرود

                          کد:
                          
                          
                          کد:
                          i2c_start();
                          


                          دستور
                          i2c_stop در پایان و بعد از اتمام دستورات I2C بکار میرود و نماد آن ( P ) می باشد

                          کد:
                          i2c_stop();


                          دستور i2c_write برای ارسال آدرس و داده بکار میرود

                          کد:
                          i2c_write (data);
                          دستور i2c_read برای در یافت داده بکار میرود

                          کد:
                          data = i2c_read ();

                          نکته : دستور i2c_read در داخل پرانتز مقدار صفر (NACK) و 1 (ACK) را میگیرد که در حالت عادی مقدار آن یک (ACK) میباشد و زمانی که شما آخرین بایت را میخوانید باید مقدار آن را صفر(NACK) کنید


                          کد:
                          data1 = i2c_read (1);
                          
                          
                          data2 = i2c_read (0);
                          در مثال زیر بر روی حافظه 24AA512 از نوع EEPROM با ظرفیت 512K مینویسیم

                          مقدار 0XA0 آدرس حافظه

                          ADDRH و ADDRL آدرس موقعیتی از حافظه که میخواهیم بر روی آن بنویسیم ( این آی سی به دلیل 16 بیتی بودن آدرس ها باید از 2 آدرس HIGH و LOW استفاده شود)

                          DATA مقداری که میخواهیم بر روی حافظه ذخیره شود

                          کد:
                          i2c_start();
                          
                          
                          i2c_write(0xA0);
                          
                          
                          i2c_write(ADDRH);
                          
                          
                          i2c_write(ADDRL);
                          
                          
                          i2c_write(DATA);
                          
                          
                          i2c_stop();
                          در مثال زیر از روی حافظه 24AA512 از نوع EEPROM با ظرفیت 512K می خوانیم

                          START دوم برای تغییر حالت به خواندن میباشد (RESTART) و بیت R/W در آدرس نیز همانطور که در دیتاشیت ذکر شده تغییر کرده برای نوشتن (0XA0) و برای خواندن (0XA1)

                          کد:
                          i2c_start();
                          
                          
                          i2c_write(0xA0);
                          
                          
                          i2c_write(ADDRH);
                          
                          
                          i2c_write(ADDRL);
                          
                          
                          i2c_start();
                          
                          
                          i2c_write(0xA1);
                          
                          
                          DATA = i2c_read (0);
                          
                          
                          i2c_stop();
                          نکته : پایه های I2C باید بوسیله مقاومت PULL UP شوند

                          یاحق

                          نظر

                          صبر کنید ..
                          X