اطلاعیه

Collapse
No announcement yet.

and و or بیتی

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

    and و or بیتی

    سلام خدمت دوستان
    یه سوال در مورد and و or داشتم.
    توی if اینا برای مقایسه ی دو تا شرط به کار می رن
    اما اگه اینجوری کنیم چجوری محاسبه میشه؟؟؟ من کلا گیج شدم و نمی دونم چطوری حساب کتاب داره ولی استاد اینجوری گفته:

    chr portX // این برای معرفی پورت X که با 74HC595 ساخته شده هستش
    ... // کد های دیگه
    //حالا توی یه تابع برای نوشتن در پورت X
    //اول اومده بیت به بیت چک کرده اونم با این دستور
    if (portX & 0b10000000)
    //کد های در رابطه با دادن کلاک و دیتا سریال

    این وسط اون and چطوری حساب کتاب می کنه که true و false پیدا بشه؟

    و اینکه راهی هست که بشه مثل پورت های میکرو کنترلر که می تونی یا یکیشون رو مجزا کنترل کنی یا همرو باهم هشت بیتی کنترل کنی با 595 هم انجام داد؟
    یعنی تابعی باشه که اگه گفتم portX.0 رو یک کنه بقیه رو تو همون شرایط نگه داره و اون رو 0 کنه. یعنی مثل رشته ها که میشه از وسطش ویرایش کرد .
    ممنون میشم کمک کنین ( کدویژن و بسکام هستم)
    همیشه کامل توضیح بدهیم تا جواب کامل بگیریم.
    لطفا برای تشکر روی دکمه تشکر بزنید و بخاطر این پست نزنید که تایپیک شلوغ نشود
    تایپیک های من:
    حل تمام مشکلات atmega128a (eca.ir)
    آموزش کار با سایت (eca.ir)

    #2
    پاسخ : and و or بیتی

    نوشته اصلی توسط electromohammad نمایش پست ها
    سلام خدمت دوستان
    یه سوال در مورد and و or داشتم.
    توی if اینا برای مقایسه ی دو تا شرط به کار می رن
    اما اگه اینجوری کنیم چجوری محاسبه میشه؟؟؟ من کلا گیج شدم و نمی دونم چطوری حساب کتاب داره ولی استاد اینجوری گفته:

    chr portX // این برای معرفی پورت X که با 74HC595 ساخته شده هستش
    ... // کد های دیگه
    //حالا توی یه تابع برای نوشتن در پورت X
    //اول اومده بیت به بیت چک کرده اونم با این دستور
    if (portX & 0b10000000)
    //کد های در رابطه با دادن کلاک و دیتا سریال

    این وسط اون and چطوری حساب کتاب می کنه که true و false پیدا بشه؟

    و اینکه راهی هست که بشه مثل پورت های میکرو کنترلر که می تونی یا یکیشون رو مجزا کنترل کنی یا همرو باهم هشت بیتی کنترل کنی با 595 هم انجام داد؟
    یعنی تابعی باشه که اگه گفتم portX.0 رو یک کنه بقیه رو تو همون شرایط نگه داره و اون رو 0 کنه. یعنی مثل رشته ها که میشه از وسطش ویرایش کرد .
    ممنون میشم کمک کنین ( کدویژن و بسکام هستم)
    سلام
    اول این که زبان C مقادیر بولین نداره، پس true و false هم نداره و ساختار های شرطی با توجه به 0 بودن یا نبودن تصمیم میگیرن. یعنی شما اگر بنویسید if(0) این شرط غلط در نظر گرفته و بلوک زیرش اجرا نمیشه، و اگر بنویسید if(1) یا if(1000) یا هر چیز غیر صفر دیگه ای، شرط درست در نظر گرفته شده و بلوک زیرش اجرا میشه. اصولا وقتی شما از شروط و عملیات منطقی مثل مساوی بودن، بزرگتر و کوچکتر بودن و... هم استفاده میکنید، با توجه به صحیح بودن اون عملیات 0 یا 1 داخل پرانتز if بر میگردونه و if با توجه به 0 یا 0 نبودن اون عدد تصمیم میگیره بلوکش رو اجرا کنه یا نه.
    وقتی شما دوتا متغیر رو با هم and، or یا xor بیتی میکنید، این دو عملوند بیت به بیت متناظر با هم and، or یا xor بیتی میشن و جواب رو حاصل میدن. با این تفاسیر وقتی شما یک عملیات بیتی رو داخل پرانتزهای if بذارید، ابتدا عملیات بیتی انجام میشه و بعد با توجه به 0 بودن یا نبودن حاصل عملیات بیتی، تصمیم گرفته میشه که شرط درسته یا نه.

    دیدگاه


      #3
      پاسخ : and و or بیتی

      سلام خدمت دوستان
      راهی هست که بشه بدون تغییر دادن اطاعات بقیه ی پایه های 74hc595 فقط یکیشون رو تغییر داد؟ مثل پایه های میکروکنترلر که یا می تونی بگی portx.x = 1 یا portx.x = 0b00000001
      ممکنه راه حلشو با استفاده از عمگرا ی منطقی بگین؟ اگه از آرایه ها استفاده کنم چی میشه؟ اگه char تعریف کنم کل پورت 8 بایت میشه یعنی زمان محاسبه ی طولانی تر
      ممکنه به صورت بیتی char رو ویرایش کرد؟ مثلا بگیم

      void portx.0(unsigned char val){
      if(val) // مقدار قرار بولی باشه (1 / 0)
      portx & 0b00000001;
      else
      portx & 0b00000000;
      } // البته بگم که استفاده از عملگر and باعث میشه بقیه ی بیت ها 0 بشن که یعنی دستکاری میشن. من نمی خوام اینجوری بشه باید چی کار کنم؟
      unsigned char portx=0;
      // جای تعریف متغییره درسته؟؟؟
      void main(void){

      portx.0(1)

      }
      همیشه کامل توضیح بدهیم تا جواب کامل بگیریم.
      لطفا برای تشکر روی دکمه تشکر بزنید و بخاطر این پست نزنید که تایپیک شلوغ نشود
      تایپیک های من:
      حل تمام مشکلات atmega128a (eca.ir)
      آموزش کار با سایت (eca.ir)

      دیدگاه


        #4
        پاسخ : and و or بیتی

        نوشته اصلی توسط electromohammad نمایش پست ها
        سلام خدمت دوستان
        راهی هست که بشه بدون تغییر دادن اطاعات بقیه ی پایه های 74hc595 فقط یکیشون رو تغییر داد؟ مثل پایه های میکروکنترلر که یا می تونی بگی portx.x = 1 یا portx.x = 0b00000001
        ممکنه راه حلشو با استفاده از عمگرا ی منطقی بگین؟ اگه از آرایه ها استفاده کنم چی میشه؟ اگه char تعریف کنم کل پورت 8 بایت میشه یعنی زمان محاسبه ی طولانی تر
        ممکنه به صورت بیتی char رو ویرایش کرد؟ مثلا بگیم

        void portx.0(unsigned char val){
        if(val) // مقدار قرار بولی باشه (1 / 0)
        portx & 0b00000001;
        else
        portx & 0b00000000;
        } // البته بگم که استفاده از عملگر and باعث میشه بقیه ی بیت ها 0 بشن که یعنی دستکاری میشن. من نمی خوام اینجوری بشه باید چی کار کنم؟
        unsigned char portx=0;
        // جای تعریف متغییره درسته؟؟؟
        void main(void){

        portx.0(1)

        }
        باسلام.
        اگه از نحوه ارسال دیتا به شیفت رجیستر فاکتور بگیرید میشه با or منطقی و شیفت دادن یه کارهایی کرد.
        مثلا شما یک دیتا هشت بیتی مثلا(char) تعریف کنید که همیشه محتوی دیده ارسالی به شیفت رجیستر باشه.

        [COLOR=#000000][FONT=Consolas]#define QA 0
        #define QB 1
        #define QC 2
        #define QD 3
        #define QE 4
        #define QF 5
        #define QG 6
        #define QH 7


        char data[];


        data |= (1<<QA);
        [/FONT][/COLOR]
        مثلا در کد بالا پین َQA شیفت رجیستر یک شده.(البته اگه منطق شیفت رجیستر اکتیو لو باشه باید یک نات پشت پرانتز قرار بدیم)(البته من بلد نیستم ولی فکر میکنم با ماکرو ها بشه کلا اون عبارت رو مثل تابع تعریف کرد)

        دیدگاه


          #5
          پاسخ : and و or بیتی

          سلام خدمت دوستان
          ممنون
          برای ارسال به شیفت رجیستر از استادم یاد گرفتم
          ولی مشکل من تو ارسال اطلاعات نیست
          تو ویرایش کردن متغییر به صورت بیتی هستش
          چطوری فقط یه بیت شو می تونم صفر و یک کنم بدون اینکه تو بقیه ی بیت ها تغییر ایجاد بشه؟
          مثلا پورت a توی اتمگا 128 رو میشه به صورت بیتی و بایتی خروجی داد
          اما پورت f (فکر کنم پورت f بود) رو فقط میشه به صورت بایتی اطلاعات نشون داد و صفر و یکشون کرد.
          حالا به فرض من می خوام تابعی براش درست کنم که وقتی گفتم یدونه از پایه هاش یک بشه به طور اتوماتیک مقداری که الان روی پورت f هست رو بخونه بعد فقط همون بیت مربوط به پایه ی مورد نظرم رو ویرایش کنه و دوباره همرو با هم نشون بده
          اینطوری انگار فقط یه پایه رو دستکاری کردم (ممکنه IDE به طور اتوماتیک این کار رو بکنه ولی من ساز و کارشو می خوام)
          سر شیفت رجیستر هم می خوام همین کار رو بکنم.
          ممکنه لطف کنین بگین چجوری میشه که با عملگر های منطقی محاسبه انجام داد و بیت دلخواهی رو از متغییر یه بایتی ویرایش کرد؟
          ممنون دوستان
          همیشه کامل توضیح بدهیم تا جواب کامل بگیریم.
          لطفا برای تشکر روی دکمه تشکر بزنید و بخاطر این پست نزنید که تایپیک شلوغ نشود
          تایپیک های من:
          حل تمام مشکلات atmega128a (eca.ir)
          آموزش کار با سایت (eca.ir)

          دیدگاه


            #6
            پاسخ : and و or بیتی

            با درود
            منظورت این ؟

            PORTC|=0b00000001 // برای ست کردن بیت مورد نظر
            PORTC&=0b11111110 // برای صفر کردن بیت مورد نظر

            دیدگاه


              #7
              پاسخ : and و or بیتی

              نوشته اصلی توسط electromohammad نمایش پست ها
              سلام خدمت دوستان
              ممنون
              برای ارسال به شیفت رجیستر از استادم یاد گرفتم
              ولی مشکل من تو ارسال اطلاعات نیست
              تو ویرایش کردن متغییر به صورت بیتی هستش
              چطوری فقط یه بیت شو می تونم صفر و یک کنم بدون اینکه تو بقیه ی بیت ها تغییر ایجاد بشه؟
              مثلا پورت a توی اتمگا 128 رو میشه به صورت بیتی و بایتی خروجی داد
              اما پورت f (فکر کنم پورت f بود) رو فقط میشه به صورت بایتی اطلاعات نشون داد و صفر و یکشون کرد.
              حالا به فرض من می خوام تابعی براش درست کنم که وقتی گفتم یدونه از پایه هاش یک بشه به طور اتوماتیک مقداری که الان روی پورت f هست رو بخونه بعد فقط همون بیت مربوط به پایه ی مورد نظرم رو ویرایش کنه و دوباره همرو با هم نشون بده
              اینطوری انگار فقط یه پایه رو دستکاری کردم (ممکنه IDE به طور اتوماتیک این کار رو بکنه ولی من ساز و کارشو می خوام)
              سر شیفت رجیستر هم می خوام همین کار رو بکنم.
              ممکنه لطف کنین بگین چجوری میشه که با عملگر های منطقی محاسبه انجام داد و بیت دلخواهی رو از متغییر یه بایتی ویرایش کرد؟
              ممنون دوستان
              باسلام.
              دوست من بالا رو اگه با دقت خونده باشی توضیح دادم.با توجه به عملکرد and و or( که جدول صحت اونها در اینترنت موجوده)میشه فهمید که اگه چیزی با 1 or بشه اون بیت قطعا 1 خواهد شد(به صفر و یک بودن بستگی نداره).اگه بیتی با 0 and بشه اون بیت قطعا صفر خواهد شد.ما ازین دوتا خاصیت استفاده میکنیم برای صفر و یک کردن بیت یک رجیستر خاص.
              مثلا شما میخواید که در پورت A از میکرو کنترلر ،پین 5 رو به تنهایی 1 کنید.بعد تنظیم رجیستر DDRA به صورت خروجی ،در رجیستر PORTA این عبارت رو مینویسید:

              PORTA |= (1 <<PA4);
              PA4 در حقیقت یک ماکرو هست که به صورت استاندارد 5 تعریف شده.وقتی ما یک رو به اندازه 5 بار به چپ شیفت میدیم این عدد به دست میاد:
              0b00010000 که وقتی با PORTA اور بشه بیت 5 از PORTA یک میشه که در سخت افزار متناظر با پین PA4 هست ،یک یا روشن خواهد شد.چون بقیه بیت های عدد تولیدی توسط عملگر شیفت صفر هست(و میدونیم or شدن با 0تاثیری نداره)در نتیجه بقیه بیت ها (پین ها)دست نخورده باقی میمونند.

              دیدگاه


                #8
                پاسخ : and و or بیتی

                نوشته اصلی توسط electromohammad نمایش پست ها
                سلام خدمت دوستان
                ممنون
                برای ارسال به شیفت رجیستر از استادم یاد گرفتم
                ولی مشکل من تو ارسال اطلاعات نیست
                تو ویرایش کردن متغییر به صورت بیتی هستش
                چطوری فقط یه بیت شو می تونم صفر و یک کنم بدون اینکه تو بقیه ی بیت ها تغییر ایجاد بشه؟
                مثلا پورت a توی اتمگا 128 رو میشه به صورت بیتی و بایتی خروجی داد
                اما پورت f (فکر کنم پورت f بود) رو فقط میشه به صورت بایتی اطلاعات نشون داد و صفر و یکشون کرد.
                حالا به فرض من می خوام تابعی براش درست کنم که وقتی گفتم یدونه از پایه هاش یک بشه به طور اتوماتیک مقداری که الان روی پورت f هست رو بخونه بعد فقط همون بیت مربوط به پایه ی مورد نظرم رو ویرایش کنه و دوباره همرو با هم نشون بده
                اینطوری انگار فقط یه پایه رو دستکاری کردم (ممکنه IDE به طور اتوماتیک این کار رو بکنه ولی من ساز و کارشو می خوام)
                سر شیفت رجیستر هم می خوام همین کار رو بکنم.
                ممکنه لطف کنین بگین چجوری میشه که با عملگر های منطقی محاسبه انجام داد و بیت دلخواهی رو از متغییر یه بایتی ویرایش کرد؟
                ممنون دوستان
                با سلام
                برای مثال شما یک عدد باینری اولیه بصورت 0b01110110 دارید و بین بیتهای صفر تا هفتش
                اگر بخواهید مثلا بیت چهارم را صفر کنید بایدآن عدد اولیه را and کنید با عدد 0b11101111 چون اگر هر بیتی با صفر and شود مطمئنا نتیجه صفر خواهد بود ولی اگر با یک and شود نتیجه همان مقدار اولیه خواهد بود.
                ولی اگر بخواهید مثلا بیت سوم را یک کنید باید آن عدد اولیه را or کنید با عدد 0b00001000 چون اگر هر بیتی با یک or شود مطمئنا نتیجه یک خواهد بود ولی اگر با صفر or شود نتیجه همان مقدار اولیه خواهد بود.
                منطق تغییر بیت دلخواه بصورت بالا میباشد ولی برای ساختن تابع آن بهتر است اول خودتان کمی روی آن فکر کنید. بعنوان راهنمایی اینکه میتوانید برای ساختن عددی که باید با عدد اولیه and یا or شود از shift left ">>"و not نیز استفاده کنید.
                موفق باشید.

                دیدگاه


                  #9
                  پاسخ : and و or بیتی

                  نوشته اصلی توسط A.I.E نمایش پست ها
                  باسلام.
                  نوشته اصلی توسط A.I.E نمایش پست ها
                  دوست من بالا رو اگه با دقت خونده باشی توضیح دادم.با توجه به عملکرد and و or( که جدول صحت اونها در اینترنت موجوده)میشه فهمید که اگه چیزی با 1 or بشه اون بیت قطعا 1 خواهد شد(به صفر و یک بودن بستگی نداره).اگه بیتی با 0 and بشه اون بیت قطعا صفر خواهد شد.ما ازین دوتا خاصیت استفاده میکنیم برای صفر و یک کردن بیت یک رجیستر خاص.
                  مثلا شما میخواید که در پورت A از میکرو کنترلر ،پین 5 رو به تنهایی 1 کنید.بعد تنظیم رجیستر DDRA به صورت خروجی ،در رجیستر PORTA این عبارت رو مینویسید:

                  PORTA |= (1 <<PA4);
                  PA4 در حقیقت یک ماکرو هست که به صورت استاندارد 5 تعریف شده.وقتی ما یک رو به اندازه 5 بار به چپ شیفت میدیم این عدد به دست میاد:
                  0b00010000 که وقتی با PORTA اور بشه بیت 5 از PORTA یک میشه که در سخت افزار متناظر با پین PA4 هست ،یک یا روشن خواهد شد.چون بقیه بیت های عدد تولیدی توسط عملگر شیفت صفر هست(و میدونیم or شدن با 0تاثیری نداره)در نتیجه بقیه بیت ها (پین ها)دست نخورده باقی میمونند.

                  سلام خدمت دوستان
                  پس محاسبه با استفاده از شیفت و or اتفاق می افته؟ درسته؟

                  نوشته اصلی توسط evergreen نمایش پست ها
                  با سلام
                  برای مثال شما یک عدد باینری اولیه بصورت 0b01110110 دارید و بین بیتهای صفر تا هفتش
                  اگر بخواهید مثلا بیت چهارم را صفر کنید بایدآن عدد اولیه را and کنید با عدد 0b11101111 چون اگر هر بیتی با صفر and شود مطمئنا نتیجه صفر خواهد بود ولی اگر با یک and شود نتیجه همان مقدار اولیه خواهد بود.
                  ولی اگر بخواهید مثلا بیت سوم را یک کنید باید آن عدد اولیه را or کنید با عدد 0b00001000 چون اگر هر بیتی با یک or شود مطمئنا نتیجه یک خواهد بود ولی اگر با صفر or شود نتیجه همان مقدار اولیه خواهد بود.
                  منطق تغییر بیت دلخواه بصورت بالا میباشد ولی برای ساختن تابع آن بهتر است اول خودتان کمی روی آن فکر کنید. بعنوان راهنمایی اینکه میتوانید برای ساختن عددی که باید با عدد اولیه and یا or شود از shift left ">>"و not نیز استفاده کنید.
                  موفق باشید.


                  اینجا هم محاسبه با شیفت و not و and اتفاق می افته؟ برداشتم درسته؟

                  نوشته اصلی توسط کاکو نمایش پست ها
                  با درود
                  منظورت این ؟

                  PORTC|=0b00000001 // برای ست کردن بیت مورد نظر
                  PORTC&=0b11111110 // برای صفر کردن بیت مورد نظر
                  خیلی ممنون از همگی
                  ان شاء الله در اولین فرصت بهش می پردازم.

                  پ.ن: اینجا برای صفر کردن مجبور بودیم از سه مرحله استفاده کنیم. برای همینه که زمان خاموش کردن یه پایه توی میکرو کنترلر 2 کلاکه؟
                  پ.ن: راهی هم هست که سریع تر باشه؟ چون اینجوری پایه های 74HC595 سرعتشون در حد ده ها کیلو هرتز میشه و به مگاهرتز نمیرسه

                  خیلی ممنون از دوستان که وقت گذاشتین و جواب دادین
                  همیشه کامل توضیح بدهیم تا جواب کامل بگیریم.
                  لطفا برای تشکر روی دکمه تشکر بزنید و بخاطر این پست نزنید که تایپیک شلوغ نشود
                  تایپیک های من:
                  حل تمام مشکلات atmega128a (eca.ir)
                  آموزش کار با سایت (eca.ir)

                  دیدگاه


                    #10
                    پاسخ : and و or بیتی

                    نوشته اصلی توسط electromohammad نمایش پست ها
                    سلام خدمت دوستان
                    پس محاسبه با استفاده از شیفت و or اتفاق می افته؟ درسته؟



                    اینجا هم محاسبه با شیفت و not و and اتفاق می افته؟ برداشتم درسته؟


                    خیلی ممنون از همگی
                    ان شاء الله در اولین فرصت بهش می پردازم.

                    پ.ن: اینجا برای صفر کردن مجبور بودیم از سه مرحله استفاده کنیم. برای همینه که زمان خاموش کردن یه پایه توی میکرو کنترلر 2 کلاکه؟
                    پ.ن: راهی هم هست که سریع تر باشه؟ چون اینجوری پایه های 74HC595 سرعتشون در حد ده ها کیلو هرتز میشه و به مگاهرتز نمیرسه

                    خیلی ممنون از دوستان که وقت گذاشتین و جواب دادین
                    با درود
                    تو مثال من از عملگرد های اند و اور استفاده شده و شیفت نشده
                    تو مثال برخی دوستان هم همینگونه بود
                    دستورات با تعداد کلاک مختلف اجرا میشن که فکر نکنم اونقدر مهم باشه زمان اجراشون من که دقت نکردم و میدونم بهتره که دقت نکنم
                    01111111
                    11111111
                    اینا با هم اند بشن چی میشه ؟
                    1000000
                    1100001
                    اینا با هم اور بشن چی میشه ؟
                    نمیدونم متوجه سوالت شدی ؟
                    پورت یا ریجستر مورد نظرتو با یک بایت اند اور کن
                    برای ست کردن باید از اور استفاده کنی حالا هر کدوم از بیت ها
                    و برای صفر کردن باید از اند استفاده کنی
                    مثال که زدم در کامنت بالا برای بیت صفر بود
                    که یبار ست شده و یکبار صفر
                    میگه پورت سی رو با اون عدد اند کند و اون عدد باید با توجه به بیت مورد نظرت تعیین بشه مثلا همون بیت صفر
                    بعد از اند یا اور جواب تو پورت سی دوباره ریخته میشه
                    پورت سی اند یا اور شو با این بایت و حاصل دوباره تو خود پورت سی بریز
                    جدیدترین ویرایش توسط کاکو; ۰۷:۳۰ ۱۴۰۰/۰۴/۲۹.

                    دیدگاه


                      #11
                      پاسخ : and و or بیتی

                      سلام خدمت دوستان
                      گرفتم چی شد.
                      اگه جناب کدویژن اجازه بدن من توش کد بنویسم (فعلا کدویژن دارم ولی کرکش مثل اینکه خرابه) تابع رو می نویسم و در اختیارتون می ذارم تا با هم مشکلاشو حل کنیم.
                      بعد یه سوال دیگه هم داشتم
                      کتابخونه ای برای راه اندازیش هست؟ که سورسش باز باشه؟
                      خیلی ممنون
                      همیشه کامل توضیح بدهیم تا جواب کامل بگیریم.
                      لطفا برای تشکر روی دکمه تشکر بزنید و بخاطر این پست نزنید که تایپیک شلوغ نشود
                      تایپیک های من:
                      حل تمام مشکلات atmega128a (eca.ir)
                      آموزش کار با سایت (eca.ir)

                      دیدگاه


                        #12
                        پاسخ : and و or بیتی

                        باسلام.

                        #define set(PORT,PIN) (PORT |= (1 << PIN))
                        #define clear(PORT,PIN) (PORT &= ~(1 << PIN))
                        با تعریف این دو ماکرو میشه بدون استفاده از تابع و استفاده استک همون کار رو انجام داد.مثلا برای روشن کردن PB3 داریم:

                        set(PORTB,PB3);

                        دیدگاه


                          #13
                          پاسخ : and و or بیتی

                          نوشته اصلی توسط A.I.E نمایش پست ها
                          باسلام.

                          #define set(PORT,PIN) (PORT |= (1 << PIN))
                          #define clear(PORT,PIN) (PORT &= ~(1 << PIN))
                          با تعریف این دو ماکرو میشه بدون استفاده از تابع و استفاده استک همون کار رو انجام داد.مثلا برای روشن کردن PB3 داریم:

                          set(PORTB,PB3);
                          سلام خدمت دوستان
                          میشه کمی بیشتر در مورد اون port و pin توضیح بدین؟
                          اینا متغییره؟ چجوری اتفاق می افته و چه مراحلی رو طی می کنه تا به جواب برسه؟
                          خیلی ممنون
                          همیشه کامل توضیح بدهیم تا جواب کامل بگیریم.
                          لطفا برای تشکر روی دکمه تشکر بزنید و بخاطر این پست نزنید که تایپیک شلوغ نشود
                          تایپیک های من:
                          حل تمام مشکلات atmega128a (eca.ir)
                          آموزش کار با سایت (eca.ir)

                          دیدگاه


                            #14
                            پاسخ : and و or بیتی

                            باسلام.
                            این ها دستورات زبان سی نیستند بلکه preprocessor یا پیش پردازنده هستند که حین کامپایل اجرا میشن.
                            به طور مثال شما یه ماکرو به نام PI تعریف میکنید که مقدار اون 3.1415 هست:

                            #define PI 3.1415
                            حالا در هرجایی از برنامه که PI استفاده بشه ،حین کامپایل با مقدار 3.1415 جایگزین میشه که نوشتن برنامه رو راحت میکنه و به نوعی یک ثابت هست که در حافظه ذخیره نمیشه.
                            همین ماکرو ها میتونن پارامتر داشته باشن که در عبارت نسبت داده شده به اونها جایگزین بشه:

                            #define set(PORT,PIN) (PORT |= (1 << PIN))
                            توی این عبارت پین و پورت به عنوان پارامتر های ماکرو تعریف شدن که هر شما بنویسی set و اون دوتا رو بهش بدی ،دقیقا همونا رو توی عبارت جلوی اون قرار میده مثلا:

                            set(PORTA,PA4);
                            قبل از اینکه ترجمه برنامه شروع بشه ،کامپایلر به جای عبارت بالا این عبارت رو میزاره:

                            PORTA |= (1 << PA4);
                            که معادل همون روشن شدن پین 5 پورت A ،بدون تغییر بقیه پین ها هست.
                            جدیدترین ویرایش توسط A.I.E; ۱۳:۰۷ ۱۴۰۰/۰۴/۲۹. دلیل: اشتباه تایپی

                            دیدگاه


                              #15
                              پاسخ : and و or بیتی

                              سلام خدمت دوستان
                              میشه در مورد علامت دلار توی این توضیح بدین؟
                              PORTA |= (1 << PA$);
                              عدده چی میشه؟
                              همیشه کامل توضیح بدهیم تا جواب کامل بگیریم.
                              لطفا برای تشکر روی دکمه تشکر بزنید و بخاطر این پست نزنید که تایپیک شلوغ نشود
                              تایپیک های من:
                              حل تمام مشکلات atmega128a (eca.ir)
                              آموزش کار با سایت (eca.ir)

                              دیدگاه

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