اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام
    من می خوام بین دوتا میکرو ارتباط سریال با استفاده از وقفه اینجاد کنم. یعنی نمونه برنامه زیر رو با استفاده از وقفه باز نویسی کنم.
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    Dim Sd(7) As Byte
    Sd(1) = 20
    Sd(2) = 158
    Sd(3) = 190
    Sd(4) = 142
    Sd(5) = 123
    Sd(6) = 176
    Sd(7) = 68
    Do
    Printbin Sd(1) , 7
    Loop
    End


    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    Dim Ad(7) As Byte
    Dim Z As Byte
    Do
    Inputbin Ad(1) , 7
    Cls
    Lcd Ad(1)
    Loop
    End

    با یه ترفندهایی تونستم داده ها رو به ترتیب دریافت کنم و در متغیرهای خودشون قرار بدم ولی سرعت برنامه پایین اومد می خوام با استفاده از وقفه این کار رو انجام بدم. با استفاده از وقفه Urxc نتونستم داده ها رو با inputbin دریافت کنم. با خوندن مقادیر Udr هم من نتونستم نتیجه خوبی بگیرم (فکر کنم برنامم ایراد داشت).
    لطفا کمک کنین و برنامه دریافت با استفاده از وقفه رو در اینجا قرار بدین.

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

    سلام
    شما دقیقا همین کاری رو که گفتی باید انجام بدی. فقط فراموش نکن که وقفه کلی سیستم رو بعلاوه وقفه Urxc فعال کنی. بعد برچسب پرش رو برای کامپایلر مشخص کن و تمام. حالا تو زیربرنامه وقفه اولین کاری که می کنی مقدار رجیستر UDR رو باید بخونی و بریزیش تو یک متغیر از نوع بایت. و حالا از اون بایت هر استفاده ای که می خوای بکن. تنها روش که بدرستی جواب می ده.
    موفق باشی

    دیدگاه


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

      نوشته اصلی توسط _e_
      سلام
      شما دقیقا همین کاری رو که گفتی باید انجام بدی. فقط فراموش نکن که وقفه کلی سیستم رو بعلاوه وقفه Urxc فعال کنی. بعد برچسب پرش رو برای کامپایلر مشخص کن و تمام. حالا تو زیربرنامه وقفه اولین کاری که می کنی مقدار رجیستر UDR رو باید بخونی و بریزیش تو یک متغیر از نوع بایت. و حالا از اون بایت هر استفاده ای که می خوای بکن. تنها روش که بدرستی جواب می ده.
      موفق باشی
      همون طور که گفتم با وقفه Urxc هم تست کردم ولی نتونستم ازش جواب بگیرم. یعنی مقادیر متغیرها مدام با هم عوض می شه. این مشکل رو با Inputbin هم داشتم ولی با چند خط دستور اضافه مشکل حل شد ولی سرعت اجرا پایین اومد و اینکه تعداد زیادی از بسته های دریافتی هم از بین می رفت. این نمونه برنامه در شبیه ساز درست کار می کنه ولی وقتی در روی برد تست می کنم دائما مقادیر متغیرها با هم عوض می شه.
      $regfile = "m8def.dat"
      $crystal = 8000000
      $baud = 9600
      Dim Ad(7) As Byte
      Dim Z As Byte
      Z=1
      Enable Interrupts
      Enable Urxc
      On Urxc Cv
      Do
      Cls
      Lcd Ad(1)
      Loop
      End
      Cv:
      Ad(z) = Udr
      Incr Z
      If Z = 8 Then Z = 1
      Return

      با توجه به برنامه بالا شما فکر می کنید اشکال از کجاست که مقادیر متغیرها با هم دیگه عوض می شه؟ مهم نیست که اولین متغیر گیرنده کدوم متغیر فرستنده رو میگیره مهم اینه که در طول اجرای برنامه مقادیر مربوط به خودشون رو دریافت کنن.
      اگه برنامه بهتری واسه این کار به نظرتون می رسه لطفا اینجا قرار بدین.

      دیدگاه


        #4
        پاسخ : ارتباط سریال با بسکام

        مقدار اولیه Z رو یک تعریف کن.

        دیدگاه


          #5
          پاسخ : ارتباط سریال با بسکام

          نوشته اصلی توسط حامد جعفری
          مقدار اولیه Z رو یک تعریف کن.
          در برنامه مقدار یک رو قرار دادم ولی چون واسه اینجا خلاصه کردم اشتباهی پاک کردم.
          ممنون

          دیدگاه


            #6
            پاسخ : ارتباط سریال با بسکام

            سلام
            روال فرستنده همونی که بالا گذاشتی؟ اگر اون روهم تغییر دادی بذارش اینجا. چیزهایی رو هم که رو LCD میبینی ببیشتر شرح بده. همیشه تغییر می کنه یا اصلا ثابت می شه حتی برای مدت کوتاه؟ هدفت رو هم بگو که می خوای برای چی این کار رو بکنی. متشکرم :smile:

            دیدگاه


              #7
              پاسخ : ارتباط سریال با بسکام

              نوشته اصلی توسط _e_
              سلام
              روال فرستنده همونی که بالا گذاشتی؟ اگر اون روهم تغییر دادی بذارش اینجا. چیزهایی رو هم که رو LCD میبینی ببیشتر شرح بده. همیشه تغییر می کنه یا اصلا ثابت می شه حتی برای مدت کوتاه؟ هدفت رو هم بگو که می خوای برای چی این کار رو بکنی. متشکرم :smile:
              دقیقا همون برنامه های بالا(به همراه Z=1) رو هم در شبیه ساز و هم روی برد تست کردم. در شبیه ساز همه چیز درسته ولی در عمل مقادیری رو که فرستنده ارسال می کنه هر بار در یک متغیر گیرنده قرار می گیره ، یعنی در LCD من تمام متغیرهای ارسال شده از فرستنده رو می بینم در حالی که من فقط یکی از متغیرها رو خواستم نشون بده ، یعنی هرچی که برای بار اول در متغیر قرار می گیره باید تا آخر همون متغیر باشه ولی این طوری نیست و متغیرهای دریافتی به صورت شیفت همشون در متغیر (1)ad قرار می گیرن.

              دیدگاه


                #8
                پاسخ : ارتباط سریال با بسکام

                دقیقا هفت عدد رو LCD می بینی؟ امکان داره یه نویز تو سیستم واره شده باشه. در واقع تو 8 تا دیتا دریافت می کنی و به همین دلیل هر بار شیفت پیدا می کنه.

                دیدگاه


                  #9
                  پاسخ : ارتباط سریال با بسکام

                  نوشته اصلی توسط حامد جعفری
                  دقیقا هفت عدد رو LCD می بینی؟ امکان داره یه نویز تو سیستم واره شده باشه. در واقع تو 8 تا دیتا دریافت می کنی و به همین دلیل هر بار شیفت پیدا می کنه.
                  آره من فقط عددهای ارسالی از فرستنده رو می بینم. فکر نمی کنم مشکل نویز باشه طول سیم حدود 8 سانتی متر هست ، منبع هم از باطری استفاده می کنم( با آی سی رگولاتور)

                  دیدگاه

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