اطلاعیه

Collapse
No announcement yet.

ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

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

    ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

    oo:

    سلام دوستان
    چند روزی است می خواهم ارتباطی بین میکرو کامپیوتر داشته باشم ولی هر کاری میکنم جواب نمی گیرم .
    ارسال و دریافت را درست انجام می دهم یعنی اطلاعات را از هم سمت دارم ولی مشکلم اینجاست که مثلا من عدد 92 رو به میکرو می فرستم اون طرف توی میکرو به من اعداد دسیمال اون رو تبدیل شده به صورت دو تا عدد 50 و 57 نمایش می دهد . من نمی دانم چی کار کنم که این دو عدد رو با یک دستور بصورت صحیح 92 به من برگرداند . خواهش میکنم اگر کسی می داند کمک کند . ممنون .
    - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

    #2
    پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

    نوشته اصلی توسط mania59
    oo:

    سلام دوستان
    چند روزی است می خواهم ارتباطی بین میکرو کامپیوتر داشته باشم ولی هر کاری میکنم جواب نمی گیرم .
    ارسال و دریافت را درست انجام می دهم یعنی اطلاعات را از هم سمت دارم ولی مشکلم اینجاست که مثلا من عدد 92 رو به میکرو می فرستم اون طرف توی میکرو به من اعداد دسیمال اون رو تبدیل شده به صورت دو تا عدد 50 و 57 نمایش می دهد . من نمی دانم چی کار کنم که این دو عدد رو با یک دستور بصورت صحیح 92 به من برگرداند . خواهش میکنم اگر کسی می داند کمک کند . ممنون .
    مگه هنوز پورت سریال هست؟ oo:

    شماتیک چیه؟ برنامه ای که طرف کامپیوتر برای دریافت و ارسال استفاده میکنی چیه؟

    دیدگاه


      #3
      پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

      دوست عزیز برنامه سمت میکرو CODEVISION و سمت کامپیوتر C# هست . کد ارسال از c# و کد دریافت از کد ویژن رو می زارم .
      خوب اگه مثلا با usb راحتتر میشه این کارو کرد لطفا بگید . ممنون .

      کد ارسال از سی شارپ

      byte[] Bufffer = new byte[9];

      Bufffer = Encoding.ASCII.GetBytes("123456789"
      serialPort1.Open();

      if (serialPort1.IsOpen)
      {

      serialPort1.Write(Bufffer, 0, 9);
      Thread.Sleep(300);
      serialPort1.DiscardOutBuffer();
      serialPort1.close();
      {


      کد دریافت در کد ویژن :

      char buffer[10];
      buffer[9] = 0;
      gets(buffer,9);
      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_puts(buffer);
      delay_ms(3000);
      - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

      دیدگاه


        #4
        پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

        دوست عزیز. مشکلتون کاملا مشخصه.
        شما دارید string میفرستید.
        باید بایت بفرستید. کامپوننت سریال C# هم میتونه string بفرسته و هم بایت. مشکل شما سر نحوه تبدیل دیتای مورد نظرتون به بایت هست.

        دیدگاه


          #5
          پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

          اما من که دارم تبدیلش میکنم به بایت !؟
          Bufffer = Encoding.ASCII.GetBytes("123456789"

          میشه بیشتر راهنمایی کنید .
          - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

          دیدگاه


            #6
            پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

            با hyper terminal چکش کن هم میتونی بفرستی هم بگیری

            دیدگاه


              #7
              پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

              hyper Trminal بدرد من نمی خوره من می خوام برای سخت افزارم برنماه کنترل بنویسم و مجبورم که رو کامپیوتر با سی شارپ کار کنم .
              در ضمن مشکل من سمت کامپیوتر نیست چون در این سمت با سی شارپ مشکلی ندارم مشکل من سمت میکرو که در کد ویژن اعداد رو به صورت دسیمال می ده من هم بصورت بایت و هم رشته و به اشکال مختلفی اطلاعات رو برای میکرو می فرستم ولی همیشه میکرو همون اعداد دسیمال رو بر می گردونه یعنی خلاصه بگم
              من می خوام اگر رشته "92" رو به میکرو فرستادم ا.ن طرف هم همین رشته "92" رو بهم بده ! همین ! بهمین سادگی . ولی نمی دونم چرا نمی شه .
              :cry:
              - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

              دیدگاه


                #8
                پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

                منم گفتم برای تست ازش استفاده کن.

                برنامه میکروت رو هم بزار پس

                دیدگاه


                  #9
                  پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

                  :redface:
                  ok ممنون از راهنماییتون .
                  ببخشید من بد برداشت کردم .
                  راستی برنامه میکرو رو هم گذاشتم ولی دوباره می زارم .

                  char buffer[10];
                  buffer[9] = 0;
                  gets(buffer,9);
                  lcd_clear();
                  lcd_gotoxy(0,0);
                  lcd_puts(buffer);
                  delay_ms(3000);

                  در ضمن من این طوری هم امتحان کردم نشد

                  در یک حلقه فور نوشتم

                  buffer[i]= getchar();

                  و همه بافر رو با همون دستور پر کردم اما در بافر چیزی جز 48 49 50 51 52 53 54 ...
                  نیست یعنی همون کدهای دسیمال
                  :eek:
                  - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

                  دیدگاه


                    #10
                    پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

                    ببین دوست عزیز. اعداد تو میکرو یا کامپیوتر اونجوری که شما میخواین نمایش داده میشه.
                    یعنی اینکه شما تو یک متغیر از نوع char عدد 65 رو ریختی. حالا با یک تابعی مثل printf میگی دیتا رو به من نشون بده.
                    اگر داخل printf قرار بدی %i به شما عدد 65 و اگر قرار بدی %c به شما کاراکتر 'A' رو نشون میده.
                    شما دارین درست میگیرین ، اما غلط نشون میدین.
                    شما بافری که توی روتین سریال میگیرین رو از نوع char انتخاب کنید و بایت آخرش رو صفر بزارین تا آخر رشته مشخص بشه.
                    حالا اون رو مثلا روی LCD نمایش بدین البته به صورت رشته.

                    دیدگاه


                      #11
                      پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

                      منم فکر میکنم طرف میکرو نوع نمایشتون مورد داره برید دنبال نوعهای نمایش و جزئیات بیشتری راجعب دستور LCD_puts بدست بیارید مشکل باید اونجا باشه

                      دیدگاه


                        #12
                        پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

                        خوب دوستان آخه من اصلا عدد رو نمی خوام ببینم تو lcd فقط می خوام که توی یه متغییر داشته باشمش تا بدمش به عنوان سال (مثلا) به آی سی ساعت در واقع در دنباله برنامه من می خوام اعداد گرفته از کامپیوتر رو به عنوان روز و ماه و سال بدم به آی سی ساعت که فقط نوع unsigned char رو به عنوان پارامتر قبول میکنه .
                        دیتایی که من میگیرم یا توی بافری از نوع char هستش یا توی متغییری از نوع char هست و از طرفی هم اون جوری که می خوام نیست . احتمالا حق با شماست دوستان اجازه بدید باز هم روش های مختلف رو چک میکنم نتیجه رو همین جا می گم ولی کسی اطلاعاتی بده ممنون میشم .
                        - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

                        دیدگاه


                          #13
                          پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

                          خوب اگر اینطوریه شما بیا از هر بایت عدد 48 رو که همون '0' هست کم کن تا عدد معادلش در بیاد. مثلا اگر بایت اول عدد 48 باشه میشه 0 و اگر بایت دوم 50 باشه میشه 2 و ... .
                          حالا 2 رو در 10 ضرب کن با 0 که بایت اول هست جمع کن که مجموع عدد 20 رو میده.
                          متوجه شده؟

                          دیدگاه


                            #14
                            پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

                            ممنون دوست عزیز روش جلبی رو گفتید البته هنوز چکش نکردم ولی بنظر عملی می یاد . خیلی خوشحالم کردی . :wow:
                            چک می کنم نتیجه رو در اینجا می گم بازم مرسی . :applause: :wow:
                            - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

                            دیدگاه


                              #15
                              پاسخ : ارسال و دریافت اطلاعات بین میکرو و کامپیوتر

                              درود
                              دوست عزیز چرا از دستور Convert.ToByte() در سی شارپ استفاده نمیکنی ؟
                              در روزگاري كه لبخند آدم ها بخاطر شكست توست برخيز تا بگريزند. كورش كبير
                              شاد بودن، تنها انتقامي است که ميتوان از زندگي گرفت. ارنستو چه گوارا

                              دیدگاه

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