اطلاعیه

Collapse
No announcement yet.

ارتباط سریال دو میکرو

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ارتباط سریال دو میکرو

    سلام خدمت دوستان عزیز خسته نباشید من می خوام دو تا میکرو را از طریق پورت سریال(آسنکرون) وصل کنم سپس اطلاعات را از طریق یک میکرو به میکرو دومی بفرستم سپس رو lcd که به میکرو دوم متصله اطلاعات را نمایش بدم..می تونید کمکم کنید که باید چیکار کنم؟

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

    سلام .
    شما با چه کامپایلری می خواید کار کنید .
    هر کامپایلری یه سری دستورات واسه فرستادن اطلاعات از طریق rs232 داره و همچنین یه سری دستورات هم واسه دریافت اطلاعات از این طریق.
    البته بعضی از کامپایلر ها ، هم دستورات نرم افزاری دارند و هم سخت افزاری .
    "سخت افزاری" به این معنی که میکرو با استفاده از سخت افزاری به نام uart یا usart این کار (ارسال و دریافت اطلاعات) رو انجام میده . که مزیت این کار اینه که در زمان ارسال یا دریافت اطلاعات ، cpu میکرو درگیر این کار نمیشه و میتونه به کار های دیگه برسه .
    "نرم افزاری" به این معنی که کامپایلر کدی تولید میکنه که میکرو بدون استفاده از سخت افزار های مذکور ، کار ارسال یا دریافت اطلاعات رو انجام میده . بزرگترین مشکل این روش اینه که در طول مدت تبادل اطلاعات ، cpu میکرو مشغول میشه و هیچ گونه دستور دیگری را نمیتونه اجرا کنه .

    در میکرو فرستنده شما فقط کافیه که یه دستور ساده بنویسید تا اطلاعاتی فرستاده بشه . حالا این اطلاعات میتونه محتویات یه متغیر ، یک حرف، یک عدد یا یک رشته باشه .
    در میکرو گیرنده هم فقط باید به این نکته توجه کنید که از دستوری استفاده کنید که تا دریافت اطلاعات صبر میکنه . سپس اطلاعات رو میگیرید و در یه متغیر با نوع (type) مناسب قرار میدید .
    از یه روشه دیگه هم تو گیرنده میتونید استفاده کنید و اون هم اینه که شما با وقفه ها کار کنید .
    به این صورت که سرویس وقفه دریافت اطلاعات رو فعال میکنید . در بدنه اصلی برنامتون ، میتونید به بقیه کارهاتون برسید . مثلا نمایش نوشته هایی بر روی LCD یا ... .
    وقتی اطلاعاتی از فرستنده ارسال بشه و توسط گیرنده به درستی دریافت بشه ، زیر برنامه وقفه در گیرنده اجرا میشود .
    و در این زیر برنامه شما باید اطلاعات موجود در بافر ورودی رو بخونید و در یک متغیر مناسب ذخیره کنید . به همین سادگی .
    چند تا نکته :
    1- حتما باید در هردو میکرو از Bauderate برابر استفاده کنید .
    2- اگر در یک محیط پر نویز این کا رو میخواید انجام بدید ، بهتره که از Bauderate های پایین استفاده کنیید .
    3- حتما باید در هردو میکرو از تنظیمات برابر استفاده کنید . مثلا در هردو میکرو باید به صورت روبرو اقدام کنید 8bits,no parity,1stop bit
    4- بهتره که در هردو میکرو از کریستال برابر استفاده کنید .
    5- اگر میخواید به صورت سخت افزاری این کار رو انجام بدید ، باید دقت داشته باشید که هر میکرویی دارای پایه های خاصی برای این کار است . به عنوان مثال ، در بیشتر PIC ها ، RC6 (بیت ششم از پورت c) پایه ی فرستنده و RC7 گیرنده است .


    ** موفق باشید **

    دیدگاه


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

      این نمونه برنامه کار میکنه و با بیسیک نوشته شده :
      مدار 8 کلید متصل به پورت سی 16اف876 را کنترل میکند.در صورت فشرده شدن آن را روشن نگه میدارد(ال ای دی ) و سپس اطلاعات را به صورت سریال به میکرو 877 ارسال میکند.میکرو 877 اطلاعات را دریافت کرده و کاری که از آن خواسته می شود را اجرا میکند.......................
      '******************************************** ********************
      '* Name : UNTITLED.BAS *
      '* Author : [select VIEW...EDITOR OPTIONS] *
      '* Notice : Copyright (c) 2009 [select VIEW...EDITOR OPTIONS] *
      '* : All Rights Reserved *
      '* Date : 2009/12/19 *
      '* Version : 1.0 *
      '* Notes : *
      '* : *
      '******************************************** ********************

      INCLUDE "modedefs.bas"
      DEFINE CHAR_PACING 1000
      ; trisa=%00000010
      trisc=%11111111


      adcon1=7
      x var byte
      x1 var byte


      symbol key1=portc.7
      symbol key2=portc.6
      symbol key3=portc.5
      symbol key4=portc.4
      symbol key5=portc.3
      symbol key6=portc.2
      symbol key7=portc.1
      symbol key8=portc.0



      main:

      serial_in:

      serin porta.1,n9600,100,serialout,x
      lookdown x,[$06,$5b,$4f,$66,$6d,$7d,$07,$7f],x1


      if x==$06 then key1=0
      if x==$5b then key2=0
      if x==$4f then key3=0
      if x==$66 then key4=0
      if x==$6d then key5=0
      if x==$7d then key6=0
      if x==$07 then key7=0
      if x==$7f then key8=0 ;az in qesmat shasti cancel mishavad



      serialout:


      if key1=1 then
      serout porta.0,n9600,[$06] ;az in qesmat etelaat ferestadeh mishavad
      high key1
      if x==$06 then key1=0 ;az in qesmat shasti cancel mishavad
      endif


      if key2=1 then
      serout porta.0,n9600,[$5b]
      high key2
      if x==$5b then key2=0 ;az in qesmat shasti cancel mishavad
      endif


      if key3=1 then
      serout porta.0,n9600,[$4f]
      high key3
      if x==$4f then key3=0 ;az in qesmat shasti cancel mishavad
      endif


      if key4=1 then
      serout porta.0,n9600,[$66]
      high key4
      if x==$66 then key4=0 ;az in qesmat shasti cancel mishavad
      endif


      if key5=1 then
      serout porta.0,n9600,[$6d]
      high key5
      if x==$6d then key5=0 ;az in qesmat shasti cancel mishavad
      endif


      if key6=1 then
      serout porta.0,n9600,[$7d]
      high key6
      if x==$7d then key6=0 ;az in qesmat shasti cancel mishavad
      endif


      if key7=1 then
      serout porta.0,n9600,[$07]
      high key7
      if x==$07 then key7=0 ;az in qesmat shasti cancel mishavad
      endif


      if key8=1 then
      serout porta.0,n9600,[$7f]
      high key8
      if x==$7f then key8=0 ;az in qesmat shasti cancel mishavad
      endif





      goto main
      end
      *******************************

      serial_in: ;shasti gereftan

      serin portb.2,n9600,100,tashkhistabaqe,x
      lookup x,[$06,$5b,$4f,$66,$6d,$7d,$07,$7f],x1
      if x==$06 then key0=1
      if x==$5b then key1=1
      if x==$4f then key2=1
      if x==$66 then key3=1
      if x==$6d then key4=1

      دیدگاه

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