اطلاعیه

Collapse
No announcement yet.

مقدار دهی پورت avr

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

    مقدار دهی پورت avr

    سلام
    اگه بخوام شماره هر پورت مقدار متغییر i باشه چطور باید متغییر i رو بجای شماره پورت بذارم

    کد PHP:
     int i=0;    
          for(
    i=0;i<=4;i++){
          
          
            
    PORTB.?=0B11
            
    delay_ms(1000);
          
          } 
    اگه اینجوری بذارم خطای کدنویسی میده
    PORTB.i=0b11

    #2
    پاسخ : مقدار دهی پورت avr

    نوشته اصلی توسط sobhdam_e نمایش پست ها
    سلام
    اگه بخوام شماره هر پورت مقدار متغییر i باشه چطور باید متغییر i رو بجای شماره پورت بذارم

    کد PHP:
     int i=0;    
          for(
    i=0;i<=4;i++){
          
          
            
    PORTB.?=0B11
            
    delay_ms(1000);
          
          } 
    اگه اینجوری بذارم خطای کدنویسی میده
    PORTB.i=0b11
    سلام به شما
    دوست عزیز i نمیتونه متغیر باشه اما اگه بخواید از نوع ثابت ها تعریفش کنید مشکلی نداره
    آرزوی سرافرازی برای ایران عزیز . . .


    دیدگاه


      #3
      پاسخ : مقدار دهی پورت avr

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

      دیدگاه


        #4
        پاسخ : مقدار دهی پورت avr

        باید از if و یک متغییر استفاده کنید.
        مثلا بگین اگه متغییر این عدد بود ، شما بیا پورت مورد نظر رو مساوی با این ثابت قرار بده.
        به سمت نور خورشيد حرکت کن،تو ميتوني تابش خورشيد رو حس کني ،حتي اگه کور باشي.
        (پيش به سوي هدف)

        دیدگاه


          #5
          پاسخ : مقدار دهی پورت avr

          از یکی از دوستان شنیدم که از ارایه باید استفاده کرد اما :
          -1_نفهمیدم ینی چی!
          -2_کاربردش برا مقدار دهی پورت نبود!
          .
          .
          .شما برای هر پورت یه شرط بزار که اگه مثلا i==2 شد پورت 2 رو یک کنه
          .
          اگه برای هر پورت همین کار کنی نهایتا میشه با یه متغیر همه ی پورت هاتو کنترل کنی
          .
          __حالا این متغیر رو میتونی از هر طریقی دریافت کنی_چه کی پد چه وای فای چه بلوتوث چه هرچی دیگه...

          دیدگاه


            #6
            پاسخ : مقدار دهی پورت avr

            سلام ، من با یک مثال ساده از کیپد یک نمونه از چیزی که لازم دارید و تعریف اصولی ماکروها را بصورت خیلی کلی توضیح میدم ، هر جایی که نا مفهوم بود بفرمایید تا توضیح مخصوص اون خط را بنویسم

            ابتدا این ماکروها را به اینصورت تعریف کنید:

            کد:
            #ifndef MYUTILS_H
             #define MYUTILS_H
            
             #define _CONCAT(a,b) a##b
             #define PORT(x) _CONCAT(PORT,x)
             #define PIN(x) _CONCAT(PIN,x)
             #define DDR(x) _CONCAT(DDR,x)
            
            #endif
            سپس خارج از بدنه اصلی برنامه اینطور بنویسید:
            کد:
            #define KEYPAD A
            کد:
            #define KEYPAD_PORT PORT(KEYPAD)
            #define KEYPAD_DDR     DDR(KEYPAD)
            #define KEYPAD_PIN     PIN(KEYPAD)
            و حالا اینطور تابع را می نویسیم:

            کد:
            uint8_t GetKeyPressed()
            {
                uint8_t r,c;
            
                KEYPAD_PORT|= 0X0F;
            
                for(c=0;c<3;c++)
                {
                    KEYPAD_DDR&=~(0X7F);
            
                    KEYPAD_DDR|=(0X40>>c);
                    for(r=0;r<4;r++)
                    {
                        if(!(KEYPAD_PIN & (0X08>>r)))
                        {
                            return (r*3+c);
                        }
                    }
                }
            
                return 0XFF;//Indicate No keypressed
            }


            اضافه می کنم که دستور زیر (نوشتن شارپ # کنار هم ) باعث میشه دقیقا پارامترهایی که استفاده میکنیم به هم بچسبند و هنگام استفاده میتونیم بجای a و b از یک متغیر استفاده کنیم (متغیر میتونه نشانگر نام پورت یا شماره پین باشه)

            کد:
             #define _CONCAT(a,b) a##b
            جدیدترین ویرایش توسط سعید خیری; ۰۰:۳۳ ۱۳۹۵/۰۷/۰۳.
            Reveng will surely come... Your hard time are ahead
            // - - - - - - - - - -
            برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
            // - - - - - - - - - -
            اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
            // - - - - - - - - - -

            دیدگاه


              #7
              پاسخ : مقدار دهی پورت avr

              سلام و درود به شما
              با تشکر از شما به خاطر اطلاعات خوبتون
              چند تا سوال برام پیش اومده
              اگه ممکنه با ذکر جزیات بگید تا من خووووب ok بشم
              1_MYUTILS_H یعنی چی؟ و چرا این رو قرار میدیم؟ چیکار میکنه ؟
              2_
              _CONCAT(a,b) a##b این رو تا حالا ندیدم چیکار میکنه دقیقا ؟ اون # که گذاشتین گفتین دو متغیر رو به هم میچسبونه یعنی اگه a=1 و b=2 باشه میشه عدد 12 ؟؟؟ من کلا تو این قسمت گیج شدم و دقیق نمیدونم دارم چی میگم و . . . لطفا کالبد شکافی کنید
              3_
              PORT(x) _CONCAT(PORT,x) این چیکار میکنه ؟ پرانتزها برای چیه و . . .



              با تشکر از مطالب خوبتون و وقتی که میزارید
              آرزوی سرافرازی برای ایران عزیز . . .


              دیدگاه


                #8
                پاسخ : مقدار دهی پورت avr

                بهترین راه استفاده از Bit Mask ها هستند
                کد PHP:
                /* Define bit macros, note that they are similar to the I/O macros*/
                #define SETBIT(port, pin) (port |= (1 << pin)) /* Set bit pin in byte port*/
                #define CLEARBIT(port, pin) (port &= (~(1 << pin))) /* Clear bit pin in byte port*/
                #define CHECKBIT(port, pin) (port & (1 << pin)) /* Check bit pin in byte port*/
                #define TOGGLEBIT(port, pin) (port ^= (1 << pin)) /* toggle bit pin in byte port*/

                typedef unsigned char ubyte;

                int main(){
                    
                ubyte i;
                    while(
                1){
                        for(
                08i++) SETBIT(PORTBi);
                    }
                    return 
                0;

                Efficient C Coding For AVR
                Application Notes: AVR035
                جدیدترین ویرایش توسط ASHIT AXAR; ۰۹:۴۷ ۱۳۹۵/۰۷/۰۳.
                If the wind will not serve, take to the oars

                دیدگاه


                  #9
                  پاسخ : مقدار دهی پورت avr

                  نوشته اصلی توسط rezamajdi نمایش پست ها
                  سلام و درود به شما
                  با تشکر از شما به خاطر اطلاعات خوبتون
                  چند تا سوال برام پیش اومده
                  اگه ممکنه با ذکر جزیات بگید تا من خووووب ok بشم
                  1_MYUTILS_H یعنی چی؟ و چرا این رو قرار میدیم؟ چیکار میکنه ؟
                  2_
                  _CONCAT(a,b) a##b این رو تا حالا ندیدم چیکار میکنه دقیقا ؟ اون # که گذاشتین گفتین دو متغیر رو به هم میچسبونه یعنی اگه a=1 و b=2 باشه میشه عدد 12 ؟؟؟ من کلا تو این قسمت گیج شدم و دقیق نمیدونم دارم چی میگم و . . . لطفا کالبد شکافی کنید
                  3_
                  PORT(x) _CONCAT(PORT,x) این چیکار میکنه ؟ پرانتزها برای چیه و . . .



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

                  2- بله دقیقا همین چیزی که نوشتید صحیح هست ، یعنی اگر بجای a و b هر چیزی بنویسیم ، هر جایی از برنامه وقتی اون ماکرو را استفاده کنیم باعث میشه دقیقا a و b را بهم بچسبونه . به اینصورت میتونیم a را تغییر بدیم و مثلا زمانیکه میخواییم بنویسیم PORTA.1 بجای A و 1 معادل ها را بنویسیم . (اگر بازم متوجه نشدید جواب سوال یک را دقیقا مطالعه کنید)

                  3- قبلا ما نوشتیم CONCAT(a,b) a##b / و هرجایی که ما از CONCAT استفاده کنیم باعث میشه a و b به هم بچسبند /
                  حالا که این عبارت را روبروی ماکروی PORT(x) قرار دادیم باعث میشه اون قبلیها جایگزین بشه
                  با فرض اینکه ما a را PORT و b را نام پورت در نظر میگیریم >> اگر مثلا منویسیم PORT(C) باعث میشه که کامپایلر این را ببینه:
                  PORTC
                  بنابراین دیگه لازم نیست توی کل برنامه

                  // - - - - - - - - -

                  راه ساده تر هم هست که ASHIT AXAR گفتند و بنابه نوع برنامه میشه استفاده کرد
                  Reveng will surely come... Your hard time are ahead
                  // - - - - - - - - - -
                  برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
                  // - - - - - - - - - -
                  اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
                  // - - - - - - - - - -

                  دیدگاه

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