اطلاعیه

Collapse
No announcement yet.

خلاصی از انتظار دریافت سریال درuart

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

    خلاصی از انتظار دریافت سریال درuart

    سلام.
    دوستان فرض کنید برای دریافت دیتای خاصی از طریق uart منتظر دریافت کاراکتر قید گذاری شدهaباشیم.
    حالا برنامه مجبوره منتظر دریافت کاراکترa بشه و بعد از دریافت a دیتای اصلی را دریافت کنه. حالا اگر بیش از حد منتظر دریافت این کاراکتر موندیم و دریافتش نکردیم و کلا خواستیم از خیر دریافت این کاراکترa بگذریم چه کنیم اگر دریافت دیتا ادامه داشته باشد
    Serout portb.1,n2400,1000,ali,["a"] ,b
    در این دستور اگر کاراکتر a دریافت شود دیتای اصلی در b ذخیره میشه ولی اگر ظرف مدت یک ثانیه کاراکترa دریافت نشود بشرطی بشرطی بشرطی به برچسب ali پرش میکند که دریافت دیتا قطع شده باشد یا اطلاعات کاذب دریافت نشود.
    مشکل من اینه که (چگونه ؟)وقتی مدتی منتظر دریافت کاراکترa موندم و دریافتش نکردم با اینکه دریافت دیتا کاذب ادامه دارد از دریافت دیتا منصرف بشم و به برجسبی مراجعه کنم.
    جدیدترین ویرایش توسط leader.; ۲۰:۵۲ ۱۳۹۵/۱۲/۰۹.

    #2
    پاسخ : خلاصی از انتظار دریافت سریال درuart

    شما چرا از وقفه یا پرچم دریافت استفاده نمیکنید ؟
    I'm going to
    RWTH Aachen
    University

    دیدگاه


      #3
      پاسخ : خلاصی از انتظار دریافت سریال درuart

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

      دیدگاه


        #4
        پاسخ : خلاصی از انتظار دریافت سریال درuart

        نوشته اصلی توسط mohamad7072 نمایش پست ها
        سلام
        دوست عزیز میتونی از تایمر میکرو استفاده کنی
        سلام.تشکر از لطف شما.
        وقتی میکرو منتظر دریافت کد رشته قید گذاری هست خب چطوری به روتین وقفه سر بزنه ؟
        بعبارتی دراین شرایط میکرو فقط منتظر دریافت کد رشته قید گذاری هست و نمیتونه کار دیگه ای انجام بده و فقط به دو شرط میتواند از این حالت انتظار خارج بشه:
        1-کدرشته قید گذاری شده را دریافت کند و بعد از آن هر لحظه میشه خارج شد.
        2-کد رشته فوق را اگر در مدت زمان مشخصی دریافت نکرد به شرطی میتواند خارج شود که دریافت دیتا از پین مربوطه انجام نشود یعنی دیتایی وجود نداشته باشد که بتواند دریافتش کند.حتی کاذب.

        تنها راهی که در این شرایط میشه استفاده کرد WDT هست که اونم توی این قضیه نمی تونم ازش استفاده کنم.
        بجز این موارد اگر راهی هست بنظرتون لطفا راهنمایی بفرمایید

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        نوشته اصلی توسط Azadfalah نمایش پست ها
        شما چرا از وقفه یا پرچم دریافت استفاده نمیکنید ؟
        سپاس از وقتی که گذاشتین.
        پرچم دریافت که فکنم مربوط به USART هست و در UART معنی نداره.و مطلب دیگه اینکه وقتی میکرو منتظر دریافت کد رشته قید گذاری شده هست و این کد رشته را دریافت نمیکنه برای خروج از این حالت انتظار سه حالت بیشتر نتونستم پیدا کنم:
        Serin portb.1, timeout,ali,"x", b

        1-کد رشته فوق را دریافت کند (x)و بعد از آن هر لحظه بخواهیم میتونیم خارج بشیم.
        2-با استفاده از Time out میتوانیم اگر کد رشته فوق را دریافت نکردیم بشرطی میتوانیم خارج بشیم(پرش به برچب ali) که دریافت دیتا متوقف شده باشد.یعنی اگر دریافت دیتا متوقف نشود(مشکل اصلی من ) time out اجرا نمیشه خروجی در کار نخواهد بود.
        3-استفاده از WDT که اونم باعث ریست میکرو میشه و نمیتونم ازش استفاده کنم.
        من که نتونستم راهی پیدا کنم.
        اگر بنظرتون راهی هست لطفا یکم بازتر بیان بفرمایید.
        جدیدترین ویرایش توسط leader.; ۰۹:۲۸ ۱۳۹۵/۱۲/۱۱.

        دیدگاه


          #5
          پاسخ : خلاصی از انتظار دریافت سریال درuart

          نوشته اصلی توسط leader. نمایش پست ها
          سلام.تشکر از لطف شما.
          وقتی میکرو منتظر دریافت کد رشته قید گذاری هست خب چطوری به روتین وقفه سر بزنه ؟
          بعبارتی دراین شرایط میکرو فقط منتظر دریافت کد رشته قید گذاری هست و نمیتونه کار دیگه ای انجام بده و فقط به دو شرط میتواند از این حالت انتظار خارج بشه:
          1-کدرشته قید گذاری شده را دریافت کند و بعد از آن هر لحظه میشه خارج شد.
          2-کد رشته فوق را اگر در مدت زمان مشخصی دریافت نکرد به شرطی میتواند خارج شود که دریافت دیتا از پین مربوطه انجام نشود یعنی دیتایی وجود نداشته باشد که بتواند دریافتش کند.حتی کاذب.

          تنها راهی که در این شرایط میشه استفاده کرد WDT هست که اونم توی این قضیه نمی تونم ازش استفاده کنم.
          بجز این موارد اگر راهی هست بنظرتون لطفا راهنمایی بفرمایید

          دلیل: ادغام دو پست برای جلوگیری از اسپم



          سپاس از وقتی که گذاشتین.
          پرچم دریافت که فکنم مربوط به USART هست و در UART معنی نداره.و مطلب دیگه اینکه وقتی میکرو منتظر دریافت کد رشته قید گذاری شده هست و این کد رشته را دریافت نمیکنه برای خروج از این حالت انتظار سه حالت بیشتر نتونستم پیدا کنم:
          Serin portb.1, timeout,ali,"x", b

          1-کد رشته فوق را دریافت کند (x)و بعد از آن هر لحظه بخواهیم میتونیم خارج بشیم.
          2-با استفاده از Time out میتوانیم اگر کد رشته فوق را دریافت نکردیم بشرطی میتوانیم خارج بشیم(پرش به برچب ali) که دریافت دیتا متوقف شده باشد.یعنی اگر دریافت دیتا متوقف نشود(مشکل اصلی من ) time out اجرا نمیشه خروجی در کار نخواهد بود.
          3-استفاده از WDT که اونم باعث ریست میکرو میشه و نمیتونم ازش استفاده کنم.
          من که نتونستم راهی پیدا کنم.
          اگر بنظرتون راهی هست لطفا یکم بازتر بیان بفرمایید.
          اشتباه میکنی عزیز از کدویزارد کدویژن استفاده کن هر موقع 8 بیت یا چیزی که شما تعریف کردی دریافت شه وقفه رخ میده اینم نه میتونی برسی کنی اگر پرچم دریافت یک شد برسی کنی چه اطلاعاتی دریافت شده .

          موفق باشید
          I'm going to
          RWTH Aachen
          University

          دیدگاه


            #6
            پاسخ : خلاصی از انتظار دریافت سریال درuart

            نوشته اصلی توسط Azadfalah نمایش پست ها
            اشتباه میکنی عزیز از کدویزارد کدویژن استفاده کن هر موقع 8 بیت یا چیزی که شما تعریف کردی دریافت شه وقفه رخ میده اینم نه میتونی برسی کنی اگر پرچم دریافت یک شد برسی کنی چه اطلاعاتی دریافت شده .

            موفق باشید
            هر موقع 8 بیت یا چیزی که شما تعریف کردی دریافت شه وقفه رخ میده.
            خب داداشم اگر دریافت کنم که مشکلی ندارم.



            مشکل اینه که منتظر دریافت کاراکتر قید گذاری شده میمانم.و دریافتش نمیکنم.تا اینجا درست.
            خب حالا میخوام به این انتظار پایان بدم.بشرطی میتونم از این انتظار خارج بشم که بعد از time out دریافت دیتا قطع شده باشد.
            من با uart و usartهمه مدل کار کردم اینجا بحث روی uart یا ارتباط سریال نرم افزاری هست.
            اما الان به این مشکل برخورد کردم و نتونستم حلش کنم.
            نمیدونم نمیتونم منظورم را برسانم یا مطالب دوستان را نمیگیرم.
            کلا خلاصه اش اینه:
            وارد پروسه دریافت سریال میشیم و چون انچه را که منتظرش هستیم را ( کد رشته شرط یا هر چی) دریافت نمیکنیم حالا میخو اییم خارج بشیم .یعنی بدون اینکه چیزی دریافت کنیم میخواهیم خارج بشیم از این پروسه.در حالیکه ارسال دیتا از طرف صادر کننده هنوز قطع نشده باشد.
            در این شرایط به هر مدلی تست زدم زمانی میشه خارج شد که دیتایی در پایه سریال موجود نباشد گویا که پین فوق به خط منفی متصله.یعنی اتمام دریافت
            ببینید سروران من با روال عادی ارسال و دریافت سریال کاملا آشنا
            مشکل من اینه که در دستور سریال قید کردم که آقا شما لطفا اگر این کاراکتر را دریافت کردین بقیه را دریافت بفرمایین. خب حالا اومدیم این کاراکتر دریافت نشد.اینجا تکلیف چیه؟
            طبق دستور( آنچه من متوجه شدم) بعد از timeout از پروسه خارج میشیم بشرطی که دریافت دیتا از پین مربوطه متوقف شود.والا نمیتونه خارج بشه.مشکل منم دقیقا همین هست.
            نمیدونم کاراکتری که منتظرشم کی میرسه.
            نمیتونم هر لحظه دریافتها را وارسی کنم و ببینم آیا اون کاراکتر هست یا نه مجبورم همین شرط دریافت بعد از کاراکتر فوق را بزارم که اونم چون معلوم نیس یک ثانیه دیگه میاد یا یک سال دیگه .
            حالا چون مجبورم منتظر دریافت کاراکتر فوق بمانم و وقتی منتظر موندم ( با اندازه time out) ولی دریافتی انجام نشد. حالا وقتی بخوام از خیر این دریافت بگذرم و بصورت اختیاری بخوام خارج بشم.
            زمانی میتونم که دریافت دیتا از پایه دریافت سریال قطع بشه یا متوقف بشه که اونم دست من نیس.
            حالا میکرو اینجا گیره میکنه( و میگه اگر بخوای از پروسه انتظار خارج بشم یا باید کاراکتر رو دریافت کنم یا دیتا از پین سریال دیگه نیاد تا فکنم دیگه دریافتی تعطیله بعد از تایمی که مشخص کردی(timeout) برم کارای دیگمو انجام بدم) و عملا دیگه نمیشه کاری انجام داد.مگر بشرطwdt که اونم به دلایلی نمیتونم ازش استفاده کنم.
            خواهشا هر راهی به هر زبانی که بتواند دقیقا این مشکل را برطرف نماید دوستان در صورت امکان با خود دستور لطفا راهنمایی کنند.
            جدیدترین ویرایش توسط leader.; ۲۰:۵۵ ۱۳۹۵/۱۲/۱۲.

            دیدگاه


              #7
              پاسخ : خلاصی از انتظار دریافت سریال درuart

              مهندس عزیز تئوری اشتباهی رو دارید درپیش میگیرید .

              کای خیلی راحتیه مثلا شما فرض کن ما میخوایم ابتدا آی دی دیوایس رو راسال کنیم و بعد دیتارو
              ابتدا مود رو میزاریم رو حالت 9 بیتی دیتا آی دی رو دریافت میکنیم بعد پرچم دریافت یک میشه ما میریم میبینیم بله آی دی ماست از حالت 9 بیت میایم روی 8 بیت و منتظر دریافت دیتا میشیم بعد 1 ثانیه صبر میکنیم دیتا دریافت کنیم اگر اود که هیچی ورگنه حالت رو بر میگردونیم رو حالت 9 بیتی

              من این جوری که احساس کردم شما منتظر شنیدن آی دی دیوایس میمونید که این راهش نیست کلا باید به لحظه ورودی رو چک کنه نه اینکه بره اونجا گیر کنه بقیه برنامه بمونه
              I'm going to
              RWTH Aachen
              University

              دیدگاه


                #8
                پاسخ : خلاصی از انتظار دریافت سریال درuart

                نوشته اصلی توسط leader. نمایش پست ها
                سلام.تشکر از لطف شما.
                وقتی میکرو منتظر دریافت کد رشته قید گذاری هست خب چطوری به روتین وقفه سر بزنه ؟
                بعبارتی دراین شرایط میکرو فقط منتظر دریافت کد رشته قید گذاری هست و نمیتونه کار دیگه ای انجام بده و فقط به دو شرط میتواند از این حالت انتظار خارج بشه:
                1-کدرشته قید گذاری شده را دریافت کند و بعد از آن هر لحظه میشه خارج شد.
                2-کد رشته فوق را اگر در مدت زمان مشخصی دریافت نکرد به شرطی میتواند خارج شود که دریافت دیتا از پین مربوطه انجام نشود یعنی دیتایی وجود نداشته باشد که بتواند دریافتش کند.حتی کاذب.

                تنها راهی که در این شرایط میشه استفاده کرد WDT هست که اونم توی این قضیه نمی تونم ازش استفاده کنم.
                بجز این موارد اگر راهی هست بنظرتون لطفا راهنمایی بفرمایید

                دلیل: ادغام دو پست برای جلوگیری از اسپم



                سپاس از وقتی که گذاشتین.
                پرچم دریافت که فکنم مربوط به USART هست و در UART معنی نداره.و مطلب دیگه اینکه وقتی میکرو منتظر دریافت کد رشته قید گذاری شده هست و این کد رشته را دریافت نمیکنه برای خروج از این حالت انتظار سه حالت بیشتر نتونستم پیدا کنم:
                Serin portb.1, timeout,ali,"x", b

                1-کد رشته فوق را دریافت کند (x)و بعد از آن هر لحظه بخواهیم میتونیم خارج بشیم.
                2-با استفاده از Time out میتوانیم اگر کد رشته فوق را دریافت نکردیم بشرطی میتوانیم خارج بشیم(پرش به برچب ali) که دریافت دیتا متوقف شده باشد.یعنی اگر دریافت دیتا متوقف نشود(مشکل اصلی من ) time out اجرا نمیشه خروجی در کار نخواهد بود.
                3-استفاده از WDT که اونم باعث ریست میکرو میشه و نمیتونم ازش استفاده کنم.
                من که نتونستم راهی پیدا کنم.
                اگر بنظرتون راهی هست لطفا یکم بازتر بیان بفرمایید.
                دوست عزیز تایمر میکرو جدا از قسمت روتین برنامه کار میکنه و کاری به این نداره که برنامه منتظر هست یا نه این از تایمر
                وقفه یعنی چی؟؟ یعنی هر وقت که وقفه رخ بده روتین برنامه متوقف میشه دستورات وقفه انجام میشه وبرنامه کار قبلیش رو ادامه میده
                اینکه شما میگی برنامه منتظر میمونه در واقع میشه گفت که برنامه در یک لوپ بی نهایت گیر میکنه و تا وقتی که شرطش نقض نشه به کارش ادامه میده و این به این معنی نیست که تایمر یا وقفه ی تایمر کار نمی کنن، بلکه هر وقت تایمر از 0 تا 255 رو بشمره وقفه رخ میده و این مدت زمان به فرکانس تایمر و پری اسکیلت ربط داره
                کاری که شما باید بکنی اینه که تایمر و وقفه اش رو راه بندازی و یه شرط برای بیرون رفتن از اون حلقه بی نهایتت بذاری بعد تو دستورات وقفه ات اون شرط رو چک کنی اگه شرط برقرار نبود کاری کنی که شرط اون حلقه بی نهایت به هم بخوره تا دیگه ادامه پیدا نکنه

                دیدگاه


                  #9
                  پاسخ : خلاصی از انتظار دریافت سریال درuart

                  بسم الله الرحمن الرحیم
                  نوشته اصلی توسط leader. نمایش پست ها
                  دوستان فرض کنید برای دریافت دیتای خاصی از طریق uart منتظر دریافت کاراکتر قید گذاری شدهaباشیم.
                  زیاده جسارت است.
                  جدیدترین ویرایش توسط rezaasgharian; ۱۶:۳۷ ۱۳۹۵/۱۲/۱۸. دلیل: به دلیل ویرایش در محتویات استارتر
                  والسلام علي من اتبع الهدي .... و درود بر کساني که راه هدايت را دنبال مي کنند.

                  هوشمندانه بپرسيد...

                  دیدگاه

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