اطلاعیه

Collapse
No announcement yet.

ارسال متن 4 حرفی با usart

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

    ارسال متن 4 حرفی با usart

    سلام.من در فرستنده یک رشته 4 حرفی که حرف اول آن s به معنی شروع و حرف آخر آن p به معنی پایان است و دو حرف وسط دیتای اصلی است را می فرستم. مثلا seep یا sedp یا sdup. حالا در گیرنده وقفه را فعال کردم و کد زیر را نوشتم:
    کد:
    char matn[4];
    int i;
    
    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    char status,data;
    status=UCSRA;
    data=UDR;
       
      
          
       matn[i]=data;  
       i++;
       if(data=='p')
       {    
       i=0;  
       lcd_clear(); 
       lcd_puts(matn ); 
       }
    اما مشکلی وجود دارد که نمی دانم علتش چیست و آن این است که در LCD یک کلمه 6 حرفی نمایش میدهد(به جای 4 حرفی) مثلا sedpep یا sudpep که 4 حرف اول را به درستی و دقیقا مطابق دیتای ارسالی نمایش می دهد اما آن 2 حرف آخر را نمیدانم چیست و از کجا آمده.
    ممنون می شوم راهنمایی کنید.

    #2
    پاسخ : ارسال متن 4 حرفی با usart

    و در ضمن وقتی مثلا matn[1] رو میخونم و نمایش میدم، اون چیزی نیست که باید باشه. مثلا sdup در صفحه نمایش داده میشه ولی وقتی matn[1] رو میخونم، s را نمایش میده(به جای d)

    دیدگاه


      #3
      پاسخ : ارسال متن 4 حرفی با usart

      سلام
      بعضی چیزا مبهمه. مثلا فرستنده کی شروع به فرستادن میکنه؟ آیا پشت سر هم میفرسته؟ آیا از گیرنده فیدبک میگیره؟
      موضوع دیگه اینه که در روتین اینتراپت گیرنده حتما خطاهای قالب بندی، data overrun و ... که فکر کنم از رجیستر UCSRA باید بخونی، چک کن. دلیل این امر اینه که گاهی اوقات مخصوصا وقتی دستگاه روشن میشه یا وقتی در Max485 بین فرستنده و گیرنده سویچ انجام میشود یکسری دیتاهایی بصورت نادرست دریافت میشود که اگر این خطاها چک شود این دیتاهای بی مورد حذف میشوند.
      در مورد چاپ دو حرف اضافی، با توجه به اینکه متغیر شما یک رشته 4 تایی هست عجیبه و یه جایی اشتباهی رخ میدهد. باز هم تاکید دارم که آیا دیتا پشت سرهم ارسال میشود؟

      دیدگاه


        #4
        پاسخ : ارسال متن 4 حرفی با usart

        بله دیتا پشت سرهم و با فاصله 20 میلی ثانیه به صورت دائم ارسال می شود.

        دیدگاه


          #5
          پاسخ : ارسال متن 4 حرفی با usart

          نوشته اصلی توسط aliblue
          بله دیتا پشت سرهم و با فاصله 20 میلی ثانیه به صورت دائم ارسال می شود.
          خوب لازمه با این سرعت دیتا فرستاده بشه؟ پشت سر هم فرستادن ممکنه ایجاد مشکل کنه و در ضمن حتما خطاها رو تو گیرنده چک کن.

          دیدگاه


            #6
            پاسخ : ارسال متن 4 حرفی با usart

            من میخوام یک رادیو کنترل با ماژول های hmr ,hmt برای ربات بسازم.
            خطا رو چجوری چک کنم؟مگه در خود روال وقفه چک نمیشه؟

            دیدگاه


              #7
              پاسخ : ارسال متن 4 حرفی با usart

              نوشته اصلی توسط aliblue
              من میخوام یک رادیو کنترل با ماژول های hmr ,hmt برای ربات بسازم.
              خطا رو چجوری چک کنم؟مگه در خود روال وقفه چک نمیشه؟
              ببین دوست عزیز به دیتاشیت میکرو اگه مراجعه کنی، در قسمت رجیسترهای مربوط به ارتباط سریال، رجیستری به نام UCSRA هست که اگر در دیتای دریافتی شما خطایی وجود داشته باشد، در این رجیستر مشخص میشود.
              مثلا یکی از بیت های این رجیستر خطای Data overrun را نشان می دهد. به این معنی که اگر بافر دریافت داده پر باشد (یعنی داده ای به واحد دریافت رسیده ولی خوانده نشده) و قبل از اینکه این دیتا خوانده شود، داده جدیدی دریافت شود، بیت مربوط به این خطا در رجیستر UCSRA یک خواهد شد.
              یا بیت دیگری از این رجیستر Parity Error را چک میکند. مثلا شما در تنظیمات ارتباط Even Parity رو در نظر گرفتین و اگر در دیتای دریافتی odd parity تشخیص داده شود وجود خطای Parity در داده دریافتی توسط بیت مربوطه اعلام میشود.
              بنابراین برای چک کردن وقوع خطا در دیتای دریافتی کافی است رجیستر UCSRA را چک کنید. بهتر است برای اطلاعات بیشتر به دیتاشیت میکرو مراجعه کنید.

              دیدگاه

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