NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3762 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 16 از 16

موضوع: کمک در مورد واحد usart

  1. #1
    کاربر فعال amiray آواتار ها
    تاریخ عضویت
    Jul 2010
    نام
    عباس یکانلو
    نوشته ها
    351
    تشکر
    187
    تشکر شده 360 بار در 187 پست

    پیش فرض کمک در مورد واحد usart

    با سلام
    نماز و روزه هاتون قبول
    من تو استفاده از usart یکم مشکل دارم . مشکلمم اینه که من با همه دستور های این واحد میتونم اطلاعات رو ارسال کنم ولی وقتی میام با استفاده از دستور printf برای ارسال و دریافت هر نوع داده ای استفاده کنم جواب نمیده. حالا خواستم ببینم که کسی میتونه راهنمایی کنه که من چطوری یه عدد رو بفرستمو اون یکی میکرو با scanf دریافت کنه.
    تو کتاب مظاهریان هم نوشته که با این دستو میشه یه عدد رو فرستاد
    کد:
     
    printf("%d",trans);
    و با این دستور دریافت کرد
    کد:
     
    trans=scanf("%d");
    ولی من هر کار کردم کار نکرد.
    من قبلا اعداد رو با getchar در یافت میکردم چون اعدادم کوچیکه ولی الان میخوام یه عدد چهار رقمی رو ارسال و دریافت کنم
    ممنون میشم کمک کنین خیلی اظطراریه
    با تشکر

  2. تشکرها از این نوشته :


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  4. #2
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    طریقه صحیح برای گرفتن رشته اعداد
    کد:
    scanf("%4d",&trans)

  5. کاربران : 2 تشکر کرده اند از شما Ma3ood برای ارسال این پست سودمند:


  6. #3
    کاربر فعال amiray آواتار ها
    تاریخ عضویت
    Jul 2010
    نام
    عباس یکانلو
    نوشته ها
    351
    تشکر
    187
    تشکر شده 360 بار در 187 پست

    پیش فرض

    طریقه صحیح برای گرفتن رشته اعداد
    کد:
    scanf("%4d",&trans)
    با تشکر از جوابتون
    باری فرستادن باید priintf رو چه طوری بنویسم.

  7. تشکرها از این نوشته :


  8. #4
    کاربر دائمی
    تاریخ عضویت
    Jun 2009
    نام
    روح الله خرم بخت
    نوشته ها
    403
    تشکر
    456
    تشکر شده 591 بار در 214 پست

    پیش فرض

    بهتر از است از sprintf استفاده کنید و رشته ای که توسط این تابع آماده میشه رو روی usart ارسال کنید. همینطو می تونید از sscanf برای آنالیز یه دیتای دریافتی استفاده کنید.

  9. کاربران : 3 تشکر کرده اند از شما roohlla برای ارسال این پست سودمند:


  10. #5
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    برای ارسال چهار رقم از دستور زیر استفاده کنید
    کد:
    printf("%4d",trans);

  11. کاربران : 2 تشکر کرده اند از شما Ma3ood برای ارسال این پست سودمند:


  12. #6
    کاربر فعال amiray آواتار ها
    تاریخ عضویت
    Jul 2010
    نام
    عباس یکانلو
    نوشته ها
    351
    تشکر
    187
    تشکر شده 360 بار در 187 پست

    پیش فرض

    برای ارسال چهار رقم از دستور زیر استفاده کنید
    کد:
    مشکلم اینه که من تو پروژه ام یه قسمتی هست که یه میکرو یه محاسباتی رو انجام میده نتیجه رو میفرسته به میکرو بعدی بعد اون میکرو هم یه محاسبات دیگه انجام میده نتیجه رو بر میگردونه و همینطور الی اخر.
    مثلا میکرو اول عدد 1 رو میفرسته به دومی اون دوبرابر میکنه و برمیگردونه به میکرو اول و اولی باز دوبرابر میکنه میفرسته به میکرو دوم و همینطور الی آخر.
    که عددم یه عدد ثابت نیست و تعداد رقمش بزرگ میشه.
    ولی من هر کاری کردم نتونستم یه عدد رو هم منتقل کنم.
    من برنامه ارسال یه عدد رو ضمیمه میکنم اگه بشه یه نگاهی بهش بندازین.
    شرمنده من زیاد سوال میپرسم.
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: rar 2.rar (111.4 کیلو بایت, 110 نمايش)
    ویرایش توسط amiray : 19-07-2013 در ساعت 19:17

  13. تشکرها از این نوشته :


  14. #7
    کاربر فعال amiray آواتار ها
    تاریخ عضویت
    Jul 2010
    نام
    عباس یکانلو
    نوشته ها
    351
    تشکر
    187
    تشکر شده 360 بار در 187 پست

    پیش فرض

    کسی نیست جواب بده؟؟

  15. تشکرها از این نوشته :


  16. #8
    کاربر فعال safavism آواتار ها
    تاریخ عضویت
    Mar 2011
    نام
    سیدمحمدصفوی
    نوشته ها
    299
    تشکر
    144
    تشکر شده 245 بار در 132 پست

    پیش فرض

    با سلام
    با دستورwaitkey از پورت سریال میکرو دیتا دریافت میشه حالا اگه بخوام این اطلاعات رو به حالت اول برگردونم و دوباره بفرستم رو یه usart نرم افزاری باید به لحاظ نرم افزادی باید چکار کنم از همه دستورها استفاده کردم ولی نشد..به عبارت دیگه من قبل از اینکه دیتا رو به میکرو بدم بوسیله max به هایپر ترمینال وصل میشم و اطلاعات رو مشاهده میکنم حالا همین اطلاعات رو از tx به rx میکرو میدم و دیتا را میگیرم و رو ال سی دی نمایش میدم ..میخواستم همین اطلاعات گرفته شده دوباره به حالت اول برگردونم و بفرستم رو یه tx دیگه همین میکرو ، که نرم افزاری تعریف شده بعد دوباره رو هاپپر ترمینال مشاهده کنم ولی از هر دستوری استفاده کردم نشد نمیدونم مشکل کجاست اجغ وجغ رو هایپر ترمینال ظاهر میشه مطمئنم که از لحاظ سخت افزاری مشکل نداره..

  17. تشکرها از این نوشته :


  18. #9
    عضو جدید
    تاریخ عضویت
    Apr 2013
    نوشته ها
    11
    تشکر
    0
    تشکر شده 17 بار در 9 پست

    پیش فرض

    با سلام
    برای اینکه اجغ وجغ نباشه باید نرخ انتقال رو توی هایپر ترمینال تنظیم کنی البته اول باید با توجه به فرکانسی که استفاده می کنی مقدار رجیستر UBRRL رو مقدار دهی کنی UBRR=(F/16 BAUD) -1

    برای سوال دوست اول من یه زمانی یه پروژه با دو میکرو ساختم جواب داد در مورد میکرو فرستنده
    UCSRB=0x08 پورت سریال در حالت فرستنده
    UCSRC=0x86 مد آسنکرون 8 بیتی بدون پریتی
    UBRRH=0x00
    UBRRL=0x67 نرخ انتقال 4800 با فرکانس 8مگاهرتز 67=1- (4800*16 / 8000000)
    ????=data دیتا که قرار است ارسال شود مقدار دهی میشود
    putchar (data دیتا به خروجی سریال ارسال میشود
    delay_ms(200 تاخیر 200 میلی ثانیه

    در مورد میکرو گیرنده
    پورتی که به ال سی دی متصل است تعیین میکنیم
    UCSRB = 0x10 فعال کردن پورت سریال در حالت گیرنده
    بقیه رجیسترها طبق فرستنده
    ()data_r=getchar خواندن دیتا از پورت سریال
    بعد دیتا رو به ال سی دی ارسال می کنیم
    (البته متغییرها که اول برنامه تعریف می کنیم)
    یه مثال برای هایپر ترمینال هم گذاشتم
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: zip usart.zip (117.9 کیلو بایت, 95 نمايش)

  19. تشکرها از این نوشته :


  20. #10
    ناظم انجمن Ma3ood آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    مسعود
    نوشته ها
    2,248
    تشکر
    1,912
    تشکر شده 3,087 بار در 1,509 پست

    پیش فرض

    نقل قول نوشته اصلی توسط amiray نمایش پست ها
    کسی نیست جواب بده؟؟
    شما از دستوراتی مثل gets هم برای دریافت میتونی استفاده کنی
    در مورد اینکه طول رشته تغییر میکنه میتونی در ابتدا در مبدا و یا مقصد تعداد اعداد را به دست بیاری و همراه با طول رشته مثلا در اغاز اون بفرستی تا بدونی چند عدد باید دریافت بشه

  21. کاربران : 2 تشکر کرده اند از شما Ma3ood برای ارسال این پست سودمند:


  22. #11
    عضو جدید
    تاریخ عضویت
    Jul 2013
    نوشته ها
    5
    تشکر
    32
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام
    منم با usart مشکل دارم
    مشکلم هم اینه که من وقتی با دستور puts یه رشته مثلا amir رو میفرستم و در گیرنده با دستور gets رشته رو دریافت میکنم فقط دوحرف am ارسال میشود و lcd این دو حرف رو نشون لطفا کمک کنید
    برنامه گیرنده
    کد:
    #include <mega8.h>
    #include <alcd.h>
    #include <stdio.h>
    #include <delay.h>
    void main(void)
    {
    unsigned char str[20];
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;
    lcd_init(16);
    
          gets(str,20);
          lcd_puts(str);
    }
    برنامه فرستنده
    کد:
    #include <mega8.h>
    #include <stdio.h>
    #include <delay.h>
    void main(void)
    {
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;
    puts("amir");
    }

  23. #12
    کاربر فعال amiray آواتار ها
    تاریخ عضویت
    Jul 2010
    نام
    عباس یکانلو
    نوشته ها
    351
    تشکر
    187
    تشکر شده 360 بار در 187 پست

    پیش فرض

    سلام منم مشکل دوستمون xp10 دارم من وقتی میخوام یه رشته ای رو ارسال کنم میام اونو یکی یکی ارسال میکنم بعد اون طرف یکی یکی میگیرم به هم وصل میکنم. و وقتی با دستور puts میفرستم فقط دو تا کاراکتر رو میفرسته و بقیه نشون داده نمیشه. من فکر کنم قبلا این مشکل رو نداشتم امکان داره از کامپایلر باشه؟ چون ورژن جدید کدویژن رو استفاده میکنم.
    یا اصلا این دستور کلا اینطوری کار میکنه؟
    من اصلا نمیتونم یه عدد چهار رقمی رو هم یکجا با usart ارسال کنم
    من اونو هم به صورت چهار تا کاراکتر ارسال میکنم بعد کد اسکی رو منهای 48 میکنم بعد به هم وصل میکنم.
    اگه بشه یه رشته رو یه جا ارسال کرد این مشکل منم حل میشه.
    لطفا کمک کنید.
    با تشکر

  24. #13
    عضو جدید
    تاریخ عضویت
    Apr 2013
    نوشته ها
    11
    تشکر
    0
    تشکر شده 17 بار در 9 پست

    پیش فرض

    با سلام
    شما مي توانيد از تابع sprintf استفاده کني اين تابع به جاي ارسال خروجي سريال داده هاي فرمت بندي شده را در يک ارايه sram قرار ميدهد ودر انتهاي ارايه کاراکتر تهي را قرار مي دهد در اين صورت مي توان توسط تابع puts ارايه فرمت بندي شده را به خروجي سريال ارسال کرد
    با تابع scanf مي توان يک رشته را کامل دريافت کرد تا اينکه رشته به n\ ختم شود
    در کل با تابع sprintf ميتونيد اين مشکل را حل کنيد البته اين تابع چند پارامتر دارد
    با تابع printf هم اين مشکل به راحتي حل مي شود
    یه کتاب هم هست یه کم در این مورد توضیح داده www.avr.ir/files/avr.zip

  25. تشکرها از این نوشته :


  26. #14
    کاربر علاقه مند
    تاریخ عضویت
    May 2013
    نوشته ها
    24
    تشکر
    12
    تشکر شده 0 بار در 0 پست

    پیش فرض

    من یه مشکل دارم رشته ای که دریافت میکنم اگه بخوام داخل دستور سوئیچ یا if بذارم ارور میده

  27. #15
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    دستور puts رشته ها رو کاراکتر به کاراکتر به پورت com ارسال میکنه .
    در سمت گیرنده ، کد 10 به معنی پایان خط و کد 13 به معنای کلید enter ( پایان ارسال ) هست .
    در این حالت اگه در کد های ارسالی عدد 13 یا 10 یافت بشه ، گیرنده به اشتباه فکر میکنه ارسال اطلاعات از سمت فرستنده به پایان رسیده .
    به عنوان مثال کارکتر های مربوط به رشته ی amir رو به باینری تبدیل کنید :
    Binary ↔ ASCII text converter
    همون طور که مشاهده کنید کد 13 در کارکتر سوم وجود داره :
    01100001 01101101 01101001 01110010
    به همین دلیل هست که در راهنمای اغلب کامپایلر ها ( مثل ccs pic c ) نوشته :

    In general printf() is more useful than puts().
    یعنی بهتره به جای puts از دستورات خانواده ی printf استفاده بشه . که دوستان در پست های قبلی چند نمونش رو معرفی کردن .

  28. کاربران : 2 تشکر کرده اند از شما 1nafar برای ارسال این پست سودمند:


  29. #16
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ciscozagros نمایش پست ها
    من یه مشکل دارم رشته ای که دریافت میکنم اگه بخوام داخل دستور سوئیچ یا if بذارم ارور میده
    سلام
    برنامه ای رو که نوشتید بزارید ، مطالب درج شده در لینک های موجود در امضای من رو مطالعه کنید .

موضوعات مشابه

  1. کمک در ارتباط دو میکرو با usart
    توسط Niloufar.Male در انجمن AT91 series (ATMEL)
    پاسخ: 11
    آخرين نوشته: 25-11-2013, 13:06
  2. کمک در مورد usart
    توسط mahdi_6739 در انجمن AVR
    پاسخ: 3
    آخرين نوشته: 01-10-2012, 11:06
  3. مدباس و usart
    توسط ali_73909 در انجمن میکروکنترلرهای 8و16 بیتی
    پاسخ: 0
    آخرين نوشته: 23-08-2012, 05:22
  4. مشکل در usart
    توسط barat در انجمن AVR
    پاسخ: 3
    آخرين نوشته: 21-05-2012, 19:48

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •