اطلاعیه

Collapse
No announcement yet.

نیاز به راهنمایی در استفاده از USART

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

    نیاز به راهنمایی در استفاده از USART

    سلام دوستان
    درمورد استفاده از usart با وقفه دوتا سوال دارم که امیدوارم اساتید جواب بدن:

    1-وقتی از codevizard برای استفاده از USART میکرو همراه با وقفه استفاده میکنیم توابع getchar و putchar برای
    ارسال و دریافت داده ساخته میشن، نحوه استفاده از این توابع به چه صورتی هست؟
    (این توابع فقط یک کاراکتر رو روی بافر مینویسند یا میخونند، در حالی که ما باید چند بایت اطلاعات رو دریافت یا ارسال کنیم)اگه با مثال توضیح بدین خیلی ممنون میشم

    2-در صورتی که وقفه فعال باشه، چه موقع حالت وقفه پیش میاد(یا به عبارتی زیر برنامه وقفه اجرا میشه)؟ با دریافت کدی خاص یا به محض دریافت هر اطلاعاتی؟ در حالتی که بخواهیم داده ای رو ارسال کنیم چطور؟ کی وقفه فعال میشه؟

    #2
    پاسخ : نیاز به راهنمایی در استفاده از USART

    وقتیکه وقفه فعال میشه توسط کدویزارد ؛ اگه دقت کرده باشین روال وقفه و تابع getchar تولید میشن.
    تابع getchar بایت دریافتی رو مستقیما از رو پورت نمیخونهه بلکه اونو از یک صف حلقوی میخونه (و اندازه این صف هم توسط ما تعیین میشه با #define RX_BUFFER_SIZE0 32 )
    این اندازه حداکثر کاراکتریه که میتونیم تو صف دریافت داشته باشیم.
    در حالت دریافت؛ تابع روال وقفه هر وقت کاراکتری دریافت کنه اونو تو آخر این صف مینویسه و هر وقت شما خواستین داده ای بخونین تابع getchar از اول صف یه کاراکتنر برمیداره تحویل میده
    برای ارسال هم همین وضعیت برقراره

    دیدگاه


      #3
      پاسخ : نیاز به راهنمایی در استفاده از USART

      نوشته اصلی توسط mojalan
      وقتیکه وقفه فعال میشه توسط کدویزارد ؛ اگه دقت کرده باشین روال وقفه و تابع getchar تولید میشن.
      تابع getchar بایت دریافتی رو مستقیما از رو پورت نمیخونهه بلکه اونو از یک صف حلقوی میخونه (و اندازه این صف هم توسط ما تعیین میشه با #define RX_BUFFER_SIZE0 32 )
      این اندازه حداکثر کاراکتریه که میتونیم تو صف دریافت داشته باشیم.
      در حالت دریافت؛ تابع روال وقفه هر وقت کاراکتری دریافت کنه اونو تو آخر این صف مینویسه و هر وقت شما خواستین داده ای بخونین تابع getchar از اول صف یه کاراکتنر برمیداره تحویل میده
      برای ارسال هم همین وضعیت برقراره
      با تشکر از شما
      حالا اگه چند بایت اطلاعات توسط روال وقفه دریافت شده باشه و ما بخواهیم یکی یکی اونها رو از بافر بخونیم باید چیکار کنیم؟ یعنی سایز بافر رو 40 تعریف کردیم و اطلاعات دریافتی به این صورت هست:
      یک بایت برای شروع(مشخصه شروع)
      یک بایت آدرس
      دوبایت دیتا یا دستور
      یک بایت برای پایان
      تک تک این بایت ها باید بررسی بشه، با تابع getchar این کار چطوری ممکنه؟
      اگه امکانش هست با مثال توضیح بدید
      متشکرم

      دیدگاه


        #4
        پاسخ : نیاز به راهنمایی در استفاده از USART

        شما هر وقت getchar روفراخوانی کنید اولین داده بافر بهتون تحویل داده میشه (روال وقفه هم داده های دریافتی رو آخر این بافر قرار میده. این بافر بصورت چرخشی عمل میکنه)
        شما سعیتون این باشه که تعداد داده های دریافتی (قبل از اینکه اونها رو بخونید از اون 40 بیشتر نشه که بافر سرریز میشه)

        دیدگاه

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