اطلاعیه

Collapse
No announcement yet.

انتقال متن بوسیله USART

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

    انتقال متن بوسیله USART

    با سلام. من میخواهم از طریق usart از یک میکروکنترلر atmega16 متن ارسال کنم و در دیگری دریافت کنم. با ارسال کاراکتر و دریافتش مشکلی ندارم ولی میخواهم کلمه ارسال کنم.
    نمی خواهم از اینتراپت استفاده کنم.
    ارسال ها در فواصل زمانی یکنواخت مثلا هر 20ms انجام میشه و به صورت یکنواخت در گیرنده دریافت میشه.
    می خواهم بدانم به جای putchar,getchar باید از چه توابعی برای ارسال و دریافت متن(مثلا کلمه ای 6 حرفی) استفاده کنم؟
    با تشکر.

    #2
    پاسخ : انتقال متن بوسیله USART

    سلام
    برای ارسال میتونی از تابع puts استفاده کنی
    مثلا
    puts("salaam&quot
    برای دریافت باید از تابع gets استفاده کنی
    char *gets(char *str, unsigned char len)
    ولی بهترین راه استفاده از اینتراپته
    به جای استفاده از این توابع یه جا خود رجیستر UDR رو میخونی
    چون مثلا تابع gets یه مشکلی که داره اینه که تا تعداد کاراکتر مدنظر رو دریافت نکنه برنامه رو نگه میداره

    دیدگاه


      #3
      پاسخ : انتقال متن بوسیله USART

      ممنون.میشه نمونه کد بذاری؟به زبان C

      دیدگاه


        #4
        پاسخ : انتقال متن بوسیله USART

        کسی میتونه مثالی برای دریافت متن از طریق usart با استفاده از اینتراپت قرار بده؟خیلی خیلی ممنون میشم.

        دیدگاه


          #5
          پاسخ : انتقال متن بوسیله USART

          یعنی چجوری باید در گیرنده متن رو در اینتراپت بخونم؟
          اولا در فرستنده چجوری باید متن رو ارسال کنم؟
          با putsf("salam"
          در فرستنده متن رو ارسال می کنم. حالا در گیرنده چجوری بخونمش؟

          دیدگاه


            #6
            پاسخ : انتقال متن بوسیله USART

            من تقریبا مشکلم حل شد و میتونم متن رو ارسال کنم و با اینتراپت در گیرنده بخونم. ولی باز یه مشکل دارم:
            کد:
            interrupt [USART_RXC] void usart_rx_isr(void)
            {
            char status,data;
            status=UCSRA;
            data=UDR;
              
            
             matn[i]=data;  
               i++;
               if(i==2)
               {  
            
                i=0;  
              
               // ML=matn[0];
               // MR=matn[1];
                
                
               
                lcd_puts(matn ); 
              
               }
            این کد وقتی تعداد کاراکتر های دریافتی به 2 رسید، در lcd نمایش میده و درست هم کار میکنه. اما وقتی 2خط کدی که با // به توضیح تبدیل کردم رو از حالت توضیح در بیارم، کاراکترها درست تغییر نمیکنه. یعنی با فرستنده متن دیگه ای می فرستم ولی هنوز همون متن قبلی رو نشون میده.
            به جای این دو خط هر کد دیگه هم نوشتم(مثل 0و1 کردن پورت ها) همین مشکل وجود داره. خواهش می کنم کمکم کنید.

            دیدگاه

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