اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام.

    در یک برنامه از وقفه سریال استفاده کردم و وقتی عدد 1 رو روی کیبورد میزنم در رجیستر udr عدد 49 گرفته میشه.
    مشکل چیه و چطور میشه عدد واقعی رو دریافت کرد؟
    ممنون.

    #2
    پاسخ : مشکل با وقفه سریال در بسکام

    سلام

    عدد 49 کد اسکی 1 هست یعنی شما داری کد اسکی 1 رو دریافت میکنی
    فکر کنم داری اینطوری '1' میفرستی اگه درسته اینطوری 1 بفرست

    اگه درست نشد بگو تا درستش کنیم :mrgreen:
    الکترونیک همه کاره دنیا

    دیدگاه


      #3
      پاسخ : مشکل با وقفه سریال در بسکام

      ممنون از پاسختون.

      من از محیط terminal emulator نرم افزار بسکام توسط کیبورد اعداد را وارد میکنم.
      چطور کد اسکی رو به مقدار واقعی خود اون عدد برگردونم؟

      با تشکر.

      دیدگاه


        #4
        پاسخ : مشکل با وقفه سریال در بسکام

        با دستور
        کد:
        CHR(ASCII_CODE)
        کد اسکی رو میشه به کاراکتر تبدیل کرد و با دستور
        کد:
        VAL(STRING_CHAR)
        میشه یه عدد متنی رو به عدد تبدیل کرد.
        ;()((void (*)(void))0x0000))

        دیدگاه


          #5
          پاسخ : مشکل با وقفه سریال در بسکام

          سلام منم همین مشکلو دارم عدد1رو میفرستم49نشون میده 5رو میفرستم53نشون میده اینم برنامه مشکل کجاس؟
          $regfile = "m8def.dat"
          $crystal = 11059200
          $baud = 9600
          Config Portc.5 = Output
          Config Portd.2 = Output
          Config Pinb.0 = Input
          Config Adc = Single , Prescaler = Auto


          Dim A As Byte , W As Word
          Portd.2 = 1
          Dataselect Alias Portd.2
          A = 5


          Do
          If Pinb.0 = 0 Then Print A

          Loop

          End
          { خلاف قوانین - پاک شد }

          دیدگاه


            #6
            پاسخ : مشکل با وقفه سریال در بسکام

            سلام منم همین مشکلو دارم عدد1رو میفرستم49نشون میده 5رو میفرستم53نشون میده اینم برنامه مشکل کجاس؟
            $regfile = "m8def.dat"
            $crystal = 11059200
            $baud = 9600
            Config Portc.5 = Output
            Config Portd.2 = Output
            Config Pinb.0 = Input
            Config Adc = Single , Prescaler = Auto


            Dim A As Byte , W As Word
            Portd.2 = 1
            Dataselect Alias Portd.2
            A = 5


            Do
            If Pinb.0 = 0 Then Print A

            Loop

            End
            { خلاف قوانین - پاک شد }

            دیدگاه


              #7
              پاسخ : مشکل با وقفه سریال در بسکام

              سلام
              سمت گیرنده کامپیوتر هست یا میکرو؟
              اگه کامپیوتر هست احتمالا گذاشتین مقدار اسکی دریافتی رو نمایش بده
              اگه اون سمت میکرو هست شما باید با دستور
              کد:
              a=chr(byte rec)
              اون رو تبدیل به کاراکتر کنید که متغیر a از نوع string هست و byte rec متغیر دریافتی

              دیدگاه


                #8
                پاسخ : مشکل با وقفه سریال در بسکام

                گیرنده میکرو هست ولی چرا اسکی دریافت میکنه؟علتش چیه منکه اسکی نمیفرستم متغیر aهم از نوع بایته چرا باید به کارکتر تبدیل بشه چرا عدد ارسال نمیشه؟
                { خلاف قوانین - پاک شد }

                دیدگاه


                  #9
                  پاسخ : مشکل با وقفه سریال در بسکام

                  نوشته اصلی توسط r-el نمایش پست ها
                  گیرنده میکرو هست ولی چرا اسکی دریافت میکنه؟علتش چیه منکه اسکی نمیفرستم متغیر aهم از نوع بایته چرا باید به کارکتر تبدیل بشه چرا عدد ارسال نمیشه؟
                  فرمت دستور print به این شکل هست که مقدار رو به صورت اسکی میفرسته
                  تو بسکام فک کنم با دستور printbin میشه مقدار رو همون چیزی که هست فرستاد

                  دیدگاه


                    #10
                    پاسخ : مشکل با وقفه سریال در بسکام

                    سلام. این برنامه تست شده .
                    Reshte رشته نهاییتون هست



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


                    $baud = 9600
                    Enable Urxc
                    On Urxc Uart_reciver
                    Config Portd.0 = Input


                    Dim Buffer As Byte
                    Dim Ss As String * 30 , Reshte As String * 30


                    Enable Interrupts


                    Do


                    Loop
                    End



                    '******************************************************


                    Uart_reciver:


                    $timeout = 5000000

                    Buffer = Udr


                    Select Case Buffer


                    Case 33 To 126:


                    Ss = Ss + Chr(buffer)


                    Case 13:


                    Reshte = Ss
                    Print Reshte


                    End Select

                    Return


                    [FONT=Yekan] [/FONT]
                    جدیدترین ویرایش توسط kargahelec; ۰۸:۱۲ ۱۳۹۶/۰۸/۲۱.

                    دیدگاه


                      #11
                      پاسخ : مشکل با وقفه سریال در بسکام

                      نوشته اصلی توسط M3R-E نمایش پست ها
                      فرمت دستور print به این شکل هست که مقدار رو به صورت اسکی میفرسته
                      تو بسکام فک کنم با دستور printbin میشه مقدار رو همون چیزی که هست فرستاد
                      فرقی نکرد فقط رقم اولو میخونه
                      { خلاف قوانین - پاک شد }

                      دیدگاه


                        #12
                        پاسخ : مشکل با وقفه سریال در بسکام

                        نوشته اصلی توسط r-el نمایش پست ها
                        فرقی نکرد فقط رقم اولو میخونه
                        با این دستور امتحان کنید ببینید جواب چی میشه:
                        PrintChr(akey)
                        که akey مقدار عددی هست که میخواید ارسال کنید

                        دیدگاه


                          #13
                          پاسخ : مشکل با وقفه سریال در بسکام

                          نوشته اصلی توسط kargahelec نمایش پست ها
                          سلام. این برنامه تست شده .
                          Reshte رشته نهاییتون هست



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


                          $baud = 9600
                          Enable Urxc
                          On Urxc Uart_reciver
                          Config Portd.0 = Input


                          Dim Buffer As Byte
                          Dim Ss As String * 30 , Reshte As String * 30


                          Enable Interrupts


                          Do


                          Loop
                          End



                          '******************************************************


                          Uart_reciver:


                          $timeout = 5000000

                          Buffer = Udr


                          Select Case Buffer


                          Case 33 To 126:


                          Ss = Ss + Chr(buffer)


                          Case 13:


                          Reshte = Ss
                          Print Reshte


                          End Select

                          Return


                          [FONT=Yekan] [/FONT]
                          سلام ممنون میشم اگه درمورد برنامه توضیح بدین
                          برنامه درست بود فقط اعدادرو کنار هم مینویسه میره جلو تا از ال سی دی خارج بشه یعنی اول1بعد12بعد123بعد1234و الی اخر
                          دارم رو ال سی دی نمایش میدم و هرکاری میکنم درست نمیشه
                          cls
                          do
                          home
                          lcd Reshte
                          loop
                          برنامه اینه
                          جدیدترین ویرایش توسط r-el; ۱۱:۰۹ ۱۳۹۶/۰۸/۲۲.
                          { خلاف قوانین - پاک شد }

                          دیدگاه


                            #14
                            پاسخ : مشکل با وقفه سریال در بسکام

                            نوشته اصلی توسط M3R-E نمایش پست ها
                            با این دستور امتحان کنید ببینید جواب چی میشه:
                            PrintChr(akey)
                            که akey مقدار عددی هست که میخواید ارسال کنید
                            ممنون ولی فکر کنم دریافت مشکل داره ن ارسال درست نمیگم؟

                            دلیل: ادغام دو پست برای جلوگیری از اسپم

                            اقا دمت گرم اقای m3r-eدرست شد واقعا ممنون برنامه گیرنده رو برگردوندم رو حالت اول فرستنده رو اصلاح کردم حل شد متشکرم
                            { خلاف قوانین - پاک شد }

                            دیدگاه


                              #15
                              پاسخ : مشکل با وقفه سریال در بسکام

                              سلام
                              مشکل من کامل حل شد حالا یه مستر گذاشتم و دوتا اسلیو و میخوام ادرس دهی کنم برنامه رو هم نوشتم ولی جواب نداد دوستان میتونن بررسی کنن مشکل باز کجاست؟
                              این برنامه اسلیو
                              $regfile = "m8def.dat"
                              $crystal = 11059200
                              $baud = 9600

                              'Config Portc.5 = Output
                              Config Portd.2 = Output
                              Config Pinb.0 = Input
                              Config Adc = Single , Prescaler = Auto


                              Dim A As Word , W As Word , B As Byte , Udr_resive As Byte
                              Dim Entekhab_slave As Byte
                              Dataselect Alias Portd.2

                              B = 0

                              Do

                              Dataselect = 0
                              While B = 0
                              Wend
                              If Udr_resive = 2 Then
                              Dataselect = 1
                              Start Adc
                              W = Getadc(5)
                              Waitms 50
                              Stop Adc
                              A = W / 2
                              'If Pinb.0 = 0 Then Print A

                              Print Chr(a)
                              'Wait 1
                              End If
                              Loop

                              End
                              '******************************* Data_resive ***********************************
                              Data_resive:
                              '(
                              A = Udr
                              B = 1
                              Ucr.rxen = 0
                              ')
                              Udr_resive = Udr
                              B = 1
                              Ucr.rxen = 0
                              Return
                              چیزی که خودم فکر میکنم و نوشتم اینه که از اولdoابتدا میره رو مد دریافت و منتظر دستور مستر میمونه وقتی که دستور برسه و وقفه ایجاد بشهb=1میشه پس میره چک میکنه که عدد1هست یا دو اگه1بود اسلیو 1 و اگه2بود اسلیو 2میره دمارو میخونه و میفرسته برای مستر ودوباره باloop برمیگرده رو مد دریافت و باز منتظر دستور مستر میمونه
                              این مال اسلیو
                              حالا برنامه مستره اینه
                              $regfile = "m16def.dat"
                              $crystal = 11059200
                              $baud = 9600

                              Config Porta = Output
                              Config Portb.1 = Output

                              Config Lcdpin = Pin , Db4 = Pinb.5 , Db5 = Pinb.4 , Db6 = Pinb.3 , Db7 = _
                              Pinb.2 , Rs = Pinb.7 , E = Pinb.6
                              Config Lcd = 16 * 2

                              Enable Interrupts
                              Enable Urxc
                              On Urxc Data_resive

                              Dim A As Byte , B As Byte , C As String * 30 , Udr_resive(5) As Byte
                              Dim Buffer As Byte , Entekhab_slave As Byte
                              Dim Ss As String * 30 , Reshte As String * 30

                              Deflcdchar 0 , 30 , 18 , 18 , 30 , 32 , 32 , 32 , 32 ' replace [x] with number (0-7)
                              Deflcdchar 1 , 30 , 16 , 16 , 16 , 16 , 30 , 32 , 32 ' replace [x] with number (0-7)

                              B = 0
                              Do

                              For Entekhab_slave = 1 To 2
                              Portb.1 = 1
                              Print Chr(entekhab_slave)
                              Portb.1 = 0
                              While B = 0
                              Wend
                              B = 0
                              Ucr.rxen = 1
                              Next Entekhab_slave
                              Gosub Nemayesh

                              Loop

                              '********************************* nemayesh ************************************
                              Nemayesh:
                              Cursor Off

                              Home H : Lcd Udr_resive(1) ; Chr(0) ; Chr(1)
                              Home L : Lcd Udr_resive(2) ; Chr(0) ; Chr(1)

                              Return
                              '******************************* Data_resive ***********************************
                              Data_resive:
                              '(
                              A = Udr
                              B = 1
                              Ucr.rxen = 0
                              ')
                              Udr_resive(entekhab_slave) = Udr
                              B = 1
                              Ucr.rxen = 0
                              Return
                              از اولdo
                              اول میادمتغیر رو 1 میکنه و بعد میره رو مد ارسال
                              و منتظر میمونه دیتا برسه اگهb=1 بشه دیتا رسیده و دوباره میاد دیتای رسیده رو ذخیره میکنه
                              B = 0
                              Ucr.rxen = 1 وبرمیگرده متغیر رو 2میکنه و دوباره میره رو مد ارسال و پس از اینکه دیتا دومی رسید از for خارج میشه و میره نمایش میده دمارو روی ال سی دی و برمیگرده از اول
                              حالا هیچی نشون نمیده کجای کار ایراد داره؟
                              { خلاف قوانین - پاک شد }

                              دیدگاه

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