اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام بچه های عزیز یه مشکل کوچیک دارم ممنون میشم راهنماییم کنید

    من یک اتمگا 8 رو با پورت سریال به کامپیوترم وصل کردم .

    الان میخوام یک رشته بفرستم و همون رشته رو دریافت کنم (البته اینو مثال می زنم ولی این درست بشه مشکل منم حل میشه)

    من بعداز این که مگا 8 رو به کامپیوتر وصل کردم و ترمینال رو اجرا کردم برنامه زیر رو روی میکرو ریختم
    کد:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    Enable Interrupts
    Dim A As String * 7
    Enable Urxc
    Enable Utxc
    On Urxc Rx_interrupt
    On Utxc Tx_interrupt
    Do
    
    Loop
    End                             'end program
    
    Rx_interrupt:
    A = Inkey()
    Print A
    
    Return
    وقتی یک رشته با طول 3 رو میفرستم مثلا :
    کد:
    mmm
    رشته رو به شکل زیر دریافت می کنم
    کد:
    m
    m
    m
    دلیلش اینه که دستور inkey یکی یکی کارکتر هارو دریافت می کنه

    دستوری هست بجای اinky که کارکتر (کد اسکی) رو بصورت یک جا دریافت کنه ؟

    یا راهی هست که وقتی این کارکتر ها رو به شکل :
    m
    m
    m
    دریافت کردیم دوباره به شکل mmm کنار هم بچینیم ؟

    ممنون میشم راهنماییم کنید

    تشکر فراوان

    #2
    پاسخ : بهم چسباندن چند کارکتر و ساختن رشته در بسکام

    از این برنامه استفاده کنید:

    کد:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    '--------------------------------------------------- SERIAL Interrupte ---------
    On Urxc Rcv
    Enable Urxc                         'interrupte makhsose serial
    Enable Interrupts                      'faal sazi interrupt
    '-------------------------------------------------------------------------------
    Dim Buffer As String * 200
    Dim B As Byte
    
    Do
    Loop
    
    
    Rcv:
      B = Udr
      If B > &H10 And B < &H7F Then
       Buffer = Buffer + Chr(b)
      End If
      Print Buffer
    Return

    دیدگاه


      #3
      پاسخ : بهم چسباندن چند کارکتر و ساختن رشته در بسکام

      نوشته اصلی توسط Homayon
      از این برنامه استفاده کنید:

      کد:
      $regfile = "m8def.dat"
      $crystal = 8000000
      $baud = 9600
      '--------------------------------------------------- SERIAL Interrupte ---------
      On Urxc Rcv
      Enable Urxc                         'interrupte makhsose serial
      Enable Interrupts                      'faal sazi interrupt
      '-------------------------------------------------------------------------------
      Dim Buffer As String * 200
      Dim B As Byte
      
      Do
      Loop
      
      
      Rcv:
        B = Udr
        If B > &H10 And B < &H7F Then
         Buffer = Buffer + Chr(b)
        End If
        Print Buffer
      Return
      ممنونم ازتون

      وقتی MMM رو ارسال کنم ترمینال عبارت زیر رو باز می گردونه

      222¦««««µ55
      2&&¦«µµµµ5M
      2222mmm[[[SSSHH’’2mmmmmmMSSCل

      یعنی درست کار نمی کنه

      دیدگاه


        #4
        پاسخ : بهم چسباندن چند کارکتر و ساختن رشته در بسکام

        دوست عزیز کلا بعد از این همه مدت چیزه زیادی از برنامه نویسی حالیم نیست
        اینو تازه کشف کردم اعصابمم خورده

        اما 2 راه برات دارم که امتحان کن ببین از کدوم جواب میگیری

        راه اول
        استفاده از دستور input به جای inkey
        اگر درست فهمیده باشم از هلپ بسکام دستور inkey کاراکتر دریافت میکنه ولی دستور input رشته رو میخونه
        زمانی که از input استفاده می کنی برنامه صبر میکنه تا دریافت تکمیل بشه و بعد ادامه برنامه اجرا میشه پس فکر کنم بتونی از وقفه سریال صرف نظر کنی
        کد:
        $regfile="m8def.dat"
        $crystal=4000000
        $baud = 9600
        Dim Code as string*3
        hom:
        input code
        goto hom
        end
        این جا برنامه تا به input میرسه متوقف میشه تا دریافتی انجام بشه
        این راه اول بود
        اما راه حل دوم با استفاده از همون دستور inkey خودت
        کافیه ابتدای برنامه یک متغیر استرینگ تعریف کنی و یک دستور هم بعد از دستور inkey بنویسید
        نمونه کد خودت رو تغییر میدم ببین جواب میده یا نه
        کد:
        $regfile = "m8def.dat"
        $crystal = 8000000
        $baud = 9600
        Enable Interrupts
        Dim B As Byte
        Dim A As String * 7
        Enable Urxc
        Enable Utxc
        On Urxc Rx_interrupt
        On Utxc Tx_interrupt
        Do
        
        Loop
        End                             'end program
        
        Rx_interrupt:
        B = Inkey()
        A=A+Str(B)
        Print A
        
        Return
        اینجوری با دریافت هر کارکتر در موقعیت بعدی از رشته A ذخیره میشه

        تست کن خبری بده

        دیدگاه


          #5
          پاسخ : بهم چسباندن چند کارکتر و ساختن رشته در بسکام

          این برنامه ای که من گذاشتم 100 درصد درست کار میکنه حتما مشکل از سخت افزار شما هست
          میکرو رو با چی به کامپیوتر وصل کردی؟
          سیم RX , TX رو از میکرو جدا کن و به هم وصلشون کن اون وقت هر چی توی ترمینال تایپ میکنی باید ببینی
          قیوز بیت ها رو درست تنظیم کردی؟

          دیدگاه


            #6
            پاسخ : بهم چسباندن چند کارکتر و ساختن رشته در بسکام

            نوشته اصلی توسط عزیز خورشیدزاده
            دوست عزیز کلا بعد از این همه مدت چیزه زیادی از برنامه نویسی حالیم نیست
            اینو تازه کشف کردم اعصابمم خورده

            اما 2 راه برات دارم که امتحان کن ببین از کدوم جواب میگیری

            راه اول
            استفاده از دستور input به جای inkey
            اگر درست فهمیده باشم از هلپ بسکام دستور inkey کاراکتر دریافت میکنه ولی دستور input رشته رو میخونه
            زمانی که از input استفاده می کنی برنامه صبر میکنه تا دریافت تکمیل بشه و بعد ادامه برنامه اجرا میشه پس فکر کنم بتونی از وقفه سریال صرف نظر کنی
            کد:
            $regfile="m8def.dat"
            $crystal=4000000
            $baud = 9600
            Dim Code as string*3
            hom:
            input code
            goto hom
            end
            این جا برنامه تا به input میرسه متوقف میشه تا دریافتی انجام بشه
            این راه اول بود
            اما راه حل دوم با استفاده از همون دستور inkey خودت
            کافیه ابتدای برنامه یک متغیر استرینگ تعریف کنی و یک دستور هم بعد از دستور inkey بنویسید
            نمونه کد خودت رو تغییر میدم ببین جواب میده یا نه
            کد:
            $regfile = "m8def.dat"
            $crystal = 8000000
            $baud = 9600
            Enable Interrupts
            Dim B As Byte
            Dim A As String * 7
            Enable Urxc
            Enable Utxc
            On Urxc Rx_interrupt
            On Utxc Tx_interrupt
            Do
            
            Loop
            End                             'end program
            
            Rx_interrupt:
            B = Inkey()
            A=A+Str(B)
            Print A
            
            Return
            اینجوری با دریافت هر کارکتر در موقعیت بعدی از رشته A ذخیره میشه

            تست کن خبری بده
            ممنونم از پاسخ گوییتون ، من تو بسکام و دستورات سریال خیلی گشتم هیچ کدوم کد اسکی رو دریافت نمی کنند جز inkey که اونم یکی یکی بر می گرده

            برنامه اولی رو قبل هم تست کرده بودم بنامه دومی هم کار نکرد
            وقتی
            mmm رو فرستادم عبات زیر رو برگردوند

            109
            109109
            109109109
            10910910910
            …

            دیدگاه


              #7
              پاسخ : بهم چسباندن چند کارکتر و ساختن رشته در بسکام

              نوشته اصلی توسط Homayon
              این برنامه ای که من گذاشتم 100 درصد درست کار میکنه حتما مشکل از سخت افزار شما هست
              میکرو رو با چی به کامپیوتر وصل کردی؟
              سیم RX , TX رو از میکرو جدا کن و به هم وصلشون کن اون وقت هر چی توی ترمینال تایپ میکنی باید ببینی
              قیوز بیت ها رو درست تنظیم کردی؟

              من از لبتاب و مبدل usb to ttl استفاده می کنم سخت افزارم مشکل نداره چون وقتی برنامه زیر رو می نویسم درست عمل می کنه
              do
              a = inkey()
              printa
              loop
              اگه یه کارکتر بفرستم همون کارکتر رو بر میگردونه

              برنامه شما ساختارش درست ولی نمیدونم چرا جواب نمیده من اینجای برنامه رو نفهمیدم میشه برام توضیح بدید
              کد:
               B = Udr
                If B > &H10 And B < &H7F Then
                 Buffer = Buffer + Chr(b)
              Udr این دستور چیه ؟ تو هلپم نگاه کردم چیزی ننوشته بود

              If B > &H10 And B < &H7F Then
              اینم اصلا نفهمیدم ، اگه میشه برام توضیح بدید و با یه حالت غیر از هگز بنویسید

              دیدگاه


                #8
                پاسخ : بهم چسباندن چند کارکتر و ساختن رشته در بسکام

                نوشته اصلی توسط Homayon
                این برنامه ای که من گذاشتم 100 درصد درست کار میکنه حتما مشکل از سخت افزار شما هست
                میکرو رو با چی به کامپیوتر وصل کردی؟
                سیم RX , TX رو از میکرو جدا کن و به هم وصلشون کن اون وقت هر چی توی ترمینال تایپ میکنی باید ببینی
                قیوز بیت ها رو درست تنظیم کردی؟
                داداش مجددا تست کردم این دفه بهتر بود مثلا abc رو ارسال کردم کارکتر های زیر رو برگردوند

                mmma
                mmmab
                mmmabc
                mmmabc

                درست کار می کنه ولی اطلاعات اضافه چیه ؟

                میشه این قسمتو برام توضیح بدی
                کد:
                 B = Udr
                  If B > &H10 And B < &H7F Then
                   Buffer = Buffer + Chr(b)
                  End If
                  Print Buffer

                دیدگاه


                  #9
                  پاسخ : بهم چسباندن چند کارکتر و ساختن رشته در بسکام

                  اول از همه UDR بافر سریال هست . اسم یک رجیستر در میکرونترلر هست نه دستور. خودت بهتر میدونی که هر کارکتر اسکی تشکیل شده از 8 بیت هست و این بیت ها در هنگام دریافت در رجیستر UDR قرار می گیرند
                  و اما این شرط If B > &H10 And B < &H7F Then یک جور فیلتر برای کارکترهایی مثل enter و.. هست. برای اینکه دقیق تر متوجه بشی یک نگاه به جدول کارکترهای اسکی بنداز

                  دیدگاه

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