اطلاعیه

Collapse
No announcement yet.

مشکل جدی با ارتباط دو میکرو

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

    مشکل جدی با ارتباط دو میکرو

    سلام به همگی به کمکتون احتیاج دارم در حد المپیک که بد جور گیرم با اجازتون میخوام یه سری اطلاعاتو بین دو تا میکرو انتقال بدم و روی ال سی دی هم نشون بدم به وسیله دو تا پایه rxd و txd داخل پروتئوس خیلی عالی جواب گرفتم اما تو مدارم اصلا جواب نمی ده همه جای برناممو چک کردم سالم بوده اما دریافت و ارسال دیتا انجام نمیشه از همه اساتید خواهش می کنم کمکم کنید :angry: :cry2:
    این گیرندمه :
    $regfile = "m16def.dat" ' specify the used micro
    $crystal = 8000000 ' used crystal frequency
    $baud = 19200
    Dim Er As Byte
    Declare Function Show() As Byte
    Config Portd.5 = Input
    Config Portd.6 = Input
    Config Portd.7 = Input
    Config Portd.4 = Output
    Reset Portd.4
    Config Int0 = Falling
    Config Int1 = Falling
    Config Portc = Output

    Enable Interrupts

    Enable Int0
    Enable Int1
    Enable Urxc
    Enable Utxc

    Dim Go As Bit
    Go = 0

    On Int0 Menu
    On Int1 On_off
    Dim Tto As Word
    Tto = 0
    Dim Exdo As Byte
    Exdo = 1
    Dim Indoor As Bit
    Indoor = 0

    Dim Bw As Byte
    Dim Ind As Byte
    Dim Rd1(20) As String * 20
    Dim Rsd As String * 20
    Dim On_off_flag As Bit , Ismenu As Byte
    Dim To_off As Bit , Showp As Byte
    Dim Welcom As Bit
    Dim I As Byte , Show1 As Byte , Inda As Byte
    Dim A1 As Byte
    Dim Fd As Byte , Ed As Bit , Pcc As Byte , Pcc1 As Byte
    Dim Backmenu As Bit
    Backmenu = 0
    Fd = 0
    Ed = 0
    A1 = 1
    To_off = 0
    I = 0
    On_off_flag = 0
    Welcom = 0
    Ismenu = 0
    Showp = 0



    Dim T1 As Byte , T2 As Byte , Power1 As String * 15 , Mode1 As Byte , Firenu As Byte

    Readeeprom T1 , 0
    Readeeprom T2 , 5
    Readeeprom Mode1 , 10
    Readeeprom Firenu , 15

    If T1 = 255 Then
    T1 = 1
    Writeeeprom T1 , 0


    Else
    T1 = T1
    End If


    If T2 = 255 Then
    T2 = 1
    Writeeeprom T2 , 5

    Else
    T2 = T2
    End If


    If Mode1 = 255 Then
    Mode1 = 1
    Writeeeprom Mode1 , 10
    Else
    Mode1 = Mode1
    End If

    If Firenu = 255 Then
    Firenu = 8
    Writeeeprom Firenu , 15
    Else
    Firenu = Firenu
    End If
    Dim Ftime As Bit
    Ftime = 0
    'some routines to control the display are in the glcdKS108.lib file
    $lib "glcdKS108.lib"
    'First we define that we use a graphic LCD
    Config Graphlcd = 128 * 64sed , Dataport = Portb , Controlport = Porta , Ce = 3 , Ce2 = 4 , Cd = 0 , Rd = 1 , Reset = 5 , Enable = 2


    Dim B As Byte , I1 As Byte


    Setfont Font8x8

    Cls

    Dim Dand As Byte
    Dand = 1
    Do

    If On_off_flag = 1 Then


    If Welcom = 1 Then

    If Ftime = 0 Then
    Print "#start@"
    Ftime = 1
    Do
    B = Inkey()
    If B = "*" Then Exit Do

    If B = "&" Then
    Incr Dand
    Else
    If Fd = 1 Then Rd1(dand) = Rd1(dand) + String(1 , B)
    End If
    If B = "#" Then
    Fd = 1
    Dand = 1
    Dim B2 As Byte
    B2 = 1
    For B2 = 1 To 10
    Rd1(b2) = ""
    Next
    End If
    Loop
    End If



    Power1 = Rd1(1)
    Pcc = Val(rd1(3))
    Portc = Pcc
    Toggle Portc



    Cls



    Showpic 0 , 0 , Wel
    Waitms 1500

    Cls
    Waitms 10
    Setfont Font8x8
    Showpic 0 , 0 , Head
    Lcdat 4 , 0 , "FIRE NUMBER : " ; "0" ; Firenu
    If Mode1 >= 10 Then
    Lcdat 5 , 0 , "WORK MODE : " ; Mode1
    Else
    Lcdat 5 , 0 , "WORK MODE : " ; "0" ; Mode1
    End If
    If T1 >= 10 Then
    Lcdat 6 , 0 , "TIME DELAY : " ; T1
    Else
    Lcdat 6 , 0 , "TIME DELAY : " ; "0" ; T1
    End If



    If T2 >= 10 Then
    Lcdat 7 , 0 , "TIME CUT : " ; T2
    Else
    Lcdat 7 , 0 , "TIME CUT : " ; "0" ; T2
    End If



    Lcdat 8 , 1 , "POWER CONECT:" ; Power1




    '------------------------------------------------------------------------
    Exdo = 1
    Welcom = 0
    End If


    If Ismenu = 0 Then

    If Showp = 2 Then
    Cls
    Waitms 10
    Setfont Font8x8

    Showpic 0 , 0 , Head
    Waitms 10
    Lcdat 4 , 1 , "FIRE NUMBER : " ; "0" ; Firenu
    If Mode1 >= 10 Then
    Lcdat 5 , 1 , "WORK MODE : " ; Mode1
    Else
    Lcdat 5 , 1 , "WORK MODE : " ; "0" ; Mode1
    End If
    If T1 >= 10 Then
    Lcdat 6 , 1 , "TIME DELAY : " ; T1
    Else
    Lcdat 6 , 1 , "TIME DELAY : " ; "0" ; T1
    End If


    If T2 >= 10 Then
    Lcdat 7 , 1 , "TIME CUT : " ; T2
    Else
    Lcdat 7 , 1 , "TIME CUT : " ; "0" ; T2

    End If




    Lcdat 8 , 1 , "POWER CONECT:" ; Power1

    Showp = 0

    End If
    '------------------------------------------------


    If To_off = 1 Then

    Set Portd.4
    Cls

    Showpic 0 , 0 , Bye
    Reset Portc.0
    Reset Portc.1
    Reset Portc.2
    Reset Portc.3
    Reset Portc.4
    Reset Portc.5
    Reset Portc.6
    Reset Portc.7

    Wait 3
    Cls
    Reset Portd.4
    On_off_flag = 0
    Fd = 0
    Exdo = 0
    Ismenu = 90
    End If
    Backmenu = 0


    '------------------------------------------------

    '------------------------------------------------------------------------


    Waitms 10

    If Exdo = 1 Then
    Do
    B = Inkey()
    If B = "*" Then Exit Do
    If B = "@" Then
    Else
    If B = "&" Then
    Incr Dand
    Else
    If Fd = 1 Then Rd1(dand) = Rd1(dand) + String(1 , B)

    If Fd = 1 Then Rsd = Rsd + String(1 , B)
    End If
    End If

    If B = "#" Then
    Fd = 1
    Dand = 1
    Dim B21 As Byte
    B21 = 1
    For B21 = 1 To 10
    Rd1(b21) = ""
    Next
    Rsd = ""
    End If
    Loop


    If Len(rsd) = 11 Then
    Power1 = Rd1(1)
    Pcc = Val(rd1(3))
    If Pcc = Pcc1 Then
    Else
    Portc = Pcc
    Toggle Portc
    Pcc1 = Pcc
    End If
    End If

    Do
    If Inkey() = "@" Then Exit Do
    Print "@"
    Print "#" ; T1 ; "&" ; T2 ; "&" ; Firenu ; "&" ; Mode1 ; "*"
    Waitms 10

    Loop

    End If





    If Pind.7 = 0 Then

    Cls
    Waitms 10
    Showp = 2
    End If










    Else


    Set Portd.4
    If Showp = 1 Then
    Cls

    Setfont Font8x8
    Showpic 0 , 0 , He
    Showp = 2
    End If



    Select Case Ismenu



    Case 1
    Show1 = Show()
    If Pind.5 = 0 Then
    Readeeprom Firenu , 15
    If Firenu < 8 Then
    Incr Firenu
    Writeeeprom Firenu , 15

    Show1 = Show()
    Waitms 200
    End If


    Elseif Pind.6 = 0 Then

    Readeeprom Firenu , 15
    If Firenu > 1 Then
    Decr Firenu
    Writeeeprom Firenu , 15
    If Firenu =< Mode1 Then
    Select Case Firenu
    Case 1
    Mode1 = 1
    Case 2
    Mode1 = 2
    Case 3
    Mode1 = 3
    Case 4
    Mode1 = 5
    Case 5
    Mode1 = 8
    Case 6
    Mode1 = 10
    Case 7
    Mode1 = 12
    End Select

    Writeeeprom Mode1 , 10

    End If
    Show1 = Show()
    Waitms 200
    End If
    End If


    '-------------------------------------------------
    Case 2
    Show1 = Show()
    If Pind.5 = 0 Then
    Readeeprom Mode1 , 10
    Select Case Firenu
    Case 1

    If Mode1 < 1 Then
    Incr Mode1
    Writeeeprom Mode1 , 10
    Show1 = Show()
    Waitms 200
    End If

    Case 2

    If Mode1 < 2 Then
    Incr Mode1
    Writeeeprom Mode1 , 10
    Show1 = Show()
    Waitms 200
    End If

    Case 3

    If Mode1 < 3 Then
    Incr Mode1
    Writeeeprom Mode1 , 10
    Show1 = Show()
    Waitms 200
    End If

    Case 4
    If Mode1 < 5 Then
    Incr Mode1
    Writeeeprom Mode1 , 10
    Show1 = Show()
    Waitms 200
    End If

    Case 5
    If Mode1 < 8 Then
    Incr Mode1
    Writeeeprom Mode1 , 10
    Show1 = Show()
    Waitms 200
    End If

    Case 6
    If Mode1 < 10 Then
    Incr Mode1
    Writeeeprom Mode1 , 10
    Show1 = Show()
    Waitms 200
    End If

    Case 7
    If Mode1 < 12 Then
    Incr Mode1
    Writeeeprom Mode1 , 10
    Show1 = Show()
    Waitms 200
    End If

    Case 8

    If Mode1 < 15 Then
    Incr Mode1
    Writeeeprom Mode1 , 10
    Show1 = Show()
    Waitms 200

    End If

    End Select
    Elseif Pind.6 = 0 Then

    Readeeprom Mode1 , 10
    If Mode1 > 1 Then
    Decr Mode1
    Writeeeprom Mode1 , 10
    Show1 = Show()
    Waitms 200
    End If

    End If

    '--------------------------------------------------
    Case 3
    Show1 = Show()
    If Pind.5 = 0 Then
    Readeeprom T1 , 0
    If T1 < 20 Then
    Incr T1
    Writeeeprom T1 , 0
    Show1 = Show()
    Waitms 200
    End If


    Elseif Pind.6 = 0 Then

    Readeeprom T1 , 0
    If T1 > 1 Then
    Decr T1
    Writeeeprom T1 , 0
    Show1 = Show()
    Waitms 200
    End If
    End If


    '-----------------------------------------------------
    Case 4

    Show1 = Show()

    If Pind.5 = 0 Then
    Readeeprom T2 , 5
    If T2 < 20 Then
    Incr T2
    Writeeeprom T2 , 5
    Show1 = Show()
    Waitms 200
    End If


    Elseif Pind.6 = 0 Then

    Readeeprom T2 , 5
    If T2 > 1 Then
    Decr T2
    Writeeeprom T2 , 5
    Show1 = Show()
    Waitms 200
    End If

    End If


    '----------------------------------------------------
    Case Else

    Ismenu = 0

    Exdo = 1


    End Select




    End If

    End If


    Loop




    End

    On_off:

    Set Portd.4
    If On_off_flag = 1 And Ismenu = 0 Then
    Exdo = 0
    To_off = 1
    End If

    If On_off_flag = 0 Then
    Backmenu = 1
    On_off_flag = 1
    Welcom = 1
    I = 0
    To_off = 0
    Exdo = 0
    End If
    Return


    Menu:

    If On_off_flag = 1 Then
    Exdo = 0

    Select Case Ismenu
    Case 0
    Showp = 1
    Ismenu = 1


    Case 1
    Ismenu = 2


    Case 2
    Ismenu = 3


    Case 3
    Ismenu = 4

    Case 4
    Ismenu = 5





    End Select


    End If
    Return






    Function Show() As Byte




    Select Case Ismenu


    Lcdat 8 , 1 , "POWER CONECT:" ; Power1


    Case 1
    Lcdat 4 , 0 , "FIRE NUMBER : " ; "0" ; Firenu , 1
    If Mode1 >= 10 Then
    Lcdat 5 , 0 , "WORK MODE : " ; Mode1
    Else
    Lcdat 5 , 0 , "WORK MODE : " ; "0" ; Mode1
    End If
    If T1 >= 10 Then
    Lcdat 6 , 0 , "TIME DELAY : " ; T1
    Else
    Lcdat 6 , 0 , "TIME DELAY : " ; "0" ; T1
    End If


    If T2 >= 10 Then
    Lcdat 7 , 0 , "TIME CUT : " ; T2
    Else
    Lcdat 7 , 0 , "TIME CUT : " ; "0" ; T2
    End If

    '------------------------------------------------------------
    Case 2
    Lcdat 4 , 1 , "FIRE NUMBER : " ; "0" ; Firenu
    If Mode1 >= 10 Then
    Lcdat 5 , 1 , "WORK MODE : " ; Mode1 , 1
    Else
    Lcdat 5 , 1 , "WORK MODE : " ; "0" ; Mode1 , 1
    End If
    If T1 >= 10 Then
    Lcdat 6 , 1 , "TIME DELAY : " ; T1
    Else
    Lcdat 6 , 1 , "TIME DELAY : " ; "0" ; T1
    End If


    If T2 >= 10 Then
    Lcdat 7 , 1 , "TIME CUT : " ; T2
    Else
    Lcdat 7 , 1 , "TIME CUT : " ; "0" ; T2
    End If


    '----------------------------------------------------------
    Case 3
    Lcdat 4 , 1 , "FIRE NUMBER : " ; "0" ; Firenu
    If Mode1 >= 10 Then
    Lcdat 5 , 1 , "WORK MODE : " ; Mode1
    Else
    Lcdat 5 , 1 , "WORK MODE : " ; "0" ; Mode1
    End If
    If T1 >= 10 Then
    Lcdat 6 , 1 , "TIME DELAY : " ; T1 , 1
    Else
    Lcdat 6 , 1 , "TIME DELAY : " ; "0" ; T1 , 1
    End If


    If T2 >= 10 Then
    Lcdat 7 , 1 , "TIME CUT : " ; T2
    Else
    Lcdat 7 , 1 , "TIME CUT : " ; "0" ; T2
    End If

    '----------------------------------------------------------
    Case 4
    Lcdat 4 , 1 , "FIRE NUMBER : " ; "0" ; Firenu
    If Mode1 >= 10 Then
    Lcdat 5 , 1 , "WORK MODE : " ; Mode1
    Else
    Lcdat 5 , 1 , "WORK MODE : " ; "0" ; Mode1
    End If
    If T1 >= 10 Then
    Lcdat 6 , 1 , "TIME DELAY : " ; T1
    Else
    Lcdat 6 , 1 , "TIME DELAY : " ; "0" ; T1
    End If


    If T2 >= 10 Then
    Lcdat 7 , 1 , "TIME CUT : " ; T2 , 1
    Else
    Lcdat 7 , 1 , "TIME CUT : " ; "0" ; T2 , 1
    End If


    Case Else





    End Select


    End Function




    Wel:
    $bgf "WELL.BGF"
    Bye:
    $bgf "BYE.BGF"
    Head:
    $bgf "HEAD.BGF"
    He:
    $bgf "HE.BGF"

    'end program


    $include "font8x8.font" و اینم فرستنده :$regfile = "m16def.dat" ' specify the used micro
    $crystal = 8000000 ' used crystal frequency
    $baud = 19200

    Enable Interrupts
    Enable Urxc
    Enable Utxc


    Config Portb = Input
    Config Portd.4 = Input
    Config Portd.5 = Input
    Pow Alias Pind.4
    Bat Alias Pind.5
    Pob Alias Pinb

    Dim Tdel As Byte , Tcut As Byte , Fnum As Byte , Mode1 As Byte
    Dim Power1 As String * 10
    Dim Pins As Byte
    Dim Fd As Bit
    Dim Rd1 As String * 15
    Dim Rd(20) As String * 20
    Dim Rsd As String * 20
    Dim O_f As Byte
    O_f = 1
    Dim Er As Byte

    Dim Indoor As Bit
    Indoor = 0



    Dim B As Byte , Bw As Byte
    Dim Bats As String * 5

    Dim Dand As Byte
    Dand = 1








    Do
    '-------------------------------------
    If Pow = 1 Then
    Power1 = " ON"
    Else
    Power1 = "OFF"
    End If
    If Bat = 1 Then
    Bats = "hight"
    Else
    Bats = " low"
    End If
    Pins = Pob

    '----------------------------------------------
    If O_f = 1 Then
    Do
    Pins = Pob

    B = Inkey()
    If B = "@" Then Exit Do


    If Fd = 1 Then Rd1 = Rd1 + String(1 , B)
    If B = "#" Then
    Rd1 = ""
    Fd = 1
    End If
    Loop



    If Rd1 = "start" Then
    O_f = 2
    Print "#" ; Power1 ; "&" ; Bat ; "&" ; Pins ; "*"
    End If

    Else



    Do
    If Inkey() = "@" Then Exit Do
    Print "@"
    Print "#" ; Power1 ; "&" ; Bats ; "&" ; Pins ; "*"
    Waitms 10

    Loop


    Do
    B = Inkey()
    If B = "*" Then Exit Do
    If B = "@" Then
    Else
    If B = "&" Then
    Incr Dand
    Else
    If Fd = 1 Then Rd(dand) = Rd(dand) + String(1 , B)
    End If
    End If


    If B = "#" Then
    Fd = 1
    Dand = 1
    Dim B21 As Byte
    B21 = 1
    For B21 = 1 To 10
    Rd(b21) = ""
    Next

    End If
    Loop



    Tdel = Val(rd(1))
    Tcut = Val(rd(2))
    Fnum = Val(rd(3))
    Mode1 = Val(rd(4))



























    End If






    Loop


    End
    M.R.R

    #2
    پاسخ : خواهشا کمممممممممممممممممممممممممک

    سلام :mrgreen: :mrgreen:

    به نظ من بهتره baud رو بکنی 9600

    بقیشو دوستان عزیز میگن :mrgreen:
    AV Maziton 100
    Render By Artlantis Studio
    [img width=346 height=100]http://maziyar123.persiangig.com/View.jpg[/img]

    دیدگاه


      #3
      پاسخ : مشکل جدی با ارتباط دو میکرو

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

      دیدگاه


        #4
        پاسخ : مشکل جدی با ارتباط دو میکرو

        با تشکر از دوستان اما با باود 1200 یا 9600 هم کار کردم اما نشد ، البته این کارو با یه برنامه فقط برای تست انجام دادم ، مطمئن شدم که دیتا ردو بدل میشه اما داخل یه متغیر نمی تونم جمعش کنم با برنامه دیگه تست کردم که کل دیتایی که میخوام میاد اما من میخوام مثلا یه کلمه رو بگیرم و نشون بدم نمیشه ، نطرتون در این مورد چیه؟ :question:
        M.R.R

        دیدگاه


          #5
          پاسخ : مشکل جدی با ارتباط دو میکرو

          بچه ها هیششششششششششش کی نمیخواد کمک کنه خیلی گیرماااااااااااااااااااااااااااااااااااااااااااااا اا :cry2:
          M.R.R

          دیدگاه

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