اطلاعیه

Collapse
No announcement yet.

تنظیم یک متغیر عددی توسط ارتباط سریال

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

    تنظیم یک متغیر عددی توسط ارتباط سریال

    سلام
    من میخوام با کامپیوتر یه متغیر از نوع int رو تغییر بدم.
    از وقفه ی سریال اسفاده کردم تا برنامه فقط موقع دریافت قطع بشه.
    هر دستوری میزنم جواب نمیگیرم
    خودم توی اینتراپت کد زیر رو زدم
    int a;
    scanf("%2d",a);
    sp1=a
    الان باید یه عدد دورقمی بگیره و بریزه توی sp1.
    ولی وقتی sp1 رو توی صفحه نمایش میدم با چیزایی که وارد کردم خیلی فرق داره. مثلا 11 وارد میکنم نشون میده 12288 بعد دوباره همون 11 رو وارد میکنم و نشون میده 11219
    لطفا کمکم کنید
    ممنون

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

    خود scanf از تابع getchar استفاده میکنه یعنی داخل getchar از getchar استفاده کردی . بهر حال من نمیدونم که چه اتفاقی میفته؛ تابعتم که کامل ننوشتی
    تابع scanf هم با آدرس متغیر رو میگیره اینطوری scanf("%2d", &a
    اما یه سوال: شما اون عدد دورقمی رو چطور میفرستی ؟؟ بنظرم مثلا عدد 11 رو دو تا کاراکتر 1 داری میفرستی ؛ اینطوری چیزی که کامپیوتر ارسال میکنه در واقع دو عدد 0x31 هگز هست؛ شما اینکارو بکن داخل روتین وقفه ؛ یه کاراکتر بخون و ازش 0x30 تا کم کن (تا بشه عدد اول) و ضربدر 10 کن تابشه عدد دهگان؛ حالا عدد دوم رو بگیر و فقط 0x30 تا ازش کم کن و با اولین عدد جمع کن

    دیدگاه


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

      نوشته اصلی توسط cyber68
      سلام
      من میخوام با کامپیوتر یه متغیر از نوع int رو تغییر بدم.
      از وقفه ی سریال اسفاده کردم تا برنامه فقط موقع دریافت قطع بشه.
      هر دستوری میزنم جواب نمیگیرم
      خودم توی اینتراپت کد زیر رو زدم
      int a;
      scanf("%2d",a);
      sp1=a
      الان باید یه عدد دورقمی بگیره و بریزه توی sp1.
      ولی وقتی sp1 رو توی صفحه نمایش میدم با چیزایی که وارد کردم خیلی فرق داره. مثلا 11 وارد میکنم نشون میده 12288 بعد دوباره همون 11 رو وارد میکنم و نشون میده 11219
      لطفا کمکم کنید
      ممنون
      آخه حیف نیست آدم از این توابع scanf و printf و puts و... استفاده کنه؟؟؟؟
      خوب شما که از اینتراپت استفاده میکنی. یک بار که وقفه خورد مقدار UDR را بخون ، میشه بایت اول. دوباره که وقفه خورد ، UDR را بخون ، میشه بایت دوم.
      راحت تر نیست؟
      راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
      کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
      نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
      http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
      انشالله به زودي تاپيک ها به روز رساني خواهد شد،

      دیدگاه


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

        نوشته اصلی توسط mojalan
        خود scanf از تابع getchar استفاده میکنه یعنی داخل getchar از getchar استفاده کردی . بهر حال من نمیدونم که چه اتفاقی میفته؛ تابعتم که کامل ننوشتی
        تابع scanf هم با آدرس متغیر رو میگیره اینطوری scanf("%2d", &a
        اما یه سوال: شما اون عدد دورقمی رو چطور میفرستی ؟؟ بنظرم مثلا عدد 11 رو دو تا کاراکتر 1 داری میفرستی ؛ اینطوری چیزی که کامپیوتر ارسال میکنه در واقع دو عدد 0x31 هگز هست؛ شما اینکارو بکن داخل روتین وقفه ؛ یه کاراکتر بخون و ازش 0x30 تا کم کن (تا بشه عدد اول) و ضربدر 10 کن تابشه عدد دهگان؛ حالا عدد دوم رو بگیر و فقط 0x30 تا ازش کم کن و با اولین عدد جمع کن
        نوشته اصلی توسط RubeuS
        آخه حیف نیست آدم از این توابع scanf و printf و puts و... استفاده کنه؟؟؟؟
        خوب شما که از اینتراپت استفاده میکنی. یک بار که وقفه خورد مقدار UDR را بخون ، میشه بایت اول. دوباره که وقفه خورد ، UDR را بخون ، میشه بایت دوم.
        راحت تر نیست؟
        احسنت :wow:
        خدا خیرتون بده :applause:
        در واقع به هر دو توصیه عمل کردم
        دستورات زیر ر.و توی اینترات نوشتم درست شد
        if(c==0) {
        a=UDR-48;
        c=1;}
        else {
        b=UDR-48;
        c=0;
        sp1=10*a+b;
        }

        دیدگاه

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