اطلاعیه

Collapse
No announcement yet.

یک پایه به عنوان ورودی تابع

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

    یک پایه به عنوان ورودی تابع

    سلام
    فرض کنید می خواهیم یک ساب روتین بنویسیم که شماره پورت و پایه میکرو را بهش بدیم و اون زمان high بودن بر روی اون پایه رو برگردونه:

    مثلا دستور زیر:

    pulsin(PINC,0x00)

    یعنی پین صفر از پورت C
    و ساب روتین رو بصورت زیر تعریف کنیم

    unsigned int pulsin(unsigned char port_no,unsigned char pin_no){

    unsigned int i=0;

    while((port_no & pin_no)==1);
    while((port_no & pin_no)==0);
    while((port_no & pin_no)==1){
    i++;
    delay_us(998);
    }
    return i;
    }

    اما اگه بجای port_no & pin_no عبارت PINC.0 را قرار بدیم همه چی درسته!!! و مقدار خروجی تابع همون زمان بالا بودنه.
    یعنی واقعا نمیشه یک پورت و پین رو به عنوان ورودی یک ساب روتین (تابع) قرار داد؟! اگه میشه مشکل در کجاست؟

    ممنون

    #2
    پاسخ : یک پایه به عنوان ورودی تابع

    سلام..

    یه کم توضیحاتت رو بیشتر میکنی؟

    دقیقاً متوجه منظورتون نمیشیم

    دیدگاه


      #3
      پاسخ : یک پایه به عنوان ورودی تابع

      شاید اگه ساده تر بگم واضح تر باشه:
      چجوری باید یک پورت و یا یک پین را به عنوان آرگومان یک تابع(ساب روتین) استفاده کرد؟

      ممنون

      دیدگاه


        #4
        پاسخ : یک پایه به عنوان ورودی تابع

        واقعا چه نیازی هست که پین به عنوان ورودی در تابع باشه ....
        چرا ورودی تابع رو void نمیزارید و توی خود تابع مستقیمن از PIN بخوندید ؟؟؟؟
        That`s It ...I`m out of here

        دیدگاه


          #5
          پاسخ : یک پایه به عنوان ورودی تابع

          برای درست کردن یک کتابخانه نیاز به این کار دارم.به هر حال باید راهی باشه!!!
          چند نمونه از این دستور که عمل خاصی رو بر روی پورت و پین خاصی انجام میده (البته به زبان بیسیک) هم در BASCOM و هم در PICBASIC برای پی آی سی هست مثل دستور PULSIN . حالا چطور باید این کار رو در C انجام داد؟!!!

          دیدگاه


            #6
            پاسخ : یک پایه به عنوان ورودی تابع



            از آدرس های سخت افزاری اون استفاده کنید.


            مثلاً آدرس سخت افزاری پورت B عدد 0x18 اگه اشتباه نکنم.

            تو کتابخونه ها که اینطور استفاده میشه.

            دیدگاه


              #7
              پاسخ : یک پایه به عنوان ورودی تابع

              دوست عزیز سلام.
              خدا رو شکر یکی پیدا شد یه جوابی به این سوال بده!!
              فکر می کردم کسی بخواد همچین پیشنهادی بده که از آدرس استفاده کنیم.خودم این کار رو کرده بودم و جواب نداد.البته می دونستم کار بیهوده ای می کنم چون:

              اول این که وقتی ابتدای برنامه دستور include <mega32.h> l# را اضافه می کنیم درون این هدر کلمه PORT معادل با آدرس 0x18 و کلمه PIN معادل با آدرس 0x16 تعریف شده . به عبارت دیگه فرقی نمی کنه که در آرگومان تابع آدرس رو بذاریم یا کلمه تعریف شده خودمون رو (البته PORT و PIN را خود کد ویژن تعریف کرده).
              دوم این که 0x18 آدرس مربوط به رجیستر WRITE است ، و در صورتی که هدف از آرگومان تابع نوشتن در اون پورت باشه از این آدرس استفاده میشه و اگر هدف از آرگومان تابع خواندن از اون پورت باشه (که منظور من این بود) باید آدرس 0x16 استفاده بشه.

              باز هم از پاسخ شما ممنونم

              منتظر راه حل های شما هستم

              دیدگاه


                #8
                پاسخ : یک پایه به عنوان ورودی تابع

                شما چرا از define استفاده نمیکنی
                فکر کنم جواب بده

                دیدگاه


                  #9
                  پاسخ : یک پایه به عنوان ورودی تابع

                  :agree: بهترین کاری که کرده بودم همین بود.
                  ولی حالا کامپایلر ها چطوری بعضی دستوراتی دارند که یک پورت یا یک پین رو به عنوان آرگومان وارد می کنه؟! نمونه این دستورات رو در microC و CCS برای PIC میشه پیدا کرد.
                  در هر صورت نباید صورت مسئله رو عوض کرد

                  ممنون

                  دیدگاه

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