اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام
    دوستان میشه در مورد وقفه ارتباط سریال توضیح بدین؟؟؟
    عایا میشه با وقفه ارتباط سریال چک کرد که آیا ارتباط سریال داریم یا نه و اگر داریم یه کار خاص رو برامون انجام بده ( به عنوان مثال یکی از خروجیاشو یک کنه)
    من تو اینترنت سرچ کردم ولی چیزی بدر بخور گیرم نیومد و کسی زیاد در موردش توضیح نداده بود...
    ممنونم
    *****عيب جامعه اين است که همه مي خواند آدم مهمي باشند ولي هيچ کس نمي خواهد فرد مفيدي باشد.*****
    http://electerodl.ir/forum

    #2
    پاسخ : وقفه ارتباط سریال

    وقفه ارتباط سریال زمانی اتفاق میفته که :
    1- شما داخل تنظیمات ارتباط سریال اونو فعال کرده باشید.
    2- از سمت یک میکروی دیگه یا هر چیزه دیگه برای شما دیتایی ارسال بشه.
    به محض فرستادن اولین بیت از سمت دیگه به میکرو، پایه RXD که سطح ولتاژ منطقی یک داشته میره توی سطح منطقی صفر و دریافت اطلاعات شوع میشه. پس شما می تونی بفهمی که کی دیتا میاد. (یعنی ارتباط سریال در حال دریافت هستش).
    ---------
    .
    .
    ...........

    دیدگاه


      #3
      پاسخ : وقفه ارتباط سریال

      بله میتونید اینکارو بکنید.
      www.gam-co.blogsky.com

      دیدگاه


        #4
        پاسخ : وقفه ارتباط سریال

        نوشته اصلی توسط ajapyy
        وقفه ارتباط سریال زمانی اتفاق میفته که :
        1- شما داخل تنظیمات ارتباط سریال اونو فعال کرده باشید.
        2- از سمت یک میکروی دیگه یا هر چیزه دیگه برای شما دیتایی ارسال بشه.
        به محض فرستادن اولین بیت از سمت دیگه به میکرو، پایه RXD که سطح ولتاژ منطقی یک داشته میره توی سطح منطقی صفر و دریافت اطلاعات شوع میشه. پس شما می تونی بفهمی که کی دیتا میاد. (یعنی ارتباط سریال در حال دریافت هستش).
        نوشته اصلی توسط vahidabedi
        بله میتونید اینکارو بکنید.
        سلام
        من از دستورات
        کد:
        Enable Interrupts
        Enable Urxc
        On Urxc Serial_input
        استفاده می کنم درسته و یا نه دستورات دیگه ای هم داره...؟؟؟
        در ضمن این دستورات خودش از پورت سریال دریافت هم انجام میده و یا نه باید با دستور input دریافت کنم ...؟؟؟
        *****عيب جامعه اين است که همه مي خواند آدم مهمي باشند ولي هيچ کس نمي خواهد فرد مفيدي باشد.*****
        http://electerodl.ir/forum

        دیدگاه


          #5
          پاسخ : وقفه ارتباط سریال

          نوشته اصلی توسط ehsan2774
          سلام
          من از دستورات
          کد:
          Enable Interrupts
          Enable Urxc
          On Urxc Serial_input
          استفاده می کنم درسته و یا نه دستورات دیگه ای هم داره...؟؟؟
          در ضمن این دستورات خودش از پورت سریال دریافت هم انجام میده و یا نه باید با دستور input دریافت کنم ...؟؟؟
          بله همینطوریه؛ با رسیدن اینتراپت وقفه سریال، برنامه به ISR تعریف شده (در اینجا زیر روال Serial_input پرش می کند که در این زیر روال، باید با دستورات مربوطه مثل Input یا Ischarwaiting بافر سریال را بخوانید. البته توضیحات Help بسکام در مورد نحوه انجام تنظیمات مربوط به وقفه سریال خیلی کم است. مثلا مشخص نیست سایز بافر در این حالت چقدر است و چطور می توان آن را تغییر داد. در واقع در صورت استفاده از وقفه سریال، دیگر نمی توان از دستوری مثل اینها استفاده کرد:

          Config Serialin = Normal

          Config Serialin = Buffered , Size = 250

          Config Serialout = Buffered , Size = 250

          دیدگاه


            #6
            پاسخ : وقفه ارتباط سریال

            نوشته اصلی توسط مهندس نوآور
            بله همینطوریه؛ با رسیدن اینتراپت وقفه سریال، برنامه به ISR تعریف شده (در اینجا زیر روال Serial_input پرش می کند که در این زیر روال، باید با دستورات مربوطه مثل Input یا Ischarwaiting بافر سریال را بخوانید. البته توضیحات Help بسکام در مورد نحوه انجام تنظیمات مربوط به وقفه سریال خیلی کم است. مثلا مشخص نیست سایز بافر در این حالت چقدر است و چطور می توان آن را تغییر داد. در واقع در صورت استفاده از وقفه سریال، دیگر نمی توان از دستوری مثل اینها استفاده کرد:

            Config Serialin = Normal

            Config Serialin = Buffered , Size = 250

            Config Serialout = Buffered , Size = 250
            ممنون از کمکتون...
            خوب وقتی داخل زیر برنامه میرم دیگه بیرون نمیاد و انگار که هنگ کرده مشکل از چی می تونه باشه؟؟؟؟
            این یه قسمتی از برنامه است
            کد:
            Serial_interrupt:
            Enable Interrupts
            Enable Urxc
            On Urxc Serial_input
            Disable Urxc
            Disable Interrupts
            return
            
            Serial_input:
            Input S
            Select Case S
            Case "pomp" : Goto Pomp
            Case "kond" : Goto Kond
            Case "tond" : Goto Tond
            Case "off" : Goto Turn_off
            End Select
            
            
            Pomp:
            Cls
            Locate 2 , 1
            Lcd S
            Toggle Portc.0
            Return
            Kond:
            Cls
            Locate 2 , 1
            Lcd S
            Reset Portc.2
            Set Portc.1
            Return
            Tond:
            Cls
            Locate 2 , 1
            Lcd S
            Reset Portc.1
            Set Portc.2
            Return
            Turn_off:
             Locate 2 , 1
            Lcd S
            Reset Portc.2
            Reset Portc.1
            Reset Portc.0
            Return
            وقتی در ابتدای برنامه دارم با دستور goto Serial_interrupt دارم زیر برنامه اینتراپت سریال رو فراخوانی می کنم هی برنامه از نو شروع میشه انگار که میکرو داره ریست میشه...!!!!؟؟؟؟؟
            *****عيب جامعه اين است که همه مي خواند آدم مهمي باشند ولي هيچ کس نمي خواهد فرد مفيدي باشد.*****
            http://electerodl.ir/forum

            دیدگاه


              #7
              پاسخ : وقفه ارتباط سریال

              وقتی دستور

              On Urxc Serial_input

              را دارید، دیگه نیازی نیست چیزی را فراخوانی کنید. هر وقت وقفه آمد، میکرو همه کارها را زمین گذاشته و می رود سر وقت زیر برنامه Serial-input .
              سپس با دستوری مثل Inkey بافر سریال را بخوانید و بعد بافر را خالی کنید تا برای دفعه بعد آماده باشد.
              ضمنا استفاده مکرر از دستور Goto اصولی نیست و به جای آن از دستور ...Declare Sub به همراه Sub...Return استفاده کنید.

              دیدگاه


                #8
                پاسخ : وقفه ارتباط سریال

                نوشته اصلی توسط مهندس نوآور
                وقتی دستور

                On Urxc Serial_input

                را دارید، دیگه نیازی نیست چیزی را فراخوانی کنید. هر وقت وقفه آمد، میکرو همه کارها را زمین گذاشته و می رود سر وقت زیر برنامه Serial-input .
                سپس با دستوری مثل Inkey بافر سریال را بخوانید و بعد بافر را خالی کنید تا برای دفعه بعد آماده باشد.
                ضمنا استفاده مکرر از دستور Goto اصولی نیست و به جای آن از دستور ...Declare Sub به همراه Sub...Return استفاده کنید.
                با تشکر از شما
                چطور میشه بافر را خالی کرد دستور خاصی دارد؟؟؟
                *****عيب جامعه اين است که همه مي خواند آدم مهمي باشند ولي هيچ کس نمي خواهد فرد مفيدي باشد.*****
                http://electerodl.ir/forum

                دیدگاه


                  #9
                  پاسخ : وقفه ارتباط سریال

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

                  www.intelart.ir


                  ساخت کنترلر دما PID فازي با AVR [آموزشی]

                  دیدگاه


                    #10
                    پاسخ : وقفه ارتباط سریال

                    نوشته اصلی توسط Mahdi.Faani
                    پیشنهاد من اینه که از یک کتابخونه خوب استفاده کنید که بافر حلقوی داشته باشه...چون معلوم نیست که کی دیتا برسه و چند بایت باشه...اگه به موقع نخونیدش دیتای قبلی از دست میره...
                    اگه با C کار میکردید میتونستم راهنماییتون کنم ولی واسه همین بسکام هم سرچ کنید حتما کتابخونه خوب پیدا میشه...
                    میشه بگید دقیقا چیرو باید سرچ کنم ؟؟؟؟
                    کتابخانه ارتباط سریال در بسکام؟؟؟؟
                    *****عيب جامعه اين است که همه مي خواند آدم مهمي باشند ولي هيچ کس نمي خواهد فرد مفيدي باشد.*****
                    http://electerodl.ir/forum

                    دیدگاه


                      #11
                      پاسخ : وقفه ارتباط سریال

                      نوشته اصلی توسط ehsan2774
                      با تشکر از شما
                      چطور میشه بافر را خالی کرد دستور خاصی دارد؟؟؟
                      بله، برای خالی شدن بافر سریال، یک روش مثلا این زیر روال به نام Flushbuf است:

                      کد:
                      Sub Flushbuf() 
                       
                        Waitms 100                        'give some time to get data if it is there
                      
                       Do
                        B = Inkey()                       'Clean entire flush buffer
                       Loop Until B = 0
                       
                      End Sub

                      دیدگاه


                        #12
                        پاسخ : وقفه ارتباط سریال

                        .

                        دیدگاه


                          #13
                          پاسخ : وقفه ارتباط سریال

                          فارسی ک جواب نمیگیرید
                          اینو سرچ کنید:
                          a library for uart in bascom avr using circular buffer
                          تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                          www.intelart.ir


                          ساخت کنترلر دما PID فازي با AVR [آموزشی]

                          دیدگاه


                            #14
                            پاسخ : وقفه ارتباط سریال

                            نوشته اصلی توسط مهندس نوآور
                            بله، برای خالی شدن بافر سریال، یک روش مثلا این زیر روال به نام Flushbuf است:

                            کد:
                            Sub Flushbuf() 
                             
                              Waitms 100                        'give some time to get data if it is there
                            
                             Do
                              B = Inkey()                       'Clean entire flush buffer
                             Loop Until B = 0
                             
                            End Sub
                            ممنونم ازتون
                            میشه بگین متغیر B برای چی استفاده کردین؟؟
                            دستور inkey داره چیرو میگیره از پورت سریال ؟؟؟
                            یکم توضیح بدین لطفا؟؟
                            *****عيب جامعه اين است که همه مي خواند آدم مهمي باشند ولي هيچ کس نمي خواهد فرد مفيدي باشد.*****
                            http://electerodl.ir/forum

                            دیدگاه


                              #15
                              پاسخ : وقفه ارتباط سریال

                              با سلام خدمت دوستان واساتید عزیز
                              بنده برای ارتباط با ماژول سیم 800 از uart میکرو استفاده میکنم ولی متاسفانه بعد از اینکه وقفه سریال میاد برنامه داخل وقفه گیر میکنه و به جای قبلی برنمیگرده البته دستورات داخل وقفه رو انجام میده و وقتی هم وقفه تایمر میاد میره به اون ومجدد برمیگرده به وقفه سریال حتی بجای دستور retun از gotoهم استفاده کردم که کلا برنامه کار نکردالبته وقتی کل دستورات شرطی رو داخل وقفه سریال میزارم همشون درست عمل میکنه برنامه رو میزارم دوستان راهنمایی بفرمایید که اشکال کار کجاست پیشاپیش ممنون ازراهنمایی عزیزان
                              کد:
                              $regfile = "m16def.dat"
                              $crystal = 8000000
                              $hwstack = 256
                              $swstack = 256
                              $framesize = 256
                              $baud = 9600
                              Config Lcd = 16 * 2
                              Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , _
                              Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
                              Enable Interrupts
                              Enable Ovf1
                              Enable Urxc
                              On Urxc Data_received
                              Config Timer1 = Timer , Prescale = 256
                              On Timer1 Tm
                              
                              
                              Dim C As Byte , D As Byte , V As Byte : D = 0 : V = 0
                              Dim B As String * 2 , E As String * 5 , A As String * 30 : A = "" : B = ""
                              
                              
                              Config Porta = Output
                              Open "comD.5:9600,8,n,1" For Output As #1
                              
                              
                              Declare Sub Gg
                              Declare Sub Kh
                              Declare Sub Al
                              Declare Sub Bargasht
                              Declare Sub Noant
                              Declare Sub Data_received
                              
                              
                              Deflcdchar 1 , 31 , 31 , 14 , 4 , 4 , 4 , 4 , 4
                              Deflcdchar 2 , 32 , 32 , 32 , 32 , 32 , 32 , 3 , 15
                              Deflcdchar 3 , 32 , 32 , 32 , 1 , 7 , 31 , 31 , 31
                              Deflcdchar 4 , 32 , 3 , 15 , 31 , 31 , 31 , 31 , 31
                              
                              
                              Cursor Off
                              
                              
                              Locate 1 , 1
                              Lcd Chr(1)
                              
                              
                               Start Timer1
                              
                              
                              Do
                                 If V > 10 Then
                                  V = 0
                                  Print "AT+CSQ"
                                 End If
                              
                              
                                If A = "RING" Then
                                  Wait 4
                                  Print "ATA"
                                End If
                              
                              
                                 If A = "+DTMF: 1" Then Print#1 , "ATD09145777345;"
                                 If A = "+DTMF: 2" Then Print#1 , "ATD09931669516;"
                                 If A = "+DTMF: 3" Then Print#1 , "ATH"
                                 If A = "+DTMF: 4" Then Print "ATH"
                              
                              
                               E = Left(a , 4)
                              
                              
                                  If E = "+CSQ" Then
                                    B = Mid(a , 7 , 2)
                                    D = Val(b)
                                    If D < 10 Then Call Noant
                                    If D < 15 Or D > 9 Then Call Gg
                                    If D < 20 Or D > 14 Then Call Kh
                                    If D > 20 Then Call Al
                                    B = ""
                                  End If
                                   D = 0
                                   E = ""
                              
                              
                              
                              
                              Loop
                              
                              
                              End
                              
                              
                               Data_received:
                               A = ""
                                 Do
                              
                              
                              
                              
                                  C = Inkey()noecho
                              
                              
                                      Select Case C
                              
                              
                                       Case 0:
                              
                              
                                       Case 13 :
                              
                              
                                         If A <> "" Then Exit Do
                              
                              
                                       Case 10 :
                              
                              
                                         If A <> "" Then Exit Do
                              
                              
                                       Case Else
                              
                              
                                          A = A + Chr(c)
                                    End Select
                              
                              
                                 Loop
                              
                              
                              
                              
                               Return
                              
                              
                              
                              
                              
                              
                              Sub Gg:
                               Locate 1 , 2
                               Lcd Chr(2) ; "  "
                              End Sub
                              
                              
                              Sub Kh:
                               Locate 1 , 2
                               Lcd Chr(2) ; Chr(3) ; " "
                              End Sub
                              
                              
                              Sub Al
                               Locate 1 , 2
                               Lcd Chr(2) ; Chr(3) ; Chr(4)
                              End Sub
                              
                              
                              Sub Noant
                               Locate 1 , 2
                               Lcd "NO "
                              End Sub
                              
                              
                              Tm:
                               V = V + 1
                              Return
                              جدیدترین ویرایش توسط AMIR987; ۱۹:۳۷ ۱۴۰۰/۰۹/۱۳.
                              در ارزويه روزي که تمام جوانان اين مملکت تمامي امکانات بروز را براي تحقق به ايده هاي خود در اختيار داشته باشند.....................

                              دیدگاه

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