۲-۸ ارتباط USART در میکروکنترلرهای AVR
۲۸ بهمن ۱۳۹۷۴-۸ ارتباط ۲ میکروکنترلر AVR از طریق USART
۲۸ بهمن ۱۳۹۷تابع ()putchar :
از این تابع برای قرار دادن یک کاراکتر بر روی پورت سریال استفاده میشود. مثلا در دستور (‘putchar(‘a کاراکتر a بر روی مسیر پورت سریال قرار میگیرد.
تابع ()getchar :
این تابع در صورت قرار گرفتن کاراکترخاصی بر روی مسیر ارتباط سریال، آن کاراکتر را خوانده و برمیگرداند.
مثلا در دستور بالا کاراکتر خوانده شده از پورت سریال توسط تابع ()getchar خوانده شده و داخل متغیر str_in ریخته میشود.
دستور( ) printf:
با استفاده از این دستو میتوان یک رشته را بر روی پورت سریال قرار داد که میتواند شامل رشته ای از کاراکتر ها و یا اعداد باشد.
مثلا به قطعه کد زیر نگاه کنید:
int a = 43; float param = 45.6; printf("The amount of a is: %d , amount of param is: %f" ,a,param);
در این قطعه کد دو متغیر a و param قرار است که بر روی پورت سریال قرار گیرند. متغیر a همانطور که میبینید از نوع int و متغیر param از نوع float است.
همچنین میخواهیم در حین ارسال این متغیرها اطلاعاتی اضافی را نیز همراه آنها قرار دهیم که گیرنده متوجه متغیرهای ورودی و یا نام آنها بشود.
همان طور که در دستور printf میبینید این دستور شامل ۲ بخش است.
۱- بخش قرار دادن رشته که شامل توضیحات و نوع متغیرهای درون رشته است.
۲- بخش ارجاع به متغیرهای درون رشته که مشخص می کنند یک متغیر در نظر گرفته شده در یک رشته چیست و نهایتا چه مقداری دارد.
مثلا در قطعه کد بالا عبارت d% نمایان گر این است که در این مکان یک عدد از نوع int قرار خواهد گرفت و یا بخش f% نمایانگر قرار گرفتن یک متغیر float در این مکان است.
پس از اتمام نوشتن رشتهی ارسالی در بخش ارجاع به ترتیب متغیرهایی را که در درون رشته به آنها ارجاعی وجود داشته است قرار میدهیم.
مثلا در اولین مکان نام متغیر a را قرار میدهیم چراکه اولین ارجاع در رشته مربوط به آن است و سپس متغیر param را قرار میدهیم چراکه دومین ارجاع درون رشته به آن است.
بنابراین نهایتاً رشته ای مشابه زیر ارسال میشود:
“the amount of a is : 43 , amount of param is : 45.6”
دستور ()scanf :
با استفاده از این دستور میتوانید یک رشته با قالب بندی مشخص را دریافت کنید. در واقع برای استفاده از این دستور باید بدانید رشتهی دریافت شده از چه نوع متغیری است.
int amount; scanf("%d",&amount);
مثلا در قطعه کد بالا چون میدانیم رشتهی ارسال شده یک عدد int است بنابراین در دستور scanf که مشابه دستور printf است در بخش اول نوع رشتهی دریافتی را از نوع int در نظر گرفتهایم و نهایتاً این رشته را درون متغیر amount ریختهایم.
با استفاده از این ۴ دستور میتوانید اغلب نیازهای خود در ارسال و دریافت اطلاعات را برطرف کنید.
10 Comments
آقا سرتون سلامت ما همچنان پی گیر مطالبتون هستیم
سلام
دست شما درد نکنه خیلی ممنون
مطالب کارمو راه انداختن
سپاس
میشه منبع این مقاله رو بفرمایین؟
استاد عزیز بسیار ممنون هستم می خواستم بدانم اگر متغیر فلوت را هم بخواهیم با scanf دریافت کنیم می شه
بهروز هستم
سلام. بله میشه. واسه فلوت باید توی دستور scanf از %f استفاده کنید.
ممنون هستم
سلام خسته نباشید از تابع -گت چار- در حالت -یوزارت میکرو- هم استفاده می شود برای دریافت کد از فرستنده اما یه مشکل هست. اگر احیانا زمانی که میکرو فرستنده به مشکل بخورد و هیچ فرمانی روی خط سریال نفرستد این دستور سرجای خودش باقی می ماند و ادامه دستور را نمی رود. میخوام به میکرو بگم اگر از سریال دستوری دریافت نکردی بیخیال بشو برو دستور بعدی اما وقتی گت چار میذارم دیگه امکان این کار نیست. ممنون میشم اگر راهنمائیم کنید.
سلام به نظرم باید از یکی از وقفه ها استفاده کنی
اگه منظورتون درست متوجه شده باشم
مطالب عالی و مفید ، خدا سلامتی بده به نویسنده مطلب