اطلاعیه

Collapse
No announcement yet.

کمک در ارسال سریال عدداز نوع int

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

    کمک در ارسال سریال عدداز نوع int

    سلام بچه ها . من می خوام عددی از نوع int رااز طریق usart بفرستم(codevision) اما نمی دونم چرا نمی شه (البته تو پروتوس و عملی امتحان نکردم) . برای اینکه عددی رو بفرستم ابتدا اونو به رشته تبدیل می کنم بعد از طریق تابع puts اونو می فرستم وقتی که می خوام همون عدد از نوع int رو بفرستم از تابع printf استفاده می کنم اما جواب نمی ده نمی دونم چرا ببیند مشکل از کجاست .
    این برنامه ای هست که با puts می فرستم و جواب می ده(برنامه ی تست)
    for(i=0;i<15;i++){ sprintf(a,"%d",i);
    puts(a);
    delay_ms(1000);
    }

    تو گیرنده هم از این برنامه استفاده می کنم
    scanf("%s",data);
    اما این برنامه زیر جواب نمی ده برای فرستنده
    for(i=0;i<15;i++){ printf("%d",i);
    delay_ms(1000);

    برای قسمت گیرنده هم
    int a;
    scanf("%d",a);
    ممنون می شم کمکم کنید

    #2
    پاسخ : کمک در ارسال سریال عدداز نوع int

    دوست عزیز اول توی برنامت رشته رو با همون دستور sprint به رشته تبدیل کن بعد اونو با دستور puts ارسال کن. اینکار رو توی حلقه نذار . برای اینکه مطمئن باشی اطلاعات ارسال میشه، فرستنده و گیرنده رو با هم هم زمان تغذیه بده ولی قبل از حلقه while() تو برنامه فرستنهد مثلا یه تاخیر 2 ثانیه ای بذار.
    اینو در نظر بگیر که وقتی یه عدد رو به رشته تبدیل می کنی طولش تغییر می کنه . یعنی اونطرف تو فرستنده باید یه کاراکتر بیشتر بخونی!! در ضمن توی گیرنده از تاخیر استفاده نباید بکنی چون دستوراتی مثل scanf و getchar خودشون تا وقتی که چیزی نیاد منتظر می مونن حالا اگه شما از تاخیر استفاده کنی ممکنه اطلاعات رو از دست بدی . همه اینکار ها موقعی جواب میده که شما در گیرنده یه بافر نرم افزاری تعریف کرده باشی. اگه این کار رو نمی دونی چطوری باید انجام بدی توصیه می کنم اول از ارسال اطلاعاتت مطمئن بشی. مثلا اطلاعات رو بده روی کامپیوتر و اونجا ببین.
    برای شروع با همچین چیزهایی سعی کن اول مثلا یه ماراکتر بفرستی و اونطرف بگیری . حالا اگه تونستی یه کاراکتر بفرستی برو سراغ ارسال 2 تا کاراکترو رشته و اینجور چیزا. یه ذره حوصله کنی و دقت حتما جواب می گیری!!

    دیدگاه


      #3
      پاسخ : کمک در ارسال سریال عدداز نوع int

      ببین دوست خوبم منظور من رو متوجه نشدید ببینید همون طور که شما گفتید من تو گیرنده تاخیر نمی زارم .اون تاخیرهاهم توی فرستنده است . من دوباره سوالم رو تکرار می کنم البته یه جور دیگه . ببینید وقتی ما عددی رو با استفاده از تابعputs می فرستیم این تابع فکر کنم کد اسکی او کاراکتر رو می فرسته . اما من می خوام همون عددی رو که می فرستم روی پورت بره نه اینکه کاراکتر بدم بعد تابع اونو به کد تبدیل کنه نه !! ببینید مثلا من می خوام دقیقا کد 0xAA رو روی پورت بفرستم دقیقا همین عدد بازم تاکید می کنم همین عدد برای این کار باید چیکار کنم

      دیدگاه


        #4
        پاسخ : کمک در ارسال سریال عدداز نوع int

        من منظور شما رو اشتباه متوجه شدم. ببخشید
        تبدیل به کد اسکی رو تابع puts انجام نمیده بلکه sprint با اون فرمتی که شما مشخص می کنین اینکارو می کنه. تابع puts فقط ارسال یه رشته است . به عبارتی یه حلقه تکرار از تابع putchar ه که وقتی به اخر رشته می رسه حلقه خاتمه پیدا می کنه. برای اینکه عدد رو بفرستی از فرمت u% استفاده کن. البته فکر کنم d% هم همون کارو می کنه. ولی متغیر نوع int v رو نمی تونی اینکارو بکنی چون فکر کنم فقط نیبل پایین عدد int ارسال میشه. میتونی عدد رو با نیبل پایین و بالا با دستور putchar دوبار بفرستی .

        دیدگاه


          #5
          پاسخ : کمک در ارسال سریال عدداز نوع int

          اصلا یه چیز دیگه می تونید بگید این برنامه (می دونم خیلی سادس) مشکلش چیه ؟
          برای فرستنده


          int a=5;
          printf("%d",a);
          delay_ms(100);


          برای گیرنده

          int b;
          scanf("%d",b);
          PORTA=b;

          دیدگاه


            #6
            پاسخ : کمک در ارسال سریال عدداز نوع int

            تق تق کسی خونه نیست؟؟؟؟

            دیدگاه


              #7
              پاسخ : کمک در ارسال سریال عدداز نوع int

              شما بافر نرم افزاری تعریف کردی یا نه؟ اگه نکردی معلومه جواب نمیده.

              دیدگاه


                #8
                پاسخ : کمک در ارسال سریال عدداز نوع int

                چرا از getchar و putchar استفاده نمیکنی ؟
                ببین با این درست میشه...
                printf("TX:%02u",a);

                scanf("RX:%02u",b);

                ذكات علم ياد دادنه ....

                دیدگاه


                  #9
                  پاسخ : کمک در ارسال سریال عدداز نوع int

                  سلام بچه ها من می خواستم به عددی رو دقیقا همون عدد رو روی پورت بفرستم اما با توابع نتونستم پس چیکار کردم (بهم نخندیدا !!!!!.....)

                  UDR = number;

                  به خدا حواس نداریم .....

                  دیدگاه


                    #10
                    پاسخ : کمک در ارسال سریال عدداز نوع int

                    سلام من با کد ویژن کار میکنم و میخام یه عدد 3 رقمی از نوع int رو بفرستم و اون طرف با اینتراپت UDR این عدد رو بگیرم . اگه عددم زیر 256 باشه نشون میده ولی وقتی بالاتر میره تفاضل اون از 256 رو نشون میده برای ارسال از
                    کد:
                    printf ("%c", green);
                    و برای گیرنده از
                    کد:
                    score_1=data;
                    در UDR اینتراپت استفاده میکنم .
                    'گفتم دیگه موضوع جدید ایجاد نکنم همینجا پرسیدم
                    A-Hosseini

                    دیدگاه


                      #11
                      پاسخ : کمک در ارسال سریال عدداز نوع int

                      :cry:
                      A-Hosseini

                      دیدگاه


                        #12
                        پاسخ : کمک در ارسال سریال عدداز نوع int

                        ببین دوست خوبم تا اونجایی که من میدونم شما نمی تونید با وقفه این کار رو بکنید چون همون طور که گفتید تا عدد 255 رو به شما درست می ده اونم به خاطر هشت بیتی بودن UDR هستش اگر از توابع برای فرستادن استفاده می کنیداز همون توابع برای گرفتن استفاده کنید اما اگر می خواهید حتما از وقفه برای دریافت استفاده کنید و میکرو رو منتظر برای گرفتن بوسیله ی توابعی مانند scanf و .. نشید به نظر من بهتر هستش عدد مورد نظر خودتون را برای فرستادن در UDR قرار بدید و اگر همون طور که گفتید عدد شما بزرگتر از 255 هستش یه بار بایت بالایی و یک بار دیگه بایت پایینی رو بفرستید .و قبل از فرستادن هر کدوم از این دو بایت یه عدد خاص بفرستید که میکرو بفهمه بایت بالایی هستش یه پایینی

                        دیدگاه

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