اطلاعیه

Collapse
No announcement yet.

مشکل با دستور getchar

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

    مشکل با دستور getchar

    با سلام من در یک برنامه از دستور getchar استفاده میکنم مشکل اینجاست که وقتی چیزی دریافت نمیکنه تو همین خط میمونه و دستورات حلقه while اجرا نمیشه ،چه جوری میشه اگر چند ثانیه چیزی نگرفت برنامه به کار خودش ادامه بده

    #2
    پاسخ : مشکل با دستور getchar

    قبل از فراخوانی getchar بهتر از وجود داده در ÷ورت مطمئن بشید
    تابع getchar رو خودتون دست بزنید و داخلش تایم اوت بذارید

    دیدگاه


      #3
      پاسخ : مشکل با دستور 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;
      //
      // }

      دیدگاه


        #4
        پاسخ : مشکل با دستور getchar

        بهتره برای ارتباط سریال از وقفه سریال استفاده کنید. توی انجمن سرچ کنید اطلاعات خوبی پیدا خواهید کرد.
        موفق باشید

        دیدگاه


          #5
          پاسخ : مشکل با دستور getchar

          داخل تابع getchar به این صورته
          کد:
          while(!(UCSR0A & (1<<RXC0))
          این یعنی تا زمانی که کاراکتر دریافت نکنه از جاش تکون نمی خوره. شما باید از همین استفاده کنید منتها به جای while ش if بزارین تا اونجا گیر نکنه. یعنی به عبارتی اگه چیزی داخل بافر سریال بود وارد حلقه if بشه اگر نبود بقیه برنامرو بخونه.
          یعنی یچیزی مثل این:
          کد:
          char in;
          if(UCSR0A & (1<<RXC0)){
          in=UDR0;
          //......
          }
          //edame barname

          دیدگاه


            #6
            پاسخ : مشکل با دستور getchar

            من از وقفه استفاده میکنم،
            if(UCSR0A & (1<<RXC0))
            این درسته اما اگر از این استفاده کنم حتما تمامه دیتاهاما میگیره؟

            دیدگاه


              #7
              پاسخ : مشکل با دستور getchar

              نوشته اصلی توسط زوار
              من از وقفه استفاده میکنم،
              if(UCSR0A & (1<<RXC0))
              این درسته اما اگر از این استفاده کنم حتما تمامه دیتاهاما میگیره؟
              این دقیقا شبیه getchar عمل میکنه که یک کاراکتر رو کامل میگیره منتها همونطورکه تو کد بالا نوشتم حتما بعدش باید رجیستر UDR0 خونده بشه. در نظر داشته باشین که این کد واسه میکروهای بیشتر از یک Usart هست.
              این کدها مشابه هم عمل میکنه با این تفاوت که در دومی میکرو رو منتظر نگه نمی داره
              کد:
              in=getchar();
              کد:
              if(UCSR0A & (1<<RXC0)){
              in=UDR0;
              }

              دیدگاه


                #8
                پاسخ : مشکل با دستور getchar

                نوشته اصلی توسط mohammadfa91
                این دقیقا شبیه getchar عمل میکنه که یک کاراکتر رو کامل میگیره منتها همونطورکه تو کد بالا نوشتم حتما بعدش باید رجیستر UDR0 خونده بشه. در نظر داشته باشین که این کد واسه میکروهای بیشتر از یک Usart هست.
                این کدها مشابه هم عمل میکنه با این تفاوت که در دومی میکرو رو منتظر نگه نمی داره
                کد:
                in=getchar();
                کد:
                if(UCSR0A & (1<<RXC0)){
                in=UDR0;
                }
                یعنی شما میگی به جای getchar() از این استفاده کنم؟تو همون روتین وقفه بنویسم؟

                دیدگاه


                  #9
                  پاسخ : مشکل با دستور getchar

                  نوشته اصلی توسط زوار
                  یعنی شما میگی به جای getchar() از این استفاده کنم؟تو همون روتین وقفه بنویسم؟
                  نه دیگه وقفه چرا؟ گفتم ازین روش استفاده کنید که نیازی به استفاده از وقفه نباشه دیگه. تو حلقه while اصلی میتونید ازش استفاده کنید فقط دقت کنید که تو حلقه while اصلا از delay استفاده نکنید.

                  دیدگاه

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