اطلاعیه

Collapse
No announcement yet.

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

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

    #16
    پاسخ : ارتباط سریال با وقفه در بسکام

    سلام...

    مشکل از این نبود...با گذاشتن این دستور باز هم جواب نمیده!!! :angry:
    فقر ، شب را " بی غذا " سر کردن نیست ................ فقر ، روز را " بی اندیشه" سر کردن است

    دیدگاه


      #17
      پاسخ : ارتباط سریال با وقفه در بسکام

      سلام,

      من برنامه رو در سیمولاتور بسکام شبیه سازی کردم کار میکنه. برنامه ای که من تست کردم:

      $regfile = "m161def.dat"
      $crystal = 8000000
      $sim
      $baud = 9600
      Enable Interrupts
      Enable Urxc
      Dim A As Byte
      Dim B As Byte
      On Urxc Robo
      A = 125
      B = 32
      Dim Computernumber As Byte
      Do
      Loop
      End
      Robo:
      Input , Computernumber
      Select Case Computernumber
      Case 85 : Print A
      Case 95 : Print B
      End Select
      Return

      در عمل هم تست کرد انگاری جواب میداد. اخه نمیدون چی شده همش چرت و پرت نشون میده. ولی وقتی 85 و 95 رو زدم یک چیزی برگردوند.

      دیدگاه


        #18
        پاسخ : ارتباط سریال با وقفه در بسکام

        در قسمت زیر روال وقفه از دستور زیر راستفاده کن
        inputtdata = Udr

        این inputtdata رو قبلش از نوع بایت تعریف بشه

        نکته ش توی وقفه سریلال همینه

        با عرض پوزش
        یکمی برنامه جناب اسدی رو تغییر دادم

        $regfile = "m161def.dat"
        $crystal = 8000000

        $baud = 9600
        Enable Interrupts
        Enable Urxc
        Dim A As Byte
        Dim B As Byte
        On Urxc Robo
        A = 125
        B = 32
        Dim Computernumber As Byte

        Do
        idle
        Loop
        End
        Robo:
        Computernumber = Udr
        Select Case Computernumber
        Case 85 : Print A
        Case 95 : Print B
        End Select
        Return



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

        دیدگاه


          #19
          پاسخ : ارتباط سریال با وقفه در بسکام

          سلام....

          ممنون از پاسختون....فقط این با کریستال داخلی جواب میده یا کریستال خارجی؟

          من از کریستال داخلی استفاده میکنم.
          فقر ، شب را " بی غذا " سر کردن نیست ................ فقر ، روز را " بی اندیشه" سر کردن است

          دیدگاه


            #20
            پاسخ : ارتباط سریال با وقفه در بسکام

            نوشته اصلی توسط Saeed Bagherani
            در قسمت زیر روال وقفه از دستور زیر راستفاده کن
            inputtdata = Udr

            این inputtdata رو قبلش از نوع بایت تعریف بشه

            نکته ش توی وقفه سریلال همینه

            با عرض پوزش
            یکمی برنامه جناب اسدی رو تغییر دادم

            $regfile = "m161def.dat"
            $crystal = 8000000

            $baud = 9600
            Enable Interrupts
            Enable Urxc
            Dim A As Byte
            Dim B As Byte
            On Urxc Robo
            A = 125
            B = 32
            Dim Computernumber As Byte

            Do
            idle
            Loop
            End
            Robo:
            Computernumber = Udr
            Select Case Computernumber
            Case 85 : Print A
            Case 95 : Print B
            End Select
            Return



            سلام

            ممنون از پاسختون....من همین برنامه شما رو استفاده کردم اما خروجی در عمل برای 95 مقدار 51 و برای 85 مقدار 49 بود!!!

            چه باید کرد؟

            ممنون
            فقر ، شب را " بی غذا " سر کردن نیست ................ فقر ، روز را " بی اندیشه" سر کردن است

            دیدگاه


              #21
              پاسخ : ارتباط سریال با وقفه در بسکام

              تنظیمات بائد درست نیست
              باید بری توی option بیسکام و تمامی مشخصات ارسال اطلاعات رو دقیقا مشابه اونی که توی کامپیتور vb تنظیم کردی تطبیق بدی
              اگه فرکانس کریستال رو از 1 مگ استفاده کنی در صد خطا میره بالا
              بهترین حالت استفاده از کریستال خارجی 11.592000 مگا هرتزه

              بازم تاکید می کنم تنظیماتی مثل بیت توازن استپ بیت و ..... باید حتما مشابه باشن


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

              دیدگاه


                #22
                پاسخ : ارتباط سریال با وقفه در بسکام

                نوشته اصلی توسط Saeed Bagherani
                تنظیمات بائد درست نیست
                باید بری توی option بیسکام و تمامی مشخصات ارسال اطلاعات رو دقیقا مشابه اونی که توی کامپیتور vb تنظیم کردی تطبیق بدی
                اگه فرکانس کریستال رو از 1 مگ استفاده کنی در صد خطا میره بالا
                بهترین حالت استفاده از کریستال خارجی 11.592000 مگا هرتزه

                بازم تاکید می کنم تنظیماتی مثل بیت توازن استپ بیت و ..... باید حتما مشابه باشن


                ممنون....فقط این بیت توازن و استپ بیت رو چطور میشه تو بسکام تنظیم کرد؟
                فقر ، شب را " بی غذا " سر کردن نیست ................ فقر ، روز را " بی اندیشه" سر کردن است

                دیدگاه


                  #23
                  پاسخ : ارتباط سریال با وقفه در بسکام

                  سلام بر اساتید
                  من با برنامه بالا جواب گرفتم فقط مشکلی که هست ، میخوام بتونم داده string دریافت کنم ولی با udr نمیشه string گرفت
                  کمک پلیز


                  بدون udr و. با input مشکل هم نمیشه و برنامه نمیره تو حلقه do loop
                  http://www.eca.ir/forum2/index.php/topic,10159.0.html

                  دیدگاه


                    #24
                    پاسخ : ارتباط سریال با وقفه در بسکام

                    نوشته اصلی توسط heil
                    سلام بر اساتید
                    من با برنامه بالا جواب گرفتم فقط مشکلی که هست ، میخوام بتونم داده string دریافت کنم ولی با udr نمیشه string گرفت
                    کمک پلیز


                    بدون udr و. با input مشکل هم نمیشه و برنامه نمیره تو حلقه do loop
                    من بسکام کار نکردم اما مشکل های شما رو با کدویژن داشتم
                    ببینید شما توی قسمت وقفه ، با udr اطلاعات یک کاراکتر رو میگیرین خب حالا همین udr رو به یک رشته نسبت بدین مثلا یه رشته به نام string تعریف کنید و هر باز وارد وقفه می شید خانه i ام از استرینگ رو برابر udr قرار بدید و i رو یکی اضافه کنید تا در وقفه بعد به خانه بعدی بره
                    اگه دارید عدد از کامپیوتر دریافت می کنید حواستون باشه که این عدد داره بصورت کد اسکی میاد و باید با تابع تبدیل اسکی به اینتجر اون رو تبدیل به عدد کنید (تو کدویژن از تابع atoi استفاده می کنند )
                    Don't hesitate to ask any question ..

                    دیدگاه


                      #25
                      پاسخ : ارتباط سریال با وقفه در بسکام

                      سلام به همه دوستان .
                      من با بسکام کار میکنم و درباره کار با سریال و وقفه به مشکل خوردم موضوع از این قرار هست که من از وقفه دریافت و ارسال استفاده میکنم یعنی بعد از هر ارسال منتظر میمانم تا وقفه اتمام ارسال فعال بشه همون بیت
                      usr.txc بعد ادامه برنامه رو دنبال میکنم اما زمانی که از از داخل برچسب سر ریز شدن تایمر اقدام به ارسال اطلاعات در سریال میکنم دیگه وقفه اتمام ارسال فعال نمیشه نمی دونم چرا زمانی که من داخل برچسب تایمر هستم این مشکل پیش میاد . دوستان کمک کنین خیلی کارم گیر هست .
                      پیشاپیش از کمک و همکاریتون تشکر و قدردانی میکنم :applause: :applause: :applause: :applause:

                      دیدگاه


                        #26
                        پاسخ : ارتباط سریال با وقفه در بسکام

                        سلام
                        ممنون .
                        ارتباطم میکرو به میکرو است .
                        نمی دونم میشه مستقیم با وقفه سریال بتونم داده string بفرستم و در طرف دیگه بگیرم ؟
                        با
                        میخوام اسم یه نفر رو اراین میکرو بفرستم تو اون میکرو و اون میکرو بپره تو زیر برنامه وقفه ام و اسم رو بگیره و رو ال سی دی نشونش بده و بعد برگرده تو برنامه و کارای خودشو انجام بده
                        یه مشکلی که دارم اینه که بعد از اینکه دیتا گرفته میشه ، وقفه فعال میشه و دیتا گرفته میشه . بعدش برنامه به داخل حلقه do loop بر نمیگرده
                        یه نمونه برنامه نوشتم . بعد از اینکه دیتا گرفته میشه ، برنامه به زیر برنامه پرش میکنه و دیتا رو از پورت سریال میخونه ولی بر نمیگرده تو do loop ?!!!
                        برنامه فرستندم اینه :

                        کد:
                        $regfile = "m16def.dat"
                        $crystal = 8000000
                        $baud = 9600
                        
                        Config Debounce = 30
                        Config Lcdpin = Pin , Db4 = Pina.4 , Db5 = Pina.5 , Db6 = Pina.6 , Db7 = Pina.7 , Rs = Pina.1 , E = Pina.0
                        Config Lcd = 16 * 2
                        Cursor Off
                        Home H
                        Lcd "  Micro 1"
                        Waitms 400
                        Cls
                        Config Portb = Input
                        Portb = 255
                        
                        Dim A As String * 10
                        
                        A = "salam"
                        Do
                        
                        Debounce Pinb.0 , 0 , Databar , Sub
                        Loop
                        
                        Databar:
                        Print A
                        
                        A = "alireza"
                        Return
                        این هم برنامه میکرو گیرندمه :
                        کد:
                        [left]
                        
                        $regfile = "m16def.dat"
                        $crystal = 8000000
                        $baud = 9600
                        
                        
                        Config Lcdpin = Pin , Db4 = Pina.4 , Db5 = Pina.5 , Db6 = Pina.6 , Db7 = Pina.7 , Rs = Pina.1 , E = Pina.0
                        Config Lcd = 16 * 2
                        Cursor Off
                        
                        Cls
                        Home H
                        Lcd "  Micro 2"
                        
                        Waitms 400
                        Cls
                        
                        Enable Interrupts
                        Enable Urxc
                        
                        On Urxc Data_received
                        
                        Dim P As String * 10 , I As Byte
                        
                        I = 0
                        
                        Main:
                        
                        Do
                        
                        Locate 1 , 1
                        Lcd I
                        Incr I
                        Waitms 400
                        
                        Loop
                        
                        Data_received:
                        Input P
                        Cls
                        Locate 2 , 1
                        Lcd P
                        
                        Return[/left]
                        http://www.eca.ir/forum2/index.php/topic,10159.0.html

                        دیدگاه


                          #27
                          پاسخ : ارتباط سریال با وقفه در بسکام

                          اصلا میشه داده string رو مستقیم از طریق سریالبفرستم و اونور بگیرم ؟

                          دوستان برای ارسال اسم از طریق سریال پیشنهادی ندارن ؟ :sad: :cry: :cry2:
                          ممنون میشم اگه کمک کنین و ایرادات برناممو بگین

                          اصولا باید از وقفه با return برگرده تو do loop . ولی بر نمیگرده ؟!!!
                          دوستان لطف کنن و برناممو تست کنن . شایدم پروتئوسم قاط زده باشه :angry:
                          http://www.eca.ir/forum2/index.php/topic,10159.0.html

                          دیدگاه


                            #28
                            پاسخ : ارتباط سریال با وقفه در بسکام

                            سلام
                            برنامه رسیوم تو بسکام با ترمینال امولاتور خود بسکام تست کردم و درسته و خیلی خوب داده string رو میگیره و دوباره میپره به ادامه برنامم (تو do loop)
                            ولی تو پروتئوس وقتی داده رو از یه میکروی دیگه براش می فرستم ، داده رو میگیره ولی به برنامه بر نمیگرده !
                            کلافم کرده . فکرم دیگه کار نمی کنه . از خستگی دارم می میرم . از دیروز دارم مرتب تست می کنم و تست می کنم .

                            همه دوستان با UDR کار میکنن ولی با UDR نمیشه داده string گرفت و تا اونجایی که من تست کردم فقط عدد می گیره ( که اونو هم هر کاری کردم عدد رو نگرفت ، عدد 36 ارسال کردم ولی UDR عدد رو 10 میگیره !!
                            معلوم نیست که اصلا داده رو عددی میگیره یا کاراکتری یا .... ؟!!! )
                            واسه همین هم مجبورم از input استفاده کنم ولی مشکل بالا رو دارم (داده رو میگیره ولی به برنامه بر نمیگرده)

                            این هم برنامه ای که تو بسکام کار میده ولی تو پروتئوس کار نمیده:
                            کمک پلیز


                            کد:
                            $regfile = "m16def.dat"
                            $crystal = 8000000
                            $baud = 9600
                            
                            
                            Config Lcdpin = Pin , Db4 = Pina.4 , Db5 = Pina.5 , Db6 = Pina.6 , Db7 = Pina.7 , Rs = Pina.1 , E = Pina.0
                            Config Lcd = 16 * 2
                            Cursor Off
                            
                            Enable Interrupts
                            Enable Urxc
                            
                            On Urxc Data_received
                            
                            Dim P As String * 15 , I As Byte , B As Byte
                            
                            I = 1
                            Cls
                            Home H
                            Lcd "  Micro 2"
                            
                            Waitms 400
                            Cls
                            
                            Do
                            
                            Locate 1 , 1
                            Lcd I
                            Incr I
                            Waitms 400
                            
                            Loop
                            
                            Data_received:
                            Input P
                            Cls
                            Locate 2 , 1
                            Lcd P
                            P = ""
                            Return
                            http://www.eca.ir/forum2/index.php/topic,10159.0.html

                            دیدگاه


                              #29
                              پاسخ : ارتباط سریال با وقفه در بسکام

                              ممنون از جواب ندادنتون.

                              به ناچار با inkey حروف اسمم رو تک تک فرستادم اونور و گرفتم و چسبوندم به هم
                              ولی دوست داشتم یه جا ارسالش می کردم.

                              (heil.hell@yahoo.com)
                              http://www.eca.ir/forum2/index.php/topic,10159.0.html

                              دیدگاه


                                #30
                                پاسخ : ارتباط سریال با وقفه در بسکام

                                سلام عزیز خسته نباشی :
                                ببین عزیز وقتی میخوای از وقفه استفاده کنی یکی از بهترین حالتهاش اینکه وقتیه وقفه دریافت اتفاق میفته بیت دریافت وقفه رو غیر فعال کنی اینجوری :
                                on urxc input_serial

                                dim b as bit
                                dim daryaft as byte

                                do

                                if b=1 then

                                b=0
                                اینجا میتونی از متغیر dryaft استفاده کنی
                                ucr.rxen=1
                                end if
                                loop

                                input_serial:
                                dryaft=udr
                                b=1
                                ucr.rxen=0
                                return
                                زمانیکه دریافت صورت میگیره بیت usr.rx فعال میشه و تا زمانیکه بافر udr خونده نشه وقفه دریافت اجرا میشه واگه تو وقفه دریافتتون یه شمانده بذارین متوجه میشین که با یه بار ارسال از فرستنده نزدیک به چهار بار یا بیشتر وقفه دریافتتون اجرا میشه و حقیقت امر اینکه در اولین بار udr مقدار واقعی دریافت شده رو داره و در دفعات بعد مقدارش نامعتبر هست واسه همین اگه با اولین دریافت گیرنده سریال رو بعد از اولین بار خوندن غیر فعال کنین از چندین بار اجرا شدن وقفه دریافت جلوگیری میکنین و بعد از اینکه کارتون با udr تموم شد دوباره اون بیت رو یک میکنین تا واسه دریافتهای بعد اماده باشه
                                در مورد اینکه بخواین یه کلمه رو ارسال کنین هم تا اونجا که من میدونم بعد از دستور input باید بگین که منتظر چند حرف هستین مثلا اگه منتظرر ali هستین متغیر رو سه با دامنه سه تعریف میکنین و بعد از input و
                                ali عدد سه رو بذارین تا اون بدونکه باید نمتظر سه حرف بمونه و بعد از دستور input خارج بشه
                                این دستور input رو چک نکردم اما وقفه رو تضمین میکنم اما واست مهم هست بگو تا input رو هم انجام بدم و نتیجه اون رو واست بگم
                                دلتون شاد وقتتون خوش


                                دیدگاه

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