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

موضوع: مشکل با usart

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2010
    نام
    ماهان باستانی
    نوشته ها
    41
    تشکر
    12
    تشکر شده 28 بار در 19 پست

    پیش فرض مشکل با usart

    سلام آقایون خسته نباشید!
    من یه مشکل دارم در برنامه زیر:
    avrmp.ir/USART sample.rar
    بعد از اینکه میکرو داده داد با کامپیوتر بهش داده می دم بعد این داده رو ال سی دی می نویسه!
    ولی مشکل اصلی اینکه داده قبلی که به کامپیوتر داده رو هم می چسبونه به همون داده ای که بهش دادی می نویسه رو lcd!
    نمی دونم منظورم رو متوجه شدید یا نه!
    ولی برنامه رو تست کنید خودتون می فهمید!
    آخه چراا؟/
    کمکککک!

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

  3. #2
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    اقا لینکی برای دانلود برنامه شما نیست !
    احتمالا فایل شما آپلود نشده

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


  5. #3
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2010
    نام
    ماهان باستانی
    نوشته ها
    41
    تشکر
    12
    تشکر شده 28 بار در 19 پست

    پیش فرض

    درست آپلود شده بود چون رو هسته خودمه ولی من اسمشو عوض کردم که بهترشه:
    http://avrmp.ir/USART--sample.rar
    ممنون از توجهتون!

  6. #4
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    خوب مشکل اول شما سطر 13 برنامه هست این سطر
    کد:
    char havij[]=0;
    شما متغییر هویج! رو تعریف کردید ولی طول آرایه به اون ندادید و در ضمن مقدار دهی صحیح رو هم انجام ندادید!
    این سطر رو به این صورت تغییر بدید:
    کد:
    char havij[10]={0};
    خوب نکته نه ایراد:
    سطر 38 و تابع USART_ReadBuffer همان طور که قبلا گفتم این تابع برای دریافت رشته به صورت سخت افزاری عمل می کند نه نرم افزاری ، پس این تابع قسمت USART رو برای دریافت یه رشته اماده میکنه و منتظر دریافت کامل داده نمیشه {به خاطر این که وقت CPU گرفته نشه} شما باید برای استفاده بعد از این تابع Flag دریافت داده رو با While چک کنید که مطمئن بشید 10 کارکتر دریافت شده یا این که از مد اینتراپت استفده کنید.
    راه ساده تر این که از تابع USART_Read و یک حلقه برای دریافت دیتا استفاده کنید

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


  8. #5
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2010
    نام
    ماهان باستانی
    نوشته ها
    41
    تشکر
    12
    تشکر شده 28 بار در 19 پست

    پیش فرض

    آقا ممنون از جوابتون مشکل با گفته شما حل شد ولی یه سوال دیگه!
    می خواهم بهش بگم که وقتی enter زده شد به معنی دریافت کامل havij است!
    و تعداد رقم ها رو هم رقم همون داده دریافتی قرار دهم ولی مشکل اینکه کاراکتر enter چیست؟؟؟
    میشه یه برنامه نمونه برام همینجا بگذارید( لازم نیست فایلشو بگذارید فقط بنویسید)
    ممنون میشم!

  9. #6
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2010
    نام
    ماهان باستانی
    نوشته ها
    41
    تشکر
    12
    تشکر شده 28 بار در 19 پست

    پیش فرض

    روی ال سی دی کاراکتر اینتر رو 4 تا خط فاصله روی هم نشون میده!!

  10. #7
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    کد Enter عدد 13 هست !
    میتونی از این کد استفاده کنی:
    کد:
    i=0;
    while(*(havij+i)!=13 && i<10)
        *(havij+i++)=USART_Read(USART1,0);
    این کد وقتی که شما Enter رو فشار میدی از حلقه خارج میشه و مقدار کارکتر دریافتی در متغییر i ذخیره میشه!
    در ضمن اگه تعداد کارکتر دریافتی از 10 بیشتر شد نیز از حلقه خارج میشه{برای جلو گیری از آورفلو شدن متغییر}

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


  12. #8
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2010
    نام
    ماهان باستانی
    نوشته ها
    41
    تشکر
    12
    تشکر شده 28 بار در 19 پست

    پیش فرض

    آقا این کل برنامه منه:
    #include <at91sam7s64.h>
    #include <lib_at91sam7s64.h>
    #include "usart.h"
    #include "lcd4bit.h"
    #include "delay.h"
    #define BOAR_CLK 48000000

    int main(void){
    char buf[]="\r\nhello, world";
    char buf1[]="\r\nThis Program Write By Mahan - Bastani.";
    char buf2[]="\r\nThis Sample Publish In AVRMP.IR\n\r";
    char i;
    char havij[10]={0};
    char buf4[]="please enter your password:\n\r";
    // Activ Power USART 1
    AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_US1); // OR AT91C_ID_US0
    USART_Configure_PIO(USART1_PORT,TXD1);// SET TXD0 T1 USART
    USART_Configure_PIO(USART1_PORT,RXD1);// SET RXD0 T1 USART



    USART_Configure(USART1,USART_MODE_ASYNCHRONOUS,384 00, BOAR_CLK); // Config Usart1
    USART_SetTransmitterEnabled(USART1, 1); // ENABLE Transmitter
    USART_SetReceiverEnabled(USART1, 1); // Enable Receiver

    USART_Write(USART1,65,0);
    USART_WriteBuffer(USART1,buf,sizeof(buf));
    USART_WriteBuffer(USART1,buf1,sizeof(buf1));
    USART_Write(USART1,'T',0);
    delay_ms(3000);
    USART_WriteBuffer(USART1,buf2,sizeof(buf2));
    USART_WriteBuffer(USART1,buf4,sizeof(buf4));


    lcd_pin (1,0,1,2,3,4,5);

    i=0;
    do
    {
    *(havij+i++)=USART_Read(USART1,0);
    }while(*(havij+i)!=13 && i<10);
    lcd_gotoxy(1,1);
    lcd_clear();
    lcd_putsf(havij);
    delay_ms(200);





    }

    ولی کراراکتر اینتر رو متوجه نمیشه!!
    یعنی تا 10 تا نشه رو ال سی دی چیزی نمی نویسه!
    فکر می کنم کاراکتر اینتر را اشتباه گفتید!
    باز هم ممنون!

  13. #9
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    نه دوست من شما کد رو اشتباه نوشتی !
    الان میگم اشتباه شما کجاست
    این کدی که شما نوشتی :
    کد:
    do
    {
    *(havij+i++)=USART_Read(USART1,0);
    }while(*(havij+i)!=13 && i<10);
    برسی کد:
    در لحظه اول که i=0 هست مقدار خوانده شده در خانه صفر از آرایه هویج قرار میگیرد و بلافاطصله یکی به مقدار i اضافه میشود و در سطر بعد که دستور While هست خانه 1 {چون در خط قبل یکی به مقدار i اضافه شده است } که هم اکنون مقدار دهی نشده است با مقدار 13 مقایسه میشود پس در نهایت همیشه مقدار 0 با 13 مقایسه میشه، امیدوارم متوجه اشتباه کد شده باشید و اما راه حل :
    راه اول:{توصیه نمی کنم}
    کد:
    do
    {
    *(havij+i++)=USART_Read(USART1,0);
    }while(*(havij+i-1)!=13 && i<10);
    راه دوم:{استاندارد هست}
    کد:
    do
    {
    *(havij+i)=USART_Read(USART1,0);
    }while(*(havij+i++)!=13 && i<10);

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


  15. #10
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2010
    نام
    ماهان باستانی
    نوشته ها
    41
    تشکر
    12
    تشکر شده 28 بار در 19 پست

    پیش فرض

    خیلی ممنون من خودم متوجه اشتباهم شدم و درستش کردم ولی الان یه مشکل دارم!
    میشه دستور های زیر رو برام توضیح بدید:
    1- چگونگی جدا کردن n کارکتر از سمت چپ یا راست رشته x
    2-چگونگی ترکیب 2 رشته از سمت چپ یا راست
    3- چگونگی اضافه کردن کاراکتر n به سمت چپ یا راست کراکتر x
    همین
    خیلی ممنون میشم توضیح بدید اشکال اصلی من توی زبان هست!

  16. #11
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2010
    نام
    ماهان باستانی
    نوشته ها
    41
    تشکر
    12
    تشکر شده 28 بار در 19 پست

    پیش فرض

    کمممکک!!
    ویرایش توسط mahanb : 20-09-2011 در ساعت 20:44

  17. #12
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    الان کمک دقیقا در چه زمینه باید باشه؟

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

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

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

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