اطلاعیه

Collapse
No announcement yet.

تایمر خروج Bascom

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

    تایمر خروج Bascom

    با سلام و عرض ادب
    توی برنامه زیر (که مربوط به گیرنده کد لرنه) من یه متغییر (H) تعریف کردم که وقتی کلید key فشرده شده و برنامه رفته توی حال ثبت ریموت بعد از یه مدتی اتوماتیک بیاد بیرون
    ولی در عمل زمان خروج از این حالت بسیار عجیب و متفاوته.بنظرتون مشکل از کجاست
    کد:
    Config Timer1 = Timer , Prescale = 8 : Stop Timer1 : Timer1 = 0
    '--------------------------------- Variable ------------------------------------
    Dim S(24)as Word
    Dim I As Byte
    I = 0
    Dim Saddress As String * 20
    Dim Scode As String * 4
    Dim Address As Long
    Dim Code As Byte
    ''''''''''''''''''''''''''''''''
    Dim Ra As Long                                              'fp address
    Dim Rnumber As Byte                                         'remote know
    Dim Rnumber_e As Eram Byte
    Dim Okread As Bit
    Dim Error As Bit
    Dim Keycheck As Bit
    Dim T As Word                                               'check for pushing lean key time
    Dim H As Word
    Error = 0
    Okread = 0
    T = 0
    H = 0
    Keycheck = 0
    Dim Eaddress As Word                                        'eeprom address variable
    Dim E_read As Byte
    Dim E_write As Byte
    Dim Eevar(100) As Eram Long
    '-------------------------- read rnumber index from eeprom
    Rnumber = Rnumber_e
    If Rnumber > 100 Then
    Rnumber = 0
    Rnumber_e = Rnumber
    Waitms 10
    End If
    '------------------- startup
    Reset Led
    Sound Portc.5 , 800 , 240
    Waitms 100
    Enable Interrupts
    
    Main:
    H = 0
    Reset Led
    Waitms 200
    Do
    Gosub _read
    Debounce Key , 0 , Keys
    Loop
    '--------------------------------------------------------------------------read
    _read:
    Okread = 0
    If _in = 1 Then
    Do
    If _in = 0 Then Exit Do
    Loop
    Timer1 = 0
    Start Timer1
    While _in = 0
    Wend
    Stop Timer1
    If Timer1 >= 3500 And Timer1 <= 8800 Then
    Do
    If _in = 1 Then
    Timer1 = 0
    Start Timer1
    While _in = 1
    Wend
    Stop Timer1
    Incr I
    S(i) = Timer1
    End If
    If I = 24 Then Exit Do
    Loop
    For I = 1 To 24
    If S(i) >= 120 And S(i) <= 350 Then
    S(i) = 0
    Else
    If S(i) >= 400 And S(i) <= 850 Then
     S(i) = 1
     Else
     I = 0
     Address = 0
     Code = 0
     Okread = 0
     Return
     End If
     End If
    Next
    I = 0
    Saddress = ""
    Scode = ""
    For I = 1 To 20
    Saddress = Saddress + Str(s(i))
    Next
    For I = 21 To 24
    Scode = Scode + Str(s(i))
    Next
    Address = Binval(saddress)
    Code = Binval(scode)
    Gosub Check
    I = 0
    End If
    End If
    Return
    '================================================================ keys  learning
    Keys:
    Sound Portc.5 , 800 , 400
    Reset Rel1
    Reset Rel2
    Reset Rel3
    Reset Rel4
    Reset Rel5
    Set Led
    Keycheck = 1
    Waitms 150
    Do
    If Key = 0 Then
    While Key = 0
    Incr T
    Waitms 1
    If T >= 1000 Then
    T = 0
    Rnumber = 0
    Rnumber_e = Rnumber
    Waitms 200
    Wait 1
    Gosub Led1
    Return
    Exit While
    End If
    Wend
    If T < 1000 Then
    T = 0
    Sound Portc.5 , 800 , 500
    Return
    End If
    End If
    Incr H
    If H > 20000 Then
    Sound Portc.5 , 800 , 240
    Gosub Main
    End If
    Gosub _read
    If Okread = 1 Then
    Sound Portc.5 , 800 , 210
    If Rnumber = 0 Then                                         ' agar avalin remote as ke learn mishavad
    Incr Rnumber
    Rnumber_e = Rnumber
    Waitms 10
    Ra = Address
    Eevar(rnumber) = Ra
    Waitms 10
    Exit Do
       Else                                                     'address avalin khane baraye zakhire address remote
    For I = 1 To Rnumber
    Ra = Eevar(i)
    If Ra = Address Then                                        'agar address remote tekrari bod yani ghablan learn shode
    Sound Portc.5 , 800 , 180
    Error = 1
    Exit For
    Else
    Error = 0
    End If
    Next
    If Error = 0 Then                                           ' agar tekrari nabod
    Incr Rnumber                                                'be meghdare rnumber ke index tedade remote haye learn shode ast yek vahed ezafe kon
    If Rnumber > 100 Then                                       'agar bishtar az 100 remote learn shavad
    Rnumber = 100
    Sound Portc.5 , 800 , 100
    Else                                                        'agar kamtar az 100 remote bod
    Rnumber_e = Rnumber                                         'meghdare rnumber ra dar eeprom zakhore mikonad
    Ra = Address
    Eevar(rnumber) = Ra
    Waitms 10
    End If
    End If
    End If
    Exit Do
    End If
    Loop
    Okread = 0
    Reset Led
    Return
    '========================================================================= CHECK
    Check:
    H = 0
    Okread = 1
    If Keycheck = 0 Then                                        'agar keycheck=1 bashad yani be releha farman nade
    For I = 1 To Rnumber
    Ra = Eevar(i)
    If Ra = Address Then                                        'code
    Gosub Command
    Exit For
    End If
    Next
    End If
    Keycheck = 0
    Return

    #2
    پاسخ : تایمر خروج Bascom

    نوشته اصلی توسط rezashoja نمایش پست ها
    با سلام و عرض ادب
    توی برنامه زیر (که مربوط به گیرنده کد لرنه) من یه متغییر (H) تعریف کردم که وقتی کلید key فشرده شده و برنامه رفته توی حال ثبت ریموت بعد از یه مدتی اتوماتیک بیاد بیرون
    ولی در عمل زمان خروج از این حالت بسیار عجیب و متفاوته.بنظرتون مشکل از کجاست
    ببخشید من فرصت نکردم برنامه ات رو نگاه کنم!
    فقط خواستم بگم که از تنظیم فیوز بیتهای مربوط به کلاک میکروت مطمئن بشی، که روی همون مقداری که انتظار داری تنظیم شده باشه!
    ◙◙◙◙◙ میخوام به دوستان یه کتاب معرفی کنم! وقت کردید، بخونید - اسمش هست قرآن، سال نشر 10، نویسنده: خدا . ◙◙◙◙◙

    دیدگاه


      #3
      پاسخ : تایمر خروج Bascom

      روی 4 مگ خارجی تنظیم شده و بعضی اوقات درست عمل میکنه

      دیدگاه

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