اطلاعیه

Collapse
No announcement yet.

مشکل با فرستادن دیتا به هایپر ترمینال

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

    مشکل با فرستادن دیتا به هایپر ترمینال

    سلام
    من از یه ماژول usb to serial واسه ارتباط میکرو و کامپیوتر استفاده کردم..
    ولی با این برنامه ای که واسه 16f877A نوشتم ، هایپر ترمینال فقط کاراکتر } را برمیگردونه..
    مشکلم از کجاست؟؟
    کامپایلر: CCS
    ممنون..
    http://s5.picofile.com/file/81172239...chive.zip.html
    تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
    علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

    #2
    پاسخ : مشکل با فرستادن دیتا به هایپر ترمینال

    با دستور printf میتونید خیلی راحت هر چیزی که خواستید رو بنویسید
    مثلا کد زیر رو ببینید

    کد:
    printf("value1=%lu \n value2=%c   %s\n",distance,name,array);
    توی این کد متغیر distance از نوع int16 متغیر name از نوع char و آرایه ی array (که به صورت رشته چاپ میشه) برای هایپر ترمینال فرستاده میشه
    AYRIC

    دیدگاه


      #3
      پاسخ : مشکل با فرستادن دیتا به هایپر ترمینال

      واسه دریافت چطور؟ البته با میکرو؟
      خیلی ردیفی داداش.....
      از این دستور باحالا داری؟؟؟
      تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
      علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

      دیدگاه


        #4
        پاسخ : مشکل با فرستادن دیتا به هایپر ترمینال

        با دستور scanf
        مثلا با printf متغیرهای زیر رو با یه میکرو ارسال میکنی:
        کد:
        printf("%u%ld%s\n\r",i,speed,note);
        حالا اگه بخوای توی یه میکروی دیگه این متغیرهارو بگیری با دستور scanf و به شکل زیر راحت این کار انجام میشه

        کد:
        scanf("%u%ld%s",&i,&speed,note);
        که متغیرهای i از نوع int8 و speed از نوع signed int16 و note از نوع char و به صورت آرایه تعریف شده است
        به چند نکته هم دقت کن:
        یکی اینکه توی دستور printf حتما باید آخر جمله \n\r گذاشته بشه
        یکی دیگه اینکه توی دستور scanf اگه بخوای متغیر معمولی بگیری (توی مثال بالا i و speed) باید قبل از اسمشون & بذاری ولی اگه خواستی یه آرایه بگیری (توی مثال بالا note) نیازی با & نیست
        و یکی دیگه اینکه بهتره این دریافت با وقفه RDA انجام بشه که نیازی به چک کردن فلگ RS232 نداشته باشی با دستورات زیر این وقفه فعال میشه:
        کد:
        enable_interrupts(INT_RDA);
        enable_interrupts(GLOBAL);
        و خود وقفه هم به صورت زیر تعریف میشه:
        کد:
        #INT_RDA
        void RDA_isr(void) 
        {
        new_data=scanf("%u%ld%s",&i,&speed,note);
        }
        اگه دریافت اطلاعات کامل انجام بشه متغیر new_data یک میشه. میتونی از این قابلیت استفاده نکنی و دستور scanf رو تنها استفاده کنی
        AYRIC

        دیدگاه

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