اطلاعیه

Collapse
No announcement yet.

سوالات بسیار ابتدایی

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

    سوالات بسیار ابتدایی

    سلام دوستان
    تو برامه اینجور نوشته شده
    (1)
    کد:
    if((*AT91C_PIOA_PDSR&0x00918000)==0x00118000) 	//KEY3 PRESSED
    خوب اون * که اول دستور گزاشته واسه چیه؟

    بعد هم اصلا رابطش رو با این عددی که and کرده و مقداری که برابری رو باهاش چک کرده(118000 دسیمال) نمیفهمم از کجا اورده و چه طوری حساب کرده که وقتی این پین ریست یا ست میشه این عدد بر می گرده روی پورت:cry2:
    -------------------------------------------------------------------------------------------------------------------------------------
    2)
    کد:
     AT91F_PIO_CfgInput( AT91C_BASE_PIOA, 0xFF000000) ;
    ---------------------------------------------------------------------------------------------------------------------------------------
    علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

    #2
    پاسخ : سوالات بسیار ابتدایی

    من توصیه میکنم شما یه کتاب یا ebook در مورد زبان c (نه ++c) بخونید . اون* یعنی عبارت(متغیر) بعدش پوینتر هست. معمولا یه فصل از کتاب ها فقط درمورد پوینتر توضیح میده.
    and کردن هم برای خوندن مقادیر خواصی از رجیستر هست . کلا هر وقت دیدید متوجه نمیشید کد هگز رو به باینری تبدیل کنید : 0x918 = 100100011000

    دیدگاه


      #3
      پاسخ : سوالات بسیار ابتدایی

      من خودم 3 سال پیش تحت عنوان مبانی برنامه نویسی ، c رو یاد گرفتم . استاد اون درس کتاب مرجع کامل برنامه نویسی c از جعفر نژاد قمی رو عرفی کرد. کتاب بدی نیست . اما اگه دنیال ebook یا یه چیز بهتر میگردی یه سرچ فارسی تو گوگل کنی 2-3 هزارتا لینک از کتاب فارسی و انگلیسی پیدا میکنی!
      در ضمن لازم نیست کل کتاب رو بخونی ، فقط اون قسمتهای اول و قسمت پوینتر (و structure) رو بخونی کافیه . زیاد سخت نیست.

      دیدگاه


        #4
        پاسخ : سوالات بسیار ابتدایی

        می خوام وقتی دستم رو کلید هست led روشن بشه و وقتی برداشتم خاموش
        ولی نمیدونم من این keil رو کوچیک حساب می کنم یا این arm&keil دست به یکی کردن که شخصیت من رو ببرن زیر رادیکال :mrgreen:
        این کدی هست که نوشتم میشه ببینین چه عیبی داره؟
        هیچ اروری نمیده ولی تو عمل به هیچ عنوان شرط درست نمیشه من محتویات درست و غلط بودن شرط رو جا به جا کردم و متوجه شدم که خود دستورم غلطه.ولی حالا چی باید جاش نوشت نمیدونم
        کد:
        #include "AT91SAM7S64.h"
        #include "lib_AT91SAM7S64.h"
        
        
        int main (void){
        int i;		 
        
        
        AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA);
        
        
        while (1) {
        
        
        AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, AT91C_PIO_PA8);
        (AT91F_PIO_GetInput(AT91C_BASE_PIOA) , AT91C_PIO_PA23) ;
        if ( AT91C_PIO_PA23 == 0)
        
        AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, AT91C_PIO_PA8);
        else
        AT91F_PIO_SetOutput (AT91C_BASE_PIOA, AT91C_PIO_PA8);
        
        
        }
        
        
        
        
        
        
        
        
        
        
        }
        معنی این خط رو هم نمیدونم .چون تو اکثر برنامه ها دیدم اینجا هم چپوندمش :icon_razz: بهم بگین لطفا
        کد:
        AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA);
        می خوام بدونم اگه بخوام یک پین تنها رو چک کنم باید چه دستوری استفاده کنم حالا اگه 2 یا 3 تا پین بود چه دستوری
        علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

        دیدگاه


          #5
          پاسخ : سوالات بسیار ابتدایی

          اولا کانفیگ پایه ها رو خارج از حقه بگذار (ورودی و خروجی)
          ثانیا pa23 رو ورودی تعریف نکردی (البته به طور دیفالت ورودی تعریف میشه ولی کار از محکم کاری عیب نمبکنه!)
          ثالثا این یعنی چی ؟! if ( AT91C_PIO_PA23 == 0 .
          if((*AT91C_PIOA_PDSR&0x00918000)==0x00918000با ید یه چیزی مثل این رو استفاده کنی . یا مثلا ازخروجی تابع بالایی که نوشتی استفاده کنی.
          اون خط هم برای راه اندازی pio هست چون اول همه قسمت ها خاموش هستن(کلاک ندان)
          یه مثال هم تحت عنوان led & key گذاشته بودم اون رو هم ببینی خوبه.

          دیدگاه


            #6
            پاسخ : سوالات بسیار ابتدایی

            سلام می خوام از میزان پین های میکرو 16 تاش رو بزارم رو حالت خروجی(مثلا 10 تا 26 ) حالا میخوام روش یه دیتای 16 بیتی بریزم.چه طوری باید این کار رو بکنم؟اخه قراره بشه پورت ادرس :agree:.اگه امکان داره یه مثال بزارین یه + هم پیش پیش وعده میدم
            علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

            دیدگاه


              #7
              پاسخ : سوالات بسیار ابتدایی

              یه + هم پیش پیش وعده میدم
              :question:
              امیدوارم ایندفعه پاک نشه :biggrin:
              پس شما فقط میخواید بیت های 10 تا 25 تغییر کنه و بقیه دست نخورن .
              1. کل پورت (32 پایه 0 تا 31 ) رو با مقدار 0xFC0003FF اشتراک بگیرید ( همون and)
              2.بعد اون مقدار دیتا رو 9 تا شیفت بدید
              حاصل 1 و2 رو or کنید.

              دیدگاه


                #8
                پاسخ : سوالات بسیار ابتدایی

                [quote=farzadsw]
                یه + هم پیش پیش وعده میدم
                :question:
                امیدوارم ایندفعه پاک نشه :biggrin:
                پس شما فقط میخواید بیت های 10 تا 25 تغییر کنه و بقیه دست نخورن .
                1. کل پورت (32 پایه 0 تا 31 ) رو با مقدار 0xFC0003FF اشتراک بگیرید ( همون and)
                2.بعد اون مقدار دیتا رو 9 تا شیفت بدید
                حاصل 1 و2 رو or کنید.
                [/

                color]

                چرا 9 بار شیفت بدم.اینا که شد پین 11 به بعد که
                منظورتون چیه 1 و 2 رو or کنم.1 و 2 چیه؟


                اگه میشه یه مثال بزارین :cry2:
                علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

                دیدگاه


                  #9
                  پاسخ : سوالات بسیار ابتدایی




                  کد:
                  	AT91F_PIO_CfgOutput ( AT91C_BASE_PIOA, 0x03FFFC00);
                  	AT91F_PIO_ClearOutput( AT91C_BASE_PIOA,0x03FFFC00);
                  AT91F_PIO_SetOutput( AT91C_BASE_PIOA,adad<<9) ;
                  9 بار شیفت بدی میشه PA10 نه 11 .

                  دیدگاه

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