سلام به همه دوستان
در مورد usart دو تابع برای نوشتن و خواندن دیدم که در تابع ارسال با توجه به اینکه زمانی اطلاعات در UDR نوشته می شه که اطلاعات قبلی ارسال شده باشد و بیت UDRE واقع در رجیستر UCSRA یک شده باشد این خط از برنامه نوشته شده که من نمی دونم چه طور کار می کنه؟
while( !(UCSRA & (1<<UDRE)) );
البته ببخشید هر کار می کنم این پرانتز ها جابجا می شن!
این خط رو توی تابع ارسال می نویسن و می گن تا زمانی که بیت UDRE صفر است تابع در این حلقه می ماند مشکل من با شرط حلقه است که نمی دونم چه طور اینطوری تعبیر می شه! چرا این رو به صورت زیر نمی نویسن:
while(!UDRE);
در تابع دریافت هم این خط رو داریم:
while( !(UCSRA & (1<<RXC)) );
که این طور تعبیر می شه که تا زمانی که بیت RXC صفر است به این معنی که داده جدیدی دریافت نشده و بافر دریافت خالی است برنامه روی همین خط است
چرا اینطور نمی نویسن:
while(!RXC);
یه تابع هم بعضی جاها می بینم که با گرفتن Baud rate تنظیمات اولیه رو انجام می ده (مثلا مقداردهی UBRR وUCSRB وUCSTC ).مگه وقتی codewizard رو تنظیم می کنیم تنظیمات این متغیرها انجام نمی شه؟
با تشکر فراوان
دیدگاه