اطلاعیه

Collapse
No announcement yet.

هنگ کردن avr

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

    هنگ کردن avr

    با سلام ...
    من این برنامه را نوشتم .. مشکل اینجاس که وقتی وقفه را فعال میکنم ، میکرو قاطی میکنه و اصلا بالا نمیاد .
    اینم برنامه هست :


    $regfile = "m32def.dat"
    $crystal = 8000000
    Enable Interrupts
    Enable Urxc

    Config Porta = Output 'Config LCD

    'LCD Config
    Config Lcd = 16 * 2
    Config Lcdbus = 4
    Config Lcdpin = Pin , Rs = Pina.0 , E = Pina.2 , Db4 = Pina.4 , Db5 = Pina.5 , Db6 = Pina.6 , Db7 = Pina.7
    Cursor Off


    'HMTR Config
    $baud = 9600


    'Define global variables
    Dim Ch As String * 13
    Dim Ch01 As String * 13
    Dim Ch02 As String * 13
    Dim Ch03 As String * 13

    Dim Ant As String * 13
    Dim Ant01 As String * 13
    Dim Ant02 As String * 13
    Dim Ant03 As String * 13

    Dim A As Byte
    Dim Bant As Byte
    Dim Count As Integer




    On Urxc Anten0



    'Main Program

    Main:

    Cls : Home

    Do
    Cls : Home
    Locate 2 , 3
    lcd ">>> READY <<<"



    If Ant01 = "hzm01" Then Goto Anten

    Waitms 50
    Loop
    End



    Anten:

    If Ant = "hzm0111" Then
    Ant03 = "01201"
    Print Ant03 ; Chr(13);
    Cls : Home
    Locate 2 , 1
    Lcd "lock"
    Wait 2
    Goto Main

    End If


    If Ant = "hzm0112" Then
    Ant03 = "01202"
    Print Ant03 ; Chr(13);
    Cls : Home
    Locate 2 , 1
    Lcd "unlock"
    Wait 2
    Ant = ""
    Goto Main

    End If

    goto main

    Anten0:
    Ant = ""
    Input Ant
    Ant01 = Left(ant , 5)
    cls : home
    Lcd Ant

    Wait 2

    Cls : Home

    Return



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

    #2
    پاسخ : هنگ کردن avr

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

    دیدگاه


      #3
      پاسخ : هنگ کردن avr

      با سلام ...

      اینتراپت که همون اول فعال شده :
      Enable Interrupts
      Enable Urxc

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

      On Urxc Anten0

      که در واقع وقفه هنگام آمدن داده هست .

      چیزی غیر از اینها باید بزارم ؟

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

      دیدگاه


        #4
        پاسخ : هنگ کردن avr

        با سلام بهتره به جای goto برنامه را بصورت زیر برنامه بنویسید اینجوری بهتره

        دیدگاه


          #5
          پاسخ : هنگ کردن avr

          نوشته اصلی توسط h_zaman06
          با سلام ...

          اینتراپت که همون اول فعال شده :
          Enable Interrupts
          Enable Urxc

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

          On Urxc Anten0

          که در واقع وقفه هنگام آمدن داده هست .

          چیزی غیر از اینها باید بزارم ؟

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

          دیدگاه


            #6
            پاسخ : هنگ کردن avr

            در ضمن به جای input از یه دستور دیگه استفاده کن مثلا Inkey() ببین درست میشه

            دیدگاه


              #7
              پاسخ : هنگ کردن avr

              با سلام ...
              و تشکر از پاسختون .

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

              مثلا من سوییچ 1 از میکروی 1 را که فشار دادم ، بیاد یه درخواستی را ارسال کنه ، هرکدوم که اون شرایط را داشت به میکرو 1 پاسخ میده ، سپس پردازش انجام بشه و کار مورد نظر انجام بشه .

              حالا از دستور inkey() هم که فرمودید استفاده میکنم ببینم به چه صورتی میشه .

              یک سئوال دیگه اینه که نمیشه کاری کرد که من بدون وقفه منتظر دریافت داده بمونم ، اما برنامه روی دریافت داده متوقف نشه ؟
              مثلا بیا داخل یک حلقه دستور دریافت را بزارم به همراه چندتا ورودی دیگه از چیزهای دیگه ، هرکدوم چیزی براش اومد اون موقع بره سروقت زیربرنامش ؟

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

              دیدگاه


                #8
                پاسخ : هنگ کردن avr

                دوستمون آقای زوار درست میگن یا از دستور inkey() یا از inputbin استفاده کن
                تو زیر برنامه anten0 همون اولش یه پیغام بزار تو خط دوم lcd
                اگه بعد از فعال کردن وقفه این پیغامو رو lcd ببینی مشکل از همون دستور خوندن سریاله

                دیدگاه


                  #9
                  پاسخ : هنگ کردن avr

                  با سلام ...
                  این دستور inkey() چه جوریه ؟
                  آخه من که باهاش چیز میفرستم اونطرف که میخوام نشون بده حرف به حرف نشون میده !

                  الان من اومدم یه دستور ساده استفاده کردم .
                  وقتی اجرا میکنم کلا یکمی کند میشه .
                  این دستور گیرنده هست :
                  $regfile = "m32def.dat"
                  $crystal = 8000000
                  Enable Interrupts
                  Enable Urxc

                  Config Porta = Output 'Config LCD

                  'LCD Config
                  Config Lcd = 16 * 2
                  Config Lcdbus = 4
                  Config Lcdpin = Pin , Rs = Pina.0 , E = Pina.2 , Db4 = Pina.4 , Db5 = Pina.5 , Db6 = Pina.6 , Db7 = Pina.7
                  Cursor Off


                  'HMTR Config
                  $baud = 9600


                  'Define global variables
                  Dim Ch As String * 13
                  Dim Ch01 As String * 13
                  Dim Ch02 As String * 13
                  Dim Ch03 As String * 13

                  Dim Ant As String * 13
                  Dim Ant01 As String * 13
                  Dim Ant02 As String * 13
                  Dim Ant03 As String * 13

                  Dim A As Byte
                  Dim Bant As Byte
                  Dim Count As Integer




                  On Urxc Anten0



                  'Main Program

                  Main2:

                  Cls : Home

                  Main:
                  Cls : Home
                  Locate 2 , 3
                  lcd ">>> READY <<<"
                  Do

                  Loop
                  End





                  Anten0:
                  Ant = ""
                  Ant = Inkey()
                  Ant01 = Left(ant , 5)
                  Ant02 = Left(ant , 4)
                  cls : home
                  Lcd Ant

                  Wait 2

                  Cls : Home

                  Return

                  وقتی پروگرم میشه همه چی خوب هست .. اما وقتی میام برق را قطع میکنم و دوباره وصل میکنم ... یه چند ثانیه های رو lcd هیچی نشون نمیده فقط یه _ میاد بعدش تازه متنش میاد بالا .

                  چرا همچین میشه ؟
                  یه هفته هست دست منو گذاشته تو حنا !

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

                  دیدگاه


                    #10
                    پاسخ : هنگ کردن avr

                    نوشته اصلی توسط makan.april
                    دوستمون آقای زوار درست میگن یا از دستور inkey() یا از inputbin استفاده کن
                    تو زیر برنامه anten0 ه :applause:مون اولش یه پیغام بزار تو خط دوم lcd
                    اگه بعد از فعال کردن وقفه این پیغامو رو lcd ببینی مشکل از همون دستور خوندن سریاله
                    با سلام ...
                    بله درست میفرمایید ... من همین کار را کردم ... وقتی میکرو روشن میشه میره در زیر برنامه وقفه و همینطور میمونه و بیرون هم نمیاد !
                    زیر برنامه را هم این گذاشتم :

                    Anten0:
                    cls : home
                    Lcd "hi.."
                    Wait 1
                    Ant = ""
                    Inputbin Ant
                    Ant01 = Left(ant , 5)
                    Ant02 = Left(ant , 4)
                    cls : home
                    Lcd Ant

                    Wait 1

                    Cls : Home

                    Return

                    اما میاد توی اینجا و همون hi را نشون میده و دیگه هیچ اتفاقی نمیوفته .
                    چی کارش باید بکنم ؟
                    به نظر میاد مشکل باید از وقفه باشه ؟ چون وقتی روشن میشه اصلا برای چی میاد تو زیر برنامه ؟

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

                    دیدگاه


                      #11
                      پاسخ : هنگ کردن avr

                      wait 2 را از آخر وقفه حذف کن در ضمن این دستور کاراکتر را تک تک میگیره

                      دیدگاه


                        #12
                        پاسخ : هنگ کردن avr

                        با سلام ...
                        کاری که فرمودید را انجام دادم .
                        اما مشکل اینه که تا روشن میشه میکرو میره داخل وقفه و بیرون نمیاد ! البته تا وقتی که دستوری برسه .
                        Anten0:
                        Ant = ""
                        Input Ant
                        Ant01 = Left(ant , 5)
                        Ant02 = Left(ant , 4)
                        Locate 1 , 1
                        Lcd Ant
                        Return

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

                        حالا باید چه کنم ؟ تا اولین بار وارد وقفه نشه ؟

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

                        دیدگاه


                          #13
                          پاسخ : هنگ کردن avr

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

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

                          دیدگاه


                            #14
                            پاسخ : هنگ کردن avr

                            با سلام ...
                            من چک کردم .. اومدم ورودی سریال را پول پ کردم ... دیگه موقع شروع برنامه تو وقفه گیر نمیکنه ... اما حالا دستوراتی که میفرستم درست خونده نمیشه !

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

                            لطفا راهنمایی بفرمایید .

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

                            دیدگاه


                              #15
                              پاسخ : هنگ کردن avr

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

                              دیدگاه

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