اطلاعیه

Collapse
No announcement yet.

مرتب سازی پین های مختلف چند پورت بصورت array

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

    مرتب سازی پین های مختلف چند پورت بصورت array

    با سلام
    خدمت دوستان
    سوال داشتم ایا در زبان C راهی وجود داره که ما بتونیم چند پین مختلف رو بصورت یک array مرتب کنیم و خیلی سریع و راحت بهشون دسترسی داشته باشیم؟
    منظور چند پین از چند پورت مختلف است و منظور از array نه اینکه بصورت ارایه حتما باشد،منظور راهی برای مرتب بودن و دسترسی راحت می باشد
    ممنونم
    هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
    بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
    میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

    تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

    #2
    پاسخ : مرتب سازی پین های مختلف چند پورت بصورت array

    خب از دیفاین استفاده کنید :

    کد:
    #define PIN#1(x)			PORTD=(~(1<<PORTD1))|(x<<PORTD1)
    تو مثال بالا واسه 1 یا 0 کردن پین 1 از PORTD کافیه که از دیفاین داده شده تعریف کنید...حالا واسه بقیه پینها و پورت ها هم به همین ترتیب استفاده کنید...
    تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

    www.intelart.ir


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

    دیدگاه


      #3
      پاسخ : مرتب سازی پین های مختلف چند پورت بصورت array

      نه دوست عزیز از مایکرو هم نمیشه استفاده کرد
      بزار تفصیل کنم

      ما ی بردی داریم تعداد زیادی ورودی داره
      که ورودی ها از طرق خاصی به میکرو میرسن و نهایتا بیت های یک بایت میشن
      حالا این بعضی ها از این ورودی ها ممکن است با مشکل مواجه بشن و نیاز باشه که ورودی دیگه ای وضیفه اونها رو عهده بگیره که ازاد هستند
      خب ورودی های ازاد محدود هستند و از طرفی مدار بعضی از ورودی ها دائم در حالت کلوز و بعضی اوپن هستند
      میخوام منویی نوشته بشه که تریگر اون ورودی اسیب دیده کلا ازاد بشه و بیاد رو ورودی ازاد

      مثلا با یک دستور ساده که فرض کنیم ورودی ها مثال ارایه هستند با جابجا کردن شماره خونه بشه اون پین خونده بشه
      راه پیچیده با if وجود داره اما این خودش پردازش نیاز داره و میخوام بدون نیاز به تسک اضافی باشه
      هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
      بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
      میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

      تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

      دیدگاه


        #4
        پاسخ : مرتب سازی پین های مختلف چند پورت بصورت array

        اگه اینقدر سرعت پردازش مهمه که حتی از if هم نمیتونید استفاده کنید بهتره اون قسمت رو با اسمبلی طراحی کنید ولی در کل فکر نکنم استفاده از چند تا if اینقد بار پردازشی داشته باشه! oo:
        مگه شما میخواید چیکار کنید؟
        اصلا چطور میخواید ورودی معیوب رو تشخیص بدید؟
        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

        www.intelart.ir


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

        دیدگاه


          #5
          پاسخ : مرتب سازی پین های مختلف چند پورت بصورت array

          نوشته اصلی توسط n340
          نه دوست عزیز از مایکرو هم نمیشه استفاده کرد
          بزار تفصیل کنم

          ما ی بردی داریم تعداد زیادی ورودی داره
          که ورودی ها از طرق خاصی به میکرو میرسن و نهایتا بیت های یک بایت میشن
          حالا این بعضی ها از این ورودی ها ممکن است با مشکل مواجه بشن و نیاز باشه که ورودی دیگه ای وضیفه اونها رو عهده بگیره که ازاد هستند
          خب ورودی های ازاد محدود هستند و از طرفی مدار بعضی از ورودی ها دائم در حالت کلوز و بعضی اوپن هستند
          میخوام منویی نوشته بشه که تریگر اون ورودی اسیب دیده کلا ازاد بشه و بیاد رو ورودی ازاد

          مثلا با یک دستور ساده که فرض کنیم ورودی ها مثال ارایه هستند با جابجا کردن شماره خونه بشه اون پین خونده بشه
          راه پیچیده با if وجود داره اما این خودش پردازش نیاز داره و میخوام بدون نیاز به تسک اضافی باشه
          بنظرم مشکلتون شبیه به مشکل بنده باشه
          من هم برنامه ای داشتم که مقدار زیادی شرط نیاز داشت که من هم else if قرار داده بودم که سرعت وقتی قرار بود به شرط آخری برسد واقعا کند می شد.
          بعدش من از دستور سوئیچ کیس استفاده کردم که کارم راه افتاد.
          البته نمی دونم این سوئیچ کیس چطوری کار می کند (منظورم کدنویسیش نیست) مثلا قبلا فکر می کردم کاراییش شبیه همون ایف و الس هست یعنی به همون اندازه باید cpu را مشغول کنه ولی انگار اینجوری نبودش.
          این جور که فهمیدم انگار دستور سوئیچ پرش می کند و دونه دونه شرط ها را بررسی نمی کند.
          مثلا کدها را برچسب می زند و متغیر ها می شوند اسم برچسب ها (البته این تحلیل خودمه)
          من مشکلم را قبلا اینجا مطرح کرده بودم
          http://www.eca.ir/forum2/index.php?topic=90588.0
          دکتر چمران در 1311 در تهران متولد شد
          وي در زمان اقامت در آمريکا انجمن اسلامي آمريکا را تأسيس کرد که منجر به قطع بورسيه وي توسط شاه شد.
          او با اينکه يکي از دانشمندان مطرح آمريکا به حساب مي آمد بدون توجه به مدرک به مصر رفت و آموزش نظامي ديد.

          دیدگاه


            #6
            پاسخ : مرتب سازی پین های مختلف چند پورت بصورت array

            نوشته اصلی توسط n340
            نه دوست عزیز از مایکرو هم نمیشه استفاده کرد
            بزار تفصیل کنم

            ما ی بردی داریم تعداد زیادی ورودی داره
            که ورودی ها از طرق خاصی به میکرو میرسن و نهایتا بیت های یک بایت میشن
            حالا این بعضی ها از این ورودی ها ممکن است با مشکل مواجه بشن و نیاز باشه که ورودی دیگه ای وضیفه اونها رو عهده بگیره که ازاد هستند
            خب ورودی های ازاد محدود هستند و از طرفی مدار بعضی از ورودی ها دائم در حالت کلوز و بعضی اوپن هستند
            میخوام منویی نوشته بشه که تریگر اون ورودی اسیب دیده کلا ازاد بشه و بیاد رو ورودی ازاد

            مثلا با یک دستور ساده که فرض کنیم ورودی ها مثال ارایه هستند با جابجا کردن شماره خونه بشه اون پین خونده بشه
            راه پیچیده با if وجود داره اما این خودش پردازش نیاز داره و میخوام بدون نیاز به تسک اضافی باشه
            سلام.
            چیزی که به نظر من میرسه اینه:
            هر پینی دو جایگاه داره یکی پورتی که داخل اون هست و دیگری شماره پین.
            شما یک اشاره گر برای هر پین تعریف کنید که به آدرس پورت اون پین اشاره کنه و یک متغیر هم به عنوان شماره پین. در برنامه برای تغییر وضعیت پین مورد نظر از ماکرو ها sbi و cbi استفاده کنید(البته این ماکروها در کدویژن وجود نداره و باید خودتون تعریف کنید).
            اینجوری وقتی می خواهید جایگاه پین را عوض کنید کافیه آدرسی که اون اشاره گر بهش اشاره می کنه را تغییر بدید و روی یه پورت دیگه بذارید. و شماره پین را هم عوض کنید.
            برای خواندن هم فکر می کنم همین کار جواب بده.

            دیدگاه


              #7
              پاسخ : مرتب سازی پین های مختلف چند پورت بصورت array

              نوشته اصلی توسط sadeghmojtabaei
              سلام.
              چیزی که به نظر من میرسه اینه:
              هر پینی دو جایگاه داره یکی پورتی که داخل اون هست و دیگری شماره پین.
              شما یک اشاره گر برای هر پین تعریف کنید که به آدرس پورت اون پین اشاره کنه و یک متغیر هم به عنوان شماره پین. در برنامه برای تغییر وضعیت پین مورد نظر از ماکرو ها sbi و cbi استفاده کنید(البته این ماکروها در کدویژن وجود نداره و باید خودتون تعریف کنید).
              اینجوری وقتی می خواهید جایگاه پین را عوض کنید کافیه آدرسی که اون اشاره گر بهش اشاره می کنه را تغییر بدید و روی یه پورت دیگه بذارید. و شماره پین را هم عوض کنید.
              برای خواندن هم فکر می کنم همین کار جواب بده.
              خیلی کار جالبی هست البته من تاحالا این کار را نکردم.
              بنده شده که برای اینکه بخوام تغییر حالت یک پورت را بدم به صورت اشاره گر به آدرس پورت اشاره کردم ولی انگار شما می گویید آدرس هر پینی که می خواهیم را برداریم اونوقت این چه فرقی داره که ما از همون کتابخانه و دی فاین استفاده نکنیم؟
              می شود یک مثال عملی بزنید؟ (واقعا دستتون درد نکنه و ممنونتون می شم)
              البته نمی دونم بشود پین ها را به صورت استرکچر نوشت یا نه اگر می شد احتمالا خیلی راحت می توانستم هر پینی را به این استرکچر اضافه کنیم.
              دکتر چمران در 1311 در تهران متولد شد
              وي در زمان اقامت در آمريکا انجمن اسلامي آمريکا را تأسيس کرد که منجر به قطع بورسيه وي توسط شاه شد.
              او با اينکه يکي از دانشمندان مطرح آمريکا به حساب مي آمد بدون توجه به مدرک به مصر رفت و آموزش نظامي ديد.

              دیدگاه


                #8
                پاسخ : مرتب سازی پین های مختلف چند پورت بصورت array

                نوشته اصلی توسط 011
                خیلی کار جالبی هست البته من تاحالا این کار را نکردم.
                بنده شده که برای اینکه بخوام تغییر حالت یک پورت را بدم به صورت اشاره گر به آدرس پورت اشاره کردم ولی انگار شما می گویید آدرس هر پینی که می خواهیم را برداریم اونوقت این چه فرقی داره که ما از همون کتابخانه و دی فاین استفاده نکنیم؟
                می شود یک مثال عملی بزنید؟ (واقعا دستتون درد نکنه و ممنونتون می شم)
                البته نمی دونم بشود پین ها را به صورت استرکچر نوشت یا نه اگر می شد احتمالا خیلی راحت می توانستم هر پینی را به این استرکچر اضافه کنیم.

                منظورم از آدرس پین شماره پین هست. مثلا اول قراره پین2 از پورت B را 0 یا 1 کنیم. بنابر این اشاره گری داریم که به پورت B اشاره می کنه و یک متغیر که مقدارش 2 هست الان برای مثلا یک کرد پین اینطوری می نویسیم :
                کد:
                sbi(*ptr,pinnum);
                حالا می خواهیم پین 2 پورت B بشه پین 4 پورت c حالا فقط کافیه که اون متغیر pinnum را بکنیم 4 و آدرس اون اشاره گر را بکنیم آدرس پورت c.

                البت من مطمئن نیستم که آیا اشاره گر می تونه همونجوری که به آدرس های حافظه ram اشاره می کنه به آدرس یک پورت هم اشاره کنه یا نه. اما دیدم جاهایی را که چنین کاری انجام شده.

                دیدگاه


                  #9
                  پاسخ : مرتب سازی پین های مختلف چند پورت بصورت array

                  نوشته اصلی توسط sadeghmojtabaei

                  منظورم از آدرس پین شماره پین هست. مثلا اول قراره پین2 از پورت B را 0 یا 1 کنیم. بنابر این اشاره گری داریم که به پورت B اشاره می کنه و یک متغیر که مقدارش 2 هست الان برای مثلا یک کرد پین اینطوری می نویسیم :
                  کد:
                  sbi(*ptr,pinnum);
                  حالا می خواهیم پین 2 پورت B بشه پین 4 پورت c حالا فقط کافیه که اون متغیر pinnum را بکنیم 4 و آدرس اون اشاره گر را بکنیم آدرس پورت c.

                  البت من مطمئن نیستم که آیا اشاره گر می تونه همونجوری که به آدرس های حافظه ram اشاره می کنه به آدرس یک پورت هم اشاره کنه یا نه. اما دیدم جاهایی را که چنین کاری انجام شده.
                  تا اونجا که فهمیدم پورت ها خودشون یک استرکچر هستند و نمی توان به راحتی با یک متغیر پوینتری باهاشون ارتباط بر قرار کرد.
                  شاید لینک زیر کمک کند
                  http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=8 4744&start=0
                  اما در کل فکر می کنم اگر بخواهیم به چند تا پایه از پورت های به راحتی دسترسی داشته باشیم بهتره یک تابع بنویسم با یک آرگومان که شماره ی پین ما باشد و بعد در تابع شرط سوئیچ کیس را می نویسیم که ورودیش همان ورودی تابع است.
                  اما این فقط برای دستور دادن به صورت پینی می باشد ولی اگر بخواهیم پورتی عمل کنیم کمی برنامه پیچیده تر می شود.
                  دکتر چمران در 1311 در تهران متولد شد
                  وي در زمان اقامت در آمريکا انجمن اسلامي آمريکا را تأسيس کرد که منجر به قطع بورسيه وي توسط شاه شد.
                  او با اينکه يکي از دانشمندان مطرح آمريکا به حساب مي آمد بدون توجه به مدرک به مصر رفت و آموزش نظامي ديد.

                  دیدگاه


                    #10
                    پاسخ : مرتب سازی پین های مختلف چند پورت بصورت array

                    بله ممنانم
                    این راه حل قبلا به فکرم خطور کرده بود
                    گاها دیدید یک سوال مطرح میکنید
                    همین که میاد و برای بقیه توضیح میدید مشکل چیه
                    خودتون راه حل به فکرتون میرسه
                    خب دیشبم تقریبا به فکر خطور کرد
                    خوب دیتا های از طریق تعدادی واسطه میرسه دست میکرو،حالا اگر متغییر هایی که واسط هستند رو ارایه تعریف کنیم با دستور زیر کامل میتونیم با تغییر یک عدد
                    پورت و پین رو تغییر بدیم
                    به فرض همین sbi
                    کد:
                    sbi(dt[j/10],j%10);

                    دهگان j جایگاه بایت و یکان شماره پین رو معلوم میکنه
                    خب با تغییر j میتوان دیتا رو کامل جدا کرد،فقط بار پردازشی رو میدونم
                    به گفته دوستمون و کمی کامل تر
                    هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
                    بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
                    میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

                    تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

                    دیدگاه

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