با سلام من در یک برنامه از دستور getchar استفاده میکنم مشکل اینجاست که وقتی چیزی دریافت نمیکنه تو همین خط میمونه و دستورات حلقه while اجرا نمیشه ،چه جوری میشه اگر چند ثانیه چیزی نگرفت برنامه به کار خودش ادامه بده
اطلاعیه
Collapse
No announcement yet.
مشکل با دستور getchar
Collapse
X
-
پاسخ : مشکل با دستور getchar
نوشته اصلی توسط mojalanقبل از فراخوانی getchar بهتر از وجود داده در ÷ورت مطمئن بشید
تابع getchar رو خودتون دست بزنید و داخلش تایم اوت بذارید
char getchar(void)
{
char data;
//static unsigned char ModemOff=0;
while (rx_counter0==0)
{
// if(FlagRecieveSMSUart==1)NUM++;
// sprintf(Ctemp, " %02u ",NUM);
// DrawStringAt(8, 10, Ctemp, WHITE, BLUE);
// if(NUM>500)
// {
// NUM=0;
// //FlagRecieveSMSUart=0;
// rx_counter0=1;
// ExitFlag=1;
//
// }
دیدگاه
-
پاسخ : مشکل با دستور getchar
داخل تابع getchar به این صورته
کد:while(!(UCSR0A & (1<<RXC0))
یعنی یچیزی مثل این:
کد:char in; if(UCSR0A & (1<<RXC0)){ in=UDR0; //...... } //edame barname
دیدگاه
-
پاسخ : مشکل با دستور getchar
نوشته اصلی توسط زوارمن از وقفه استفاده میکنم،
if(UCSR0A & (1<<RXC0))
این درسته اما اگر از این استفاده کنم حتما تمامه دیتاهاما میگیره؟
این کدها مشابه هم عمل میکنه با این تفاوت که در دومی میکرو رو منتظر نگه نمی دارهکد:in=getchar();
کد:if(UCSR0A & (1<<RXC0)){ in=UDR0; }
دیدگاه
-
پاسخ : مشکل با دستور getchar
نوشته اصلی توسط mohammadfa91این دقیقا شبیه getchar عمل میکنه که یک کاراکتر رو کامل میگیره منتها همونطورکه تو کد بالا نوشتم حتما بعدش باید رجیستر UDR0 خونده بشه. در نظر داشته باشین که این کد واسه میکروهای بیشتر از یک Usart هست.
این کدها مشابه هم عمل میکنه با این تفاوت که در دومی میکرو رو منتظر نگه نمی دارهکد:in=getchar();
کد:if(UCSR0A & (1<<RXC0)){ in=UDR0; }
دیدگاه
-
پاسخ : مشکل با دستور getchar
نوشته اصلی توسط زواریعنی شما میگی به جای getchar() از این استفاده کنم؟تو همون روتین وقفه بنویسم؟
دیدگاه
دیدگاه