ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 3 123 آخرین
نمایش نتایج: از 1 به 10 از 24
  1. #1
    2013/11/03
    بناب
    153
    3

    ارتباط سریال در pic

    با سلام خدمت دوستان و همکاران

    بنده از طریق کامپیوتر با میکرو ارتباط برقرار کردم. اما....
    اما مشکل اینجاست که مثلا وقتی داده C0 00 40 06 0A را میفرستم داده ای که میکرو برمیگرداند، هربار تغییر میکند.
    کد

    #include <18f452.h>
    #use delay (xtal=20MHz)
    #fuses HS,nowdt
    #use rs232(baud=9600,parity=N, xmit=PIN_C6,rcv=PIN_C7)

    char s[5];


    void main()
    {


    while(true)
    {
    for(int i=0;i<=4;i++)
    s[i]=getc();
    putc(s[4]);

    }

    }


    هدف این است که داده که 5 بایت است، هر کدام در یک خانه از ارایه ذخیره شده و مثلا 0a را حذف کرده و بقیه را به عدد تبدیل کنم.
    هم اکنون نیازمند یاری سبزتان هستیم......
    رو به خودت نسبت هستی مده!**دل به چنین مستی و پستی مده! //زانچه نداری ز چه افسردهآ*ای*و زغم و اندوه دل آزردهآ*ای؟!//گر ببرد ور بدهد دست دوست*ور بِبَرد ور بنهد مُلک اوست//ور بِکِشی یا بکُشی دیو غم **کج نشود دست قضا را قلم//آنچه خدا خواست همان میآ*شود**وآنچه دلت خواست نه آن میآ*شود.
    ....
  2. #2
    2009/02/18
    تهران
    270
    1

    پاسخ : ارتباط سریال در pic

    سلام

    برنامه ای که نوشتید کامل نیست !

    ببینید به دو روش میتونید با درگاه سریال ارتباط برقرار کنید 1 روش پولینگ یا چک کردن مدام 2 روش استفاده از وقفه

    در روش اول
    شما باید در یک حلقه , پرچم دریافت سریال رو مدام چک کنید , یعنی باید اول ببینید که آیا یک بایت سریال توسط سخت افزار USART دریافت شده یا خیر و اگر دریافت شده بود اقدام به خوندن اون بایت کنید و اون رو در یک بافر ذخیره کنید

    در روش دوم
    نیازی به چک کردن مدام نیست و هنگام دریافت یک بایت , میکرو وقفه میخوره و شما میتونید بایت دریافت شده رو در داخل یک بافر ذخیره کنید

    در برنامه شما خبری از چک کردن پرچم دریافت نیست !
    نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
    تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه
  3. #3
    2007/08/02
    1,353
    846

    پاسخ : ارتباط سریال در pic

    من قبلا این مشکلو با CCS داشتم پدرمو در آورد
    از پورت سریال سخت افزاری استفاده کن مشکلت حل میشه
    بر دوستان رفته چه افسوس میخوری
    ما هم مگر جواز اقامت گرفته ایم
  4. #4
    2013/11/03
    بناب
    153
    3

    پاسخ : ارتباط سریال در pic

    نقل قول نوشته اصلی توسط ramezani.t
    سلام

    برنامه ای که نوشتید کامل نیست !

    ببینید به دو روش میتونید با درگاه سریال ارتباط برقرار کنید 1 روش پولینگ یا چک کردن مدام 2 روش استفاده از وقفه

    در روش اول
    شما باید در یک حلقه , پرچم دریافت سریال رو مدام چک کنید , یعنی باید اول ببینید که آیا یک بایت سریال توسط سخت افزار USART دریافت شده یا خیر و اگر دریافت شده بود اقدام به خوندن اون بایت کنید و اون رو در یک بافر ذخیره کنید

    در روش دوم
    نیازی به چک کردن مدام نیست و هنگام دریافت یک بایت , میکرو وقفه میخوره و شما میتونید بایت دریافت شده رو در داخل یک بافر ذخیره کنید

    در برنامه شما خبری از چک کردن پرچم دریافت نیست !
    ممنون از پاسخ شما
    اینو متوجه شدم و برنامم رو با وقفه تنطیم کردم ونکته دیگر اینکه که هربار 5 بایت داده میگیره، اینو چطوری در روتین سرویس وقفه قرار بدم که بتونم به تک تک بایتها دسترسی داشته باشم.
    ممنون

    اضافه شده در تاریخ :
    نقل قول نوشته اصلی توسط S S
    من قبلا این مشکلو با CCS داشتم پدرمو در آورد
    از پورت سریال سخت افزاری استفاده کن مشکلت حل میشه
    ممنون از لطف شما.
    منظورتون رو متوجه نشدم. اینکه
    مدار من اینطوریه که از کامپیوتر با rs232 و max232 به میکرو وصل شدم که اگه جواب بده، ماژولم رو با کامپیوتر جایگزین میکنم.
    برا شما هم همینطوری بود ایا؟
    رو به خودت نسبت هستی مده!**دل به چنین مستی و پستی مده! //زانچه نداری ز چه افسردهآ*ای*و زغم و اندوه دل آزردهآ*ای؟!//گر ببرد ور بدهد دست دوست*ور بِبَرد ور بنهد مُلک اوست//ور بِکِشی یا بکُشی دیو غم **کج نشود دست قضا را قلم//آنچه خدا خواست همان میآ*شود**وآنچه دلت خواست نه آن میآ*شود.
    ....
  5. #5
    2007/08/02
    1,353
    846

    پاسخ : ارتباط سریال در pic

    منطور من اینه که شما توی کامپایلر ccs پایه های rx و tx خودتون مشخص میکنید که به کدوم پین متصل بشه
    نمیدونم کامپایلر چیکار میکنه ولی من وقتی درست از پایه های RX و TX خود میکرو استفاده کردم دیتا درست ردو بدل میکرد
    دستور فعال سازیش فرق داره فردا برات میزارم

    اضافه شده در تاریخ :
    [code=c]#use rs232(baud=2400, UART1, ERRORS)[/code]
    بر دوستان رفته چه افسوس میخوری
    ما هم مگر جواز اقامت گرفته ایم
  6. #6
    2013/08/28
    539
    13

    پاسخ : ارتباط سریال در pic

    نقل قول نوشته اصلی توسط amanver
    ممنون از پاسخ شما
    اینو متوجه شدم و برنامم رو با وقفه تنطیم کردم ونکته دیگر اینکه که هربار 5 بایت داده میگیره، اینو چطوری در روتین سرویس وقفه قرار بدم که بتونم به تک تک بایتها دسترسی داشته باشم.
    ممنون
    با سلام یک ارایه و عدد گلوبال تعریف کنید و مثل زیر عمل کنید
    کد:
    Char rd = uart_rd();
    Buf[bufIndex]=rd;
    حالا تو ارایه رشته ورودی هست، فقط با توجه به طول ارایه یه شزط هم روی اون عدد بذار تا از سرریز بافر جلوگیری کنی
    The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.
  7. #7
    2013/11/03
    بناب
    153
    3

    پاسخ : ارتباط سریال در pic

    بالاخره با راهنمایی دوستان به نتیجه رسید.ممنونم از شما

    کد را اوردیم شاید به درد دوستان دیکر بخوره.
    کد:
    #include <18f452.h>
    #use delay (xtal=20MHz)
    #fuses HS,nowdt
    #use rs232(baud=9600, UART1, ERRORS)
    
    char rcv,s[5];
    #INT_RDA
    void RDA_isr(void) // receive data from rs485 
    {
    for(int i=0;i<=4;i++)
    {
    rcv=getc();
    s[i]=rcv;
    }
    putc(s[3]);
    } 
    
    
    void main()
    {
    
    enable_interrupts(INT_RDA);
    enable_interrupts(GLOBAL);
    
    while(true)
    {
    
    }
    
    }
    فقط 2 تا سوال دارم.
    یکی اینکه دستور uart_rd() در ccs بود یانه؟
    دومیش هم اینکه وقتی داده ای بیشتر از 5 بایت(بیشتر از طول ارایه) میدم، داده مورد نظر برنمیگرده.میخواستم بدونم برای اینکه هر داده ای با هر طولی گرفتم همان نتیجه رو بده باید چه کنم؟
    ممنون
    رو به خودت نسبت هستی مده!**دل به چنین مستی و پستی مده! //زانچه نداری ز چه افسردهآ*ای*و زغم و اندوه دل آزردهآ*ای؟!//گر ببرد ور بدهد دست دوست*ور بِبَرد ور بنهد مُلک اوست//ور بِکِشی یا بکُشی دیو غم **کج نشود دست قضا را قلم//آنچه خدا خواست همان میآ*شود**وآنچه دلت خواست نه آن میآ*شود.
    ....
  8. #8
    2013/08/28
    539
    13

    پاسخ : ارتباط سریال در pic

    بالاخره با راهنمایی دوستان به نتیجه رسید.ممنونم از شما
    :applause:
    یکی اینکه دستور uart_rd() در ccs بود یانه؟
    مثال بود، منظورم تابع مخصوص خوندن کاراکتر در کامپایلر شما بود. در میکرو سی این دستور وجود داره.
    دومیش هم اینکه وقتی داده ای بیشتر از 5 بایت(بیشتر از طول ارایه) میدم، داده مورد نظر برنمیگرده.میخواستم بدونم برای اینکه هر داده ای با هر طولی گرفتم همان نتیجه رو بده باید چه کنم؟
    کد رو به شکل زیر اصلاح کنید
    کد:
    char buf[1000];
    int bufIndex=0;
    #INT_RDA
    void RDA_isr(void) // receive data from rs485 
    {
    buf[bufIndex++] = getc();
    if ( bufIndex > 999 )
    bufIndex = 0;
    }
    نیازی به for نیست به ازای هر کاراکنر دریافتی یه بار کد بالا اجرا میشه، با کد بالاشما تا 1000 کاراکتر رو می نوتید بخونید که برای اکثر کار ها بیش از کافیه. بیش از 1000 کاراکتر دوباره میاد و دیتاهای قبل رو overwrite میکنه. این از دریافت اصولی حالا هر کار می خواین با اضافه کردن کد مربوط انجام بدین
    و سوال اخر اینکه اگر داده ای به صورت C0 00 40 06 از سریال بگیرم، چگونه میتوان به عدد تبدیل کرد به این صورت که دوبایت اول به یک عدد و دو بایت دوم به عددی دیگر. بایت اخر هم بایت علامت بوده و حذف میشود.؟
    اگه درست فهمیده باشم
    کد:
    int a = buf[0] << 8 | buf[1];
    با کد بالا دو یایت اول باهم یکجا، معنای یک عدد رو پیدا می کنن
    The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.
  9. #9
    2013/11/03
    بناب
    153
    3

    پاسخ : ارتباط سریال در pic

    نقل قول نوشته اصلی توسط hessam2013
    نیازی به for نیست به ازای هر کاراکنر دریافتی یه بار کد بالا اجرا میشه، با کد بالاشما تا 1000 کاراکتر رو می نوتید بخونید که برای اکثر کار ها بیش از کافیه. بیش از 1000 کاراکتر دوباره میاد و دیتاهای قبل رو overwrite میکنه. این از دریافت اصولی حالا هر کار می خواین با اضافه کردن کد مربوط انجام بدیناگه درست فهمیده باشم
    همممممم...
    ممنون
    . اما عملیات من روی هر 4 بایت همزمان انجام میشه ها....
    یعنی بازم به حلقه برای گرفتن کامل داده و سپس انجام عملیات نیازی نیست؟؟؟؟ میخام بگم که هر بار که یه بایت گرفت و اینتراپت داد تمامی دستورات روتین وقفه رو انجام میده درحالی که هنوز داده های من همون 4 بایت کامل نشده.
    رو به خودت نسبت هستی مده!**دل به چنین مستی و پستی مده! //زانچه نداری ز چه افسردهآ*ای*و زغم و اندوه دل آزردهآ*ای؟!//گر ببرد ور بدهد دست دوست*ور بِبَرد ور بنهد مُلک اوست//ور بِکِشی یا بکُشی دیو غم **کج نشود دست قضا را قلم//آنچه خدا خواست همان میآ*شود**وآنچه دلت خواست نه آن میآ*شود.
    ....
  10. #10
    2013/08/28
    539
    13

    پاسخ : ارتباط سریال در pic

    منطقا نه، لازم نیست، ببینید اصولا میگن روتین سرویس به وقفه باید حدالامکان ساده باشه، در حد چک و ریست کردن فلگ های مبوطه و خوندن دیتا، سریع بره تو بیاد بیرون، پردازش سنگین و بالا باید در حلقه اصلی برنامه انجام بشه، شما میتونید تو while برنامتون که همش داره اجرا میشه، bufIndex رو چک کنید و هر وقت بزرگتر از 4 شد عملیات رو روی 4 کاراکتر اول buf انجام بدین و bufIndex رو 4 تا کم کمین و 4 کاراکتر اول buf رو خالی کنین، این طوری بافر هر قدر هم پر بشه به نوبت پردازش و خالی میشه،
    Nice and clean
    The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.
صفحه 1 از 3 123 آخرین
نمایش نتایج: از 1 به 10 از 24

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

  1. پاسخ: 4
    آخرين نوشته: 2015/07/10, 19:08
  2. ارتباط سریال
    توسط 872622101 در انجمن NXP
    پاسخ: 1
    آخرين نوشته: 2013/09/19, 13:41
  3. ارتباط سریال
    توسط jfkfsa در انجمن Labview
    پاسخ: 8
    آخرين نوشته: 2012/02/25, 12:19
  4. ارتباط سریال
    توسط 0098 در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2011/07/12, 20:40
  5. ارتباط سریال
    توسط mahoor86 در انجمن میکروکنترلرهای AVR
    پاسخ: 12
    آخرين نوشته: 2011/05/27, 14:28

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

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

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