اطلاعیه

Collapse
No announcement yet.

تعیین پورت خروجی

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

    تعیین پورت خروجی

    با سلام
    یک بازر به مدار اضافه کردم به صورت کد زیر:
    [code=c]
    #define buzzer PORTC.3
    [/code]
    حالا میخوام بعد تابع void : پورت PORTC.3 را از طریق رجیستر خروجی کنم !! ولی نمیدانم چطور هست؟ لطفا راهنمایی کنید؟
    چون با ویزارد کدویژن کار کردم برای همین نمیدانم منظوراش از 0x00 و 0x01 به ترتیب کد زیر چی هست!!؟
    شبیه به کد زیر:
    [code=c]
    void main(void)
    {

    PORTC=0x00;
    DDRC=0x01;

    {

    [/code]

    سپاس



    #2
    پاسخ : تعیین پورت خروجی

    [code=c]
    DDRC=0b00001000;[/code]
    یا
    [code=c]
    DDRC=0x08;[/code]
    ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
    شهید دکتر مصطفی چمران
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    ; C is not for children

    دیدگاه


      #3
      پاسخ : تعیین پورت خروجی

      ممنون دوست عزیز: لطفا در مورد کد ها توضیح بده!! بفهمم چی به چی هست!! یا یک منبع اموزشی معرفی کنید!
      سپاس

      اضافه شده در تاریخ :
      راستی کد های زیر معادل همان کدها هستند که توی ویزارد کد ویژن تولید می شوند!!؟؟ معنای کدهای زیر یعنی چی؟

      [code=c]
      // Port C initialization
      // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=Out Bit1=Out Bit0=Out
      DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
      // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=0 Bit1=0 Bit0=0
      PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

      [/code]

      دیدگاه


        #4
        پاسخ : تعیین پورت خروجی

        ببین دوست عزیز کلا هر مجموعه پایه ای که با نام های A,B,C,D,... شناخته میشن دارای سه ریجیستر هستند.
        1.DDR: این رجیستر شامل 8 بیته که هر بیت نشانگر ورودی یا خروجی بودن اون پایست (1 بودن اون بیت به معنای خروجی بودن و صفر بودن اون بیت به معنای ورودی بودن اون پایست) یک مثال میزنم که جا بیفته فرض کن میخوای پایه ی 5 ام از پورت B رو به صورت خروجی تعریف کنی و سایر پایه ها رو به صورت ورودی پس با توجه به توضیحات بالا باید بیت مربوط به پایه 5 پورت B رو تو ریجیستر DDR یک کنی وسایر پایه ها رو صفر. پس به شکل زیر نوشته میشه:
        کد:
        ِِDDRB=0b00100000
        2.PORT: این رجیستر هم مثل سایر رجیستر های مگا های 8 بیتی، هشت بیت داره که به ترتیب شامل وضعیت خروجی پورت میشوند.مثلا اگه تو مثال قبل که پایه پنجم رو خروجی اعلام کردیم بخوایم مقدار اون رو 1 یا صفر کنیم تو اون رجیستر باید بیت مربوطه رو 1 یا صفر کنیم.
        یعنی:
        کد:
        PORTB=0b00100000
        3.PIN: این رجیستر هم در صورتی که ما اون پایه ها رو به صورت ورودی تعریف کنیم مقدار ورودی رو تو خودشون موقع فراخوانی ذخیره میکنن و به کمک اون ها میشه مقدار وردی روی هر پایه رو خوند مثلا من میخوام که مقدار پورت رو که به صورت ورودی تعریفش کردم بخونم و تو یک متغیر ذخیرش کنم واسه همین میام به شکل زیر رفتار میکنم:
        کد:
        Unsigned char port_value;
        port_value=PINB;
        البته این توضیحات کافی نیست و باید یه سری به دیتاشیت اون آیسی مورد استفادتون بزنین که برای پیدا کردن اون دیتا شیت میتونین اسم اون رو تو گوگل سرچ کنین یا به سایت زیر مراجعه کنین:
        www.alldatasheet.com
        برای خوندن راجع به این قسمت باید به بخش Register Description for I/O Ports از دیتاشیت مراجعه کنین.
        برای مطالعه بیشتر هم میتونین موارد مربوط به پورت های آیسی رو تو گوگل سرچ کنین و لینک زیر هم فکر کنم بعد از اون به دردتون بخوره:
        http://maxembedded.com/2011/06/port-operations-in-avr/

        دیدگاه


          #5
          پاسخ : تعیین پورت خروجی

          سلام...خوب هستید؟
          لینک زیر رو مطالعه کنید.یه برنامه هم گذاشتم که باهاش میتونید با همون روش شیفت دادن به رجیستر ها مقدار بدید
          http://www.eca.ir/forum2/index.php?topic=86792.msg535228#msg535228
          تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

          www.intelart.ir


          ساخت کنترلر دما PID فازی با AVR [آموزشی]

          دیدگاه


            #6
            پاسخ : تعیین پورت خروجی

            ممنون دوست عزیز:
            ببین دوست عزیز کلا هر مجموعه پایه ای که با نام های A,B,C,D,... شناخته میشن دارای سه ریجیستر هستند.
            1.DDR: این رجیستر شامل 8 بیته که هر بیت نشانگر ورودی یا خروجی بودن اون پایست (1 بودن اون بیت به معنای خروجی بودن و صفر بودن اون بیت به معنای ورودی بودن اون پایست) یک مثال میزنم که جا بیفته فرض کن میخوای پایه ی 5 ام از پورت B رو به صورت خروجی تعریف کنی و سایر پایه ها رو به صورت ورودی پس با توجه به توضیحات بالا باید بیت مربوط به پایه 5 پورت B رو تو ریجیستر DDR یک کنی وسایر پایه ها رو صفر. پس به شکل زیر نوشته میشه:
            من فقط میخوام بدونم این اعداد چطوری تولید می شوند ! مثل همین مثال خودات :مثلا 0b00100000 چطوری محاسبه میشه؟ از سمت راست 5 تا جلو رفتی و بیت 6 را 1 کردید؟!!
            لینک زیر رو مطالعه کنید.یه برنامه هم گذاشتم که باهاش میتونید با همون روش شیفت دادن به رجیستر ها مقدار بدید
            سلام دوست عزیز: ممنونم: ماشااله خیلی پیشرفته هست برنامه ات :mrgreen: نمی دانم چی به چی هست!! کارباهاش چطوری هست؟

            سپاس

            دیدگاه


              #7
              پاسخ : تعیین پورت خروجی

              وقتی میگن میکرو 4 بیتی یا 8 بیتی یا 16 بیتی یا 32 بیتیه منظور به همین جاست (البته یکی از دلایلش)
              یعنی میکرو در هر لحظه میتونه روی اون تعداد بیت عملیات انجام بده و یا اون تعداد پایه رو همزمان تغییر بده
              میکرو هایی که ما معمولا استفاده میکنیم 8 بیتی هستن
              پس هر لحظه میتونیم به تعداد 8 بیت رو همزمان تغییر بدیم
              حالا خود کمپانی تولید میکرو میاد و پایه هارو دسته بندی به نام پورت میکنه و اسم دلخواه مثل A , B , C و... روشون میزاره
              برای همین توی میکرو های 16 بیتی پورت های 16 پایه ای هم داریم
              ---------------------
              اگر تعداد عدد های 0 و 1 جلوی دستوراتی که دوستان گذاشتن رو بشماری همگی 8تایی هستن (به باینری) و هر جایگاه عددی معادل جایگاه پایه ای خاص در اون پورت هستش
              فقط نکته قضیه اینه که پایه ها رو بجای اینکه از 1 بشماریم میایم و از صفر میشماریم و حاصل برای میکرو های 8 بیتی میشه پایه 0 تا 7 برای پورت مثلا A
              برای تعریف کردن ورودی و خروجی یه دستور خاص (در اصل یه رجیستر خاص) به نام DDRx داریم که بجای x نام پورت مورد نظرمون رو مینویسیم
              مثلا C
              حالا توی این رجیستر هر بیتی (چایگاه عددی) رو که صفر کنیم یعنی ورودی کردیمش و هرجارو یک کنیم خروجیش کردیم.
              حالا میخوایم اولین پایه پورت A رو خروجی و بقیه رو ورودی کنیم
              اولین پایه میشه پایه شماره 0
              پس در نتیجه:
              DDRA=0b00000001
              نکته:اولین پایه میشه اولین جایگاه عددی سمت راست (بیت 0) و آخرین پایه میشه آخرین جایگاه عددی سمت چپ (برای میکرو های 8 بیتی میشه بیت 7)
              از صفر تا 7 میشه کلا 8 جایگاه (اگر خود صفر رو هم بشماریم و باید بشماریم) که میشه معادل 8بیت
              اون 0b که بعد از مساوی اومده توی زبون C به معنی اینه که عدد جلوی تو به باینری وارد کردیم اگر 0x بزاریم یعنی عدد رو به هگز وارد کردیم و اگر چیزی نزاریم یعنی به دسیمال وارد کردیم.
              ----------------
              حتما چند تا کتاب آموزش avr بگیر من خودم چندتا کتاب رو با هم استفاده میکنم و هر کدم مزایایی دارن
              و کتاب جناب سچاسیار برای آموزش avr عالیه
              ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
              شهید دکتر مصطفی چمران
              اللهم صل علی محمد و ال محمد و عجل فرجهم
              ; C is not for children

              دیدگاه


                #8
                پاسخ : تعیین پورت خروجی

                نوشته اصلی توسط ircaspianhero
                ممنون دوست عزیز: لطفا در مورد کد ها توضیح بده!! بفهمم چی به چی هست!! یا یک منبع اموزشی معرفی کنید!
                سپاس

                اضافه شده در تاریخ :
                راستی کد های زیر معادل همان کدها هستند که توی ویزارد کد ویژن تولید می شوند!!؟؟ معنای کدهای زیر یعنی چی؟

                [code=c]
                // Port C initialization
                // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=Out Bit1=Out Bit0=Out
                DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
                // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=0 Bit1=0 Bit0=0
                PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

                [/code]
                چند راه برای مقدار دادن به رجیستر DDRx وجود داره:
                1-عدد دهی توسط شیفت دادن بیت ها
                2-عدد دهی مستقیم
                شیوه ای که شما مثالش رو گذاشتین از نوع شیفت دادنه

                این دو شیوه فقط از لحاظ ظاهری متفاوتن اما از لحاظ عملکرد با عدد دهی مستقیم رجیسترDDRx هیج فرقی نداره و فقط توی شیوه شیفت دادن اون عدد پس از انجام یک سری عملیات بدست میاد و توی شیوه عدد دهی مستقیم ما خودمون حساب کردیم و عدد رو بدست اوردیم و بعد خودمون نتیجه رو مستقیما به رحیستر DDRx میدیم
                -----------
                اینکه چرا بعضیا از شیوه شیفت دادن استفاده میکنن :
                این اشخاص دلیل میارن که این کار اصولی تره (که هست) و دلیلش هم اینه که بعده ها برنامه نویس که دوباره برنامه رو بخونه با دیدن این بیت ها بهتر متوجه میشه که چه اتفاقی افتاده
                اما از لحاظ سرعت شیوه مقدار دادن مستقیم سریع تره
                ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
                شهید دکتر مصطفی چمران
                اللهم صل علی محمد و ال محمد و عجل فرجهم
                ; C is not for children

                دیدگاه


                  #9
                  پاسخ : تعیین پورت خروجی

                  کارباهاش چطوری هست؟
                  متشکرم لطف دارید...اون واسه کسایی هست که حال ندارن تایپ کنن :biggrin: مثل خودم
                  اول رجیستر رو انتخاب میکنی بعدش روی هرکدوم از بیت ها کلیک کنی واست به همون مدل شیفت دادن خروجی میده بعدش روی Copy کلیک میکنی و داخا برنامه Paste مکینی... :mrgreen:
                  تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                  www.intelart.ir


                  ساخت کنترلر دما PID فازی با AVR [آموزشی]

                  دیدگاه


                    #10
                    پاسخ : تعیین پورت خروجی

                    ممنون دوستان: من که عاقبت نفهمیدم این کد چی میگه :mrgreen:
                    [code=c]
                    // Port C initialization
                    // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=Out Bit1=Out Bit0=Out
                    DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
                    // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=0 Bit1=0 Bit0=0
                    PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
                    [/code]
                    ببنید توی این کد بالا که برای برنامه مورد نظر هست که میخوام به پورت PORTC.3 یک بازر اضافه کنم !! و کد های بالا توسط کدویژن تولید شده هست!!
                    سئوال اینجا هست که من اگر کد را به صورت زیر بنویسم برای خروجی کردن پورت موردنظر بازر و بعد از تابع void قرار بدهم !! ایا مشکلی پیش نمی اید؟ یعنی کد ها الویت ندارند؟
                    [code=c]
                    DDRC.3=1
                    [/code]
                    یا
                    [code=c]
                    DDRC=0b00001000;
                    [/code]
                    سپاس

                    دیدگاه


                      #11
                      پاسخ : تعیین پورت خروجی

                      اولا اینکه کد زیر بی معنی هست....
                      کد:
                      PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
                      یعنی اینکه عدد صفر رو به تعداد مورد نظر شما شیفت بده...خب صفر رو شیفت دادن معنی نداره!
                      پس میتونید جاهایی که صفر شیفت داده شده رو حذف کنید

                      ببینید مثلا مینویسید :

                      کد:
                      ِDDRC=1<<5
                      یعنی اینکه عدد 1 رو 5 بار یه چپ شیفت بده...یعنی میشه شکل زیر:


                      0B00010000

                      عدد بالا معادل هگزادسیمال 0X10 هست
                      شما هر کدوم از کدهای بالا رو استفاده کنید واسه کامپایلر تفاوتی نداره...
                      تنها تفاوتشون در قیافه شونه....حالتی که از شیفت دادن استفاده میکنید کدتون خوانایی بیشتری داره...
                      DDRC.3 یعنی دسترسی به بیت 3 (دقت کنید بیت 3 ..معادل بیت چهارم میشه)...این مدل مقدار دهی فقط در کدویژن معنی داره و استاندارد زبان c نیست.پس بهتره که با دستورات استاندارد کار کنید تا اگه به کامپابلر دیگه ای خواستید کار کنید مشکلی نداشته باشید
                      برنامه خط به خط اجرا میشه...مشکلی پیش نمیاد یعنی چی؟
                      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                      www.intelart.ir


                      ساخت کنترلر دما PID فازی با AVR [آموزشی]

                      دیدگاه


                        #12
                        پاسخ : تعیین پورت خروجی

                        نوشته اصلی توسط ircaspianhero
                        ممنون دوستان: من که عاقبت نفهمیدم این کد چی میگه :mrgreen:
                        [code=c]
                        // Port C initialization
                        // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=Out Bit1=Out Bit0=Out
                        DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
                        // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=0 Bit1=0 Bit0=0
                        PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
                        [/code]
                        ببنید توی این کد بالا که برای برنامه مورد نظر هست که میخوام به پورت PORTC.3 یک بازر اضافه کنم !! و کد های بالا توسط کدویژن تولید شده هست!!
                        سئوال اینجا هست که من اگر کد را به صورت زیر بنویسم برای خروجی کردن پورت موردنظر بازر و بعد از تابع void قرار بدهم !! ایا مشکلی پیش نمی اید؟ یعنی کد ها الویت ندارند؟
                        [code=c]
                        DDRC.3=1
                        [/code]
                        یا
                        [code=c]
                        DDRC=0b00001000;
                        [/code]
                        سپاس

                        بزرگترین اشتباه شما اینه که دارین از یه نرم افزاری مثل کدویژن استفاده میکنید
                        چون این نرم افزار شما رو از اصول دور میکنه و برای همین توی همچین مواردی واقعا آدم سردرگم میشه (اتفاقی که برای خودم افتاد)
                        پیشنهاد میکنم هر چه سریعتر به سمت نرم افزار هایی مثل atmel studio6 و iar برین (من خودم از atmel studio 6.2 استفاده میکنم چون رایگانه و نیازی به کرک نداره پس در نتیجه باگی هم به خاطر کرک کردن توش بوجود نمیاد)
                        -------------------
                        عمل شیفت دادن رو اطلاع دارین چیه؟
                        این پاسخ رو بر فرض اینکه میدونین شیفت دادن چیه میگم و اگر ازلاع ندارین شیفت دادن چیه بگین تا توضیح بدم:
                        توی دو دستور زیر:
                        [code=c]
                        // Port C initialization
                        // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=Out Bit1=Out Bit0=Out
                        DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
                        // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=0 Bit1=0 Bit0=0
                        PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
                        [/code]
                        این حروف DDC0 تا DDC7 و PORTC0 تا PORTC7 تنها یه دیفاین هایی هستن که خود کدویژن در نظر گرفته و در اختیار برنامه نویس گذاشته و هر کدام با توجه به عدد 0 تا 7 جلوشون برابر مقدار عددی 0 تا 7 هستن
                        پس میشه دستور بالارو به شکل زیر هم نوشت (اگر به جای دیفاین ها مقدار عددیشون رو بزاریم):
                        ------
                        [code=c]
                        // Port C initialization
                        // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=Out Bit1=Out Bit0=Out
                        DDRC=(0<<6) | (0<<5) | (0<<4) | (0<<3) | (1<<2) | (1<<1) | (1<<0);
                        // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=0 Bit1=0 Bit0=0
                        PORTC=(0<<6) | (0<<5) | (0<<4) | (0<<3) | (0<<2) | (0<<1) | (0<<0);
                        [/code]
                        ------
                        نکته:اگر میکرو 16 بیتی یا 32 بیتی بود اونوقت از 0 تا 15 یا از 0 تا 31 خوهیم داشت.
                        ------
                        خوب حالا مرحله به مرحله جلو میریم:
                        اول حاصل هر پرانتز رو حصاب میکنیم:
                        اگر 0 رو به هر تعداد به سمت چپ شیفت بدیم یا به سمت راست باز همون صفره پس تمامی پرانتز های شیفت دادن صفر میشن صفر:
                        [code=c]
                        // Port C initialization
                        // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=Out Bit1=Out Bit0=Out
                        DDRC=0 | 0 | 0 | 0 | (1<<2) | (1<<1) | (1<<0);
                        // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=0 Bit1=0 Bit0=0
                        PORTC=0 | 0 | 0 | 0 | 0 | 0 | 0);
                        [/code]
                        ---------------
                        خوب در این مرحله فقط سه تا پرانتز میمونه که مقدار یک رو دارن شیفت میدن
                        برای اینکه بشه راحت نتیجه عملیات شیفت دادن رو یک عدد رو ببینیم بهتره که به باینری تبدیلش کنیم
                        مثال برای پرانتز (2>>1) :
                        1 به باینری بزای یک میکروش 8 بیتی میشه:
                        0b00000001
                        (برای 16 بیتی میشه 0b0000000000000001)
                        خوب شیفت دادن میگه که 1 رو به تعدادی که من گفتم به سمتی کهمن گفتم جابجا کن:
                        خوب توی دستور (2>>0b00000001) گفته که عددی که در سمت چپ هست رو به تعداد 2 بار شیفت به چپ بده پس حاصل پرانتز میشه:
                        0b00000100 که معادل 4 دسیمال یا 4 هگز هست
                        خوب حالا بقیه پرانتز هارو هم حل میکنیم:
                        [code=c]
                        // Port C initialization
                        // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=Out Bit1=Out Bit0=Out
                        DDRC=0 | 0 | 0 | 0 | 4 | 2 | 1);
                        // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=0 Bit1=0 Bit0=0
                        PORTC=0 | 0 | 0 | 0 | 0 | 0 | 0);
                        [/code]
                        ---------------
                        حالا نوبت به حل کردن عملیات OR کردن میرسه
                        برای حل کردن عملیات OR بهتره که برای آسونی کار هر عدد رو به مقدار باینری تبدیل کنیم
                        عملیات OR کردن مثل هر یک عملیات ضرب و تقسیم و جمع و تفریق و .. هست و توی عملیات قانون اینه که حاص OR کردن بین دو بیت (یا هر تعدادبیت) اگر تنها یه دونه از بیت ها هم 1 باشه حاصل برابر 1 میشه و اگر هیچ کدوم یک نباشه حاصل صفر میشه
                        حالا دوعدد 1 و 2 رو که قراره با هم OR بشن رو به باینری تبدیل میکنیم و بعد با هم OR میکنیم:
                        OR 0b00000010
                        0b00000001
                        ___________
                        0b00000011

                        خوب حالا حصل این دو تا باید با عدد 4 OR بشه:
                        OR 0b00000011
                        0b00000100
                        ___________
                        0b00000111
                        که عدد باینری 0b00000111 برابر عدد دسیمال 7 میشه
                        و بقیه موارد هم که صفر بود چون حاصل OR کردنشون هیچ تغییری توی عدد های دیگه بوجود نمیاره پس نتیجه عملیات زیر :
                        [code=c]DDRC=0 | 0 | 0 | 0 | 4 | 2 | 1;
                        [/code]
                        میشه:
                        [code=c]DDRC=0 | 0 | 0 | 0 |7;
                        [/code]
                        و میشه:
                        [code=c]DDRC=7;
                        [/code]
                        که دستور های زیر همگی به یک معنا میباشن:
                        [code=c]
                        DDRC=7;
                        --------------
                        DDRC=0b00000111;
                        --------------
                        DDRC=0x07;
                        [/code]
                        -----------------------------------
                        توجه مهم:اگر سعی میکنم ساده توضیح بدم تنها به این دلیله که خودم اینجوری راحتترم و امیدوارم کسی ناراحت نشه
                        ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
                        شهید دکتر مصطفی چمران
                        اللهم صل علی محمد و ال محمد و عجل فرجهم
                        ; C is not for children

                        دیدگاه


                          #13
                          پاسخ : تعیین پورت خروجی

                          ممنون دوستان گل بابت توضیحات کامل تان
                          بزرگترین اشتباه شما اینه که دارین از یه نرم افزاری مثل کدویژن استفاده میکنید
                          چون این نرم افزار شما رو از اصول دور میکنه و برای همین توی همچین مواردی واقعا آدم سردرگم میشه (اتفاقی که برای خودم افتاد)
                          پیشنهاد میکنم هر چه سریعتر به سمت نرم افزار هایی مثل atmel studio6 و iar برین (من خودم از atmel studio 6.2 استفاده میکنم چون رایگانه و نیازی به کرک نداره پس در نتیجه باگی هم به خاطر کرک کردن توش بوجود نمیاد)
                          برنامه خط به خط اجرا میشه...مشکلی پیش نمیاد یعنی چی؟
                          مهندس جان: والا من میکروکنترلر را به خاطر علاقه ام به این مبحث دنبال می کنم و اتمل به نظرم به درد کسانی میخورد که میخواهند توی این بخش فعالیت کنند و حرفه ای کار کنند ولی من عشقی کار می کنم: بابت توضیحات هم ممنونم خیلی ساده و عالی بود: من را یاد درس زبان ماشین و اسمبلی انداختی:تازه از شر دانشگاه راحت شدم :mrgreen: کلا از این درس خوشم نمی اید. رشته الکترونیک و کامپیوتر خیلی مکمل هم هستند!! ولی میگن بیسیک اسان تر از سی هست مخصوصا این رجیستر ها گمان نکنم داشته باشد! سوسول بازی اش کمتر هست!
                          ================================================== =======
                          DDRC=7 جواب کلی ان کد ها هست درسته؟
                          منظور کلی من یک چیز دیگه ای بود !!! که توضیح دادم قبلا! ولی اشکالی نداره!!
                          به من بگید توی کد زیر مقدار پورت PORTC.3 که برای خروجی کردن باید 1 بشود :چی هست؟ ایا (0<<DDC3) مقدار اش صفر نیست؟ یعنی ورودی هست!!! درسته؟ خب من به جای 0 عدد 1 بزارم ایا خروجی می شود؟
                          [code=c]DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);[/code]
                          سپاس

                          دیدگاه


                            #14
                            پاسخ : تعیین پورت خروجی

                            ببین داداش دو خط کد زیر معادل هم هستند :

                            [code=c]
                            DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);

                            DDRC= (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
                            [/code]

                            عبارات زیر هم معادل هم هستند :

                            [code=c]
                            DDRC=7 = 0X07 = 0B00000111 = (1<<0)|(1<<1)|(1<<2)
                            [/code]
                            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                            www.intelart.ir


                            ساخت کنترلر دما PID فازی با AVR [آموزشی]

                            دیدگاه

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