اطلاعیه

Collapse
No announcement yet.

دریافت 16 بیت و ارسال 32 بیت داده به کامپیوتر از طریق پورت سریال

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

    دریافت 16 بیت و ارسال 32 بیت داده به کامپیوتر از طریق پورت سریال

    سلام
    من تمام اینترنت رو جستجو کردم ولی جواب سوالم رو پیدا نکردم.
    1) من باید از طریق پورت سریال یک عدد به اندازه 16 بیت را در میکرو دریافت کنم و پس از انجام محاسباتی یک عدد 32 بیتی را از میکرو از طریق پورت سریال ارسال کنم. ولی از آنجاییکه ریجسترهای میکرو 8 بیتی هستند دقیقا نمیدونم باید چکار کنم. برنامه رو دارم به زبان C مینویسم.
    یک جایی خوندم که گفته بود باید 32 بیت را به 4 تا 8 بیت تقسیم کرده و بعد توسط دستور ()putchar و ()getchar داده را ارسال و دریافت کنیم.
    یک روش دیگر هم تبدیل این 32 بیت به رشته و ارسال و دریافت هر آرایه آن با putchar , getchar بود.
    یک روش دیگر هم ارسال کل 32 بیت با دستورهای ()printf و ()scanf بود. که من نمیدونم آیا این دو دستور فقط 8 بیت را ارسال میکنند یا کل عدد.
    2) یک مشکل دیگری هم وجود داره اینه که بعضی از این دستور ها منتظر نمیمونن تا عدد را به طور کامل وارد کنیم و بعد enter بزنیم! (مثلا 25) همینکه 2 رو بزنیم میفرسته به میکرو.
    این زبان C برای ارسال داده خیلی دستور داره. به کل گیج شدم. :angry: زبون بیسیک خیلی راحت تر بود فقط input و print.
    با تشکر از شما.

    #2
    پاسخ : دریافت 16 بیت و ارسال 32 بیت داده به کامپیوتر از طریق پورت سریال

    سلام

    جواب سوال اول رو که خودت دادی! جواب سوال دوم هم اینه که وقتی مثلا می خوای 25 رو بفرستی به صورت 0x25 بفرست، اگه 25 خالی رو بفرستی اول 2 یعنی 0x32 و بعد 5 یعنی 0x35 ارسال می شه.
    مشکلی نیست که آسان نشود مرد میخواهد که هراسان نشود

    دیدگاه


      #3
      پاسخ : دریافت 16 بیت و ارسال 32 بیت داده به کامپیوتر از طریق پورت سریال

      سلام

      من C بلد نیستم ولی اگه 4 بایت رو پشت سر هم بفرسید میشه :mrgreen:

      کجاش بیسک فقط PRINT و input داره PRINT , PRINTBIN , INPUT , INPUTBIN , INPUTHEX , WAITKEY , INKEY , UDR :icon_razz:

      دیدگاه


        #4
        پاسخ : دریافت 16 بیت و ارسال 32 بیت داده به کامپیوتر از طریق پورت سریال

        نوشته اصلی توسط رضا اسماعیل زاده
        سلام

        جواب سوال اول رو که خودت دادی! جواب سوال دوم هم اینه که وقتی مثلا می خوای 25 رو بفرستی به صورت 0x25 بفرست، اگه 25 خالی رو بفرستی اول 2 یعنی 0x32 و بعد 5 یعنی 0x35 ارسال می شه.
        با تشکر. ولی من تو سوال اول مشکل دارم. اگر با prinf , scanf بشه یکدفعه همه بیت ها را ارسال کرد که دیگه نیازی به این جداسازی نیست. درسته؟؟

        نوشته اصلی توسط erfan m
        سلام

        من C بلد نیستم ولی اگه 4 بایت رو پشت سر هم بفرسید میشه :mrgreen:

        کجاش بیسک فقط PRINT و input داره PRINT , PRINTBIN , INPUT , INPUTBIN , INPUTHEX , WAITKEY , INKEY , UDR :icon_razz:
        در کل خیلی ساده تره بیسیک. البته به نظر من. ولی C جالبتره معلومه که چیکار میکنیم.

        دیدگاه


          #5
          پاسخ : دریافت 16 بیت و ارسال 32 بیت داده به کامپیوتر از طریق پورت سریال

          با سلام
          من باید از طریق پورت سریال یک عدد به اندازه 16 بیت را در میکرو دریافت کنم و پس از انجام محاسباتی یک عدد 32 بیتی را از میکرو از طریق پورت سریال ارسال کنم. ولی از آنجاییکه ریجسترهای میکرو 8 بیتی هستند دقیقا نمیدونم باید چکار کنم. برنامه رو دارم به زبان C مینویسم.
          یک جایی خوندم که گفته بود باید 32 بیت را به 4 تا 8 بیت تقسیم کرده و بعد توسط دستور ()putchar و ()getchar داده را ارسال و دریافت کنیم.
          یک روش دیگر هم تبدیل این 32 بیت به رشته و ارسال و دریافت هر آرایه آن با putchar , getchar بود.
          یک روش دیگر هم ارسال کل 32 بیت با دستورهای ()printf و ()scanf بود. که من نمیدونم آیا این دو دستور فقط 8 بیت را ارسال میکنند یا کل عدد.
          بنظرم من بهتر هست که اعدادتون رو (بر مبنای دسیمال) در قالب رشته دریافت و ارسال کنید و بعد اگه نیاز به پردازش داشتید به عدد تبدیلشون کنید چون اگه مثلا دارید از طریق کیبورد اعداد رو به PC میدید و از اونجا به میکرو منتقل میکنید ، چون اینجا با کد اسکی داریم کار میکنیم یعنی داده ای از نوع char نه unsigned char ! و از طرفی ورودی و خروجی توابع putchar , getchar از نوع char هست !

          2) یک مشکل دیگری هم وجود داره اینه که بعضی از این دستور ها منتظر نمیمونن تا عدد را به طور کامل وارد کنیم و بعد enter بزنیم! (مثلا 25) همینکه 2 رو بزنیم میفرسته به میکرو.
          خوب ،
          (البته دستور نه ، تابع !)

          باید تابعی که وظیفه نمایش اطلاعات رو داره ، همواره بیاد چک کنه که آیا آخرین کارکتر ارسالی "enter " یا معادل اسکی اون 10 یا 13 هست یا خیر . مثلا :

          کد:
          DataByte = Serial_ReceiveByte ();
          f((DataByte==10)||(DataByte==13))Serial_SendString(">>>TEST<<<");


          این زبان C برای ارسال داده خیلی دستور داره. به کل گیج شدم. :angry: زبون بیسیک خیلی راحت تر بود فقط input و print.
          با تشکر از شما.
          خوب این توابعی که الان شما دارید ازشون استفاده میکنید جزو توابع استاندارد سی هستند و داخل هدر STDIO.H قرار گرفتن، میتونید در مورد نحوه عملکردشون تو کتابهای زبان سی(مثلا کتاب قمی) اطلاعات کافی رو بدست بیارید.

          ولی من تو سوال اول مشکل دارم. اگر با prinf , scanf بشه یکدفعه همه بیت ها را ارسال کرد که دیگه نیازی به این جداسازی نیست. درسته؟؟
          چیزی که این توابع ارسال و یا دریافت میکنن ، رشته هست ، رشته یه مجموعه کارکتر (یه متغیر از توع CHAR که N درایه داره)هست که به کارکتر NULL ختم میشه . این توابع در واقع دارن اون دوتا تابع PUTCHAR و GETCHAR رو دائم اجرا میکنن تا زمانی که شرط خاتمه اجراشون فراهم بشه ، تابع PRINTF تا زمانی اجرا میشه که به کارکتر NULL برسه و تابع SCANF هم تا زمانی اجرا میشه که ورودیش غیر از "ENTER " باشه.
          پس برای ارسال و دریافت با اینها باید داده هاتون تبدیل به رشته بشن و در هر غالبی که دریافت میشن به صورت رشته ذخیره میشن.

          دیدگاه

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