اطلاعیه

Collapse
No announcement yet.

usart و uart با هم چه فرقی دارن و کدوم سخت افزاریه و کدوم نرم افزاری

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

    usart و uart با هم چه فرقی دارن و کدوم سخت افزاریه و کدوم نرم افزاری

    سلام دوستان
    من می خوام بدونم کلا usart و uart با هم چه فرقی دارن و کدوم سخت افزاریه و کدوم نرم افزاری و کدوم دستورها مربوط به ارتباط سریال سخت افزاریه و کدوم مربوط به سخت افزاری و اساسا منظور از سخت افزاری و نرم افزاری چیه؟ اگه ممکنه توضیح بدین چه فرقی بین دستورهایopen و inkey و waitkay و serin , serout در بسکام هست. بخدا من خیلی گیج شدم. :cry2:
    انگشت مكن رنجه به در كوفتن كس تا كس نكند رنجه به در كوفتنت مشت

    #2
    پاسخ : ارتباط سریال نرم افزاری و سخت افزاری

    سلام.
    در مورد تفاوت بین usart و uart باید بگم که در usart به جز مد آسنکرون می تونی از مد سنکرون که در میکروهای avr وجود داره استفاده کنی.اما در uart فقط به صورت آسنکرون می تونی کار کنی. هر دوشونم سخت افزاری هستند اما فکر کنم uart می تونه نرم افزاری هم باشه.
    خودتو با این مسائل درگیر نکن. تو سخت افزاری فقط باید از پین هایی که بصورت سخت افزاری روی میکرو قرار دارند را استفاده کنی اما در نرم افزاری می تونی هر کدام از پین ها را که خواستی به عنوان TXD و RXD تعیین کنی.
    مد سنکرون بدرد ارتباط دادن میکرو با صفحه کلید کامپیوتر ( AT KEYBOARD ) و باقی وسایلی که از این ارتباط پشتیبانی می کنند می خوره.
    در مورد دستورات waitkay و inkey خیلی وقته با بسکام کار نکردم اما یادمه که این دستورات برای گرفتن یک کاراکتر هستند. فقط تفاوت مهم بین این دو دستور اینه که دستور WAITKEY در مورد اعداد کاراکتر را برمی گرداند اما دستور inkey خود عدد را بر می گرداند.یعنی در inkey باید متغیر را به صورت عددی تعریف کنی.
    دستور OPEN هم واسه UART نرم افزاری هست که گفتم.هر کدام از پین ها را که واسه TXD و RXD تعیین کردی با این دستور فعال می کنی و می تونی از این پین ها برای ارتباط سریال استفاده کنی.

    دیدگاه


      #3
      پاسخ : ارتباط سریال نرم افزاری و سخت افزاری

      جناب regiona توضیحات کاملی دادن من هم یکم اضافه میکنم.
      Uart در واقع مخفف Universal Asynchronous Serial Receiver and Transmitter هست اما Usart مخفف Universal Synchronous and Asynchronous Serial Receiver and Transmitter هست، پس نتیجه میگیریم که USART همون UART هست که قابلیت ارتباط سریال سنکرون رو هم اضافه کرده، برای همین توی دیتاشیت AVR ها دیگه نمینویسند Uart و مستقیم USART رو مینویسند که هر دو مد سنکرون و غیر سنکرون رو پوشش میده.
      در مورد دستور باید بگم که این دستورات که در کامپایلر های زبان های سطح بالا برای این واسط سریال قرار داده شده در واقع فقط تعریفی هست که به کامپایلر محدود میشه یعنی اگر به ریشه AVR و دستورات اصلی اسمبلی اون نگاه کنیم متوجه میشیم که برای استفاده از USART هیچ دستور به خصوصی قرار داده نشده و شما در واقع با قرار دادن یکسری مقادیر در دجیستر های مربوط به USART میاید و این ارتباط رو برقرار میکنید در مورد بقیه امکانات هم تقریبا همینطور هست، این دستوراتی که در کامپایلر ها هست صرفا برای کامپایلر تعریف شده.
      فرق USART سخت افزاری رو با نرم افزاری هم که دوستمون گفتن اما دوتا تفاوت نسبتا مهم بین این دوتا هست، تا اونجا که من اطلاع دارم اگر از USART نرم افزاری استفاده کنید دیگه امکان استفاده از وقفه های مربوط به USART رو ندارید به علاوه شما برای اینکه چند پین رو تعریف کنید برای ارتباط برقراری USART و روی اونها زمانبندی انجام بدید مجبور هستید مقداری کد اضافی بنویسید تا این پین به عنوان USART عمل کنه که باعث گرفتی مقدار قابل توجهی از فضای حافظه میشه حالا داده های مربوط به ادتباط هم اضافه بشه حجم برنامه نسبت به حالت سخت افزاری زیاد میشه، اگز با زبانهای سطح بالا هم برنامه نویسی کنید در واقع کامپایلر برای اینکه پین رو برای USART معرفی کنه باید همین کدهارو درست کنه و در نتیجه حجم برنامه زیاد میشه، پس بهتر هست که حتی المکان با همون USART سخت افزاری که خود میکرو در اختیارتون قرار داده کار کنید.
      اما چرا نام سخت افزاری و نرم افزاری قرار داده شده؟:
      همونطور که دوستمون اشاره کرد در روش سخت افزاری شما باید از پایه هایی که برای این منظور قرار داده شده ( RXD و TXD و XCK ) استفاده کنی که این پایه ها از داخل به یکسری رجیستر و ... متصل هستند و شما در واقع کافی هست داده ای که میخوای ارسال کنی رو توی رجیستر مربوطه بریزی و سخت افزار خودش زمان بندی رو انجام میده و داده شما رو قالب بندی میکنه و با استاندارد مربوطه روی پورت میفرسته یا میگیره. اما در روش نرم افزاری شما نمیتونی مستقیم داده رو بریزی توی یک رجیستر و بگی این رو بریز روی این پینی که من میگم، بلکه باید اول از طریق برنامه یا نرم افزار زمان بندی رو انجام بدی، خودت قالب سازی کنی و بعد داده رو بدی و با همون برنامه قالب بندی کنی و بفرستی روی پینی که میخوای یعنی اینکه اینجا قالب بندی و ایجاد باود و ... رو دیگه سخت افزار داخلی انجام نمیده بلکه شما هستی که این عملیات رو روی داده با برنامه به صورت نرم افزاری انجام میدی و داده رو ارسال یا دریافت میکنی. البته شاید شما در زبان های سطح بالا برای ارتباط نرم افزاری هم فقط کافی باشه که پین رو معرفی کنید و خود کامپایلر همه این کارهارو انجام بده و به همون راحتی که به صورت سخت افزاری کار میکنید به صورت نرم افزاری این کار رو هم بکنید ولی باید به یاد داشته باشید که خود کامپایلر کدهایی ایجاد کرده که بتونن قالب بندی و ... رو انجام بدن، منظورم این هست که باز هم کد اصلی که بعد از کامپایل توی میکرو ریخته میشه طوری هست که قالب سازی و زمان بندی رو توی میکرو به صورت نرم افزاری انجام میدن. حالا این کدها که باید عمل سخت افزار رو با نرم افزار شبیه سازی کنند خودشون یک دلیل برای زیاد شدن حجم برنامه هستند.
      امیدوارم گیجتون نکرده باشم.
      اگر غلط املایی یا نگارشی زیاد داشت ببخشید فرصت بازخوانی نداشتم.
      از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
      هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
      اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
      اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
      شاد و موفق باشید

      دیدگاه


        #4
        پاسخ : ارتباط سریال نرم افزاری و سخت افزاری

        دست مریزاد
        خیلی ممنونم از اطلاعات بسیار خوبی که دادید. تقریبا فهمیدم که فرق uart و usart چیه و لفظ سخت افزاری و نرم افزاری به چه معناست. اما هنوز فرق دستور های waitkey و inkey و serin رو تو بسکام نفهمیدم. ضمنا نمی دونم در ارتباط با کامپیوتر یا یک میکروی دیگه یا در ارتباط یک میکرو با یه آی سی که خروجی سریال میده از چه نوع ارتباط سریال یا دستوراتی استفاده کنم. لطفا اگه در مورد دستور getchar هم تو کدویژن اطلاعاتی بدین ممنون میشم. :smile:
        انگشت مكن رنجه به در كوفتن كس تا كس نكند رنجه به در كوفتنت مشت

        دیدگاه

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