با سلام و عرض ادب
توی برنامه زیر (که مربوط به گیرنده کد لرنه) من یه متغییر (H) تعریف کردم که وقتی کلید key فشرده شده و برنامه رفته توی حال ثبت ریموت بعد از یه مدتی اتوماتیک بیاد بیرون
ولی در عمل زمان خروج از این حالت بسیار عجیب و متفاوته.بنظرتون مشکل از کجاست
توی برنامه زیر (که مربوط به گیرنده کد لرنه) من یه متغییر (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
دیدگاه