Ich hatte genau dieses Problem, dass der Port gelegentlich auf high blieb. Habe mir dann wie im Codebeispiel zu sehen geholfen. Ist sicher nich die feine englische Art aber es läuft perfekt. Es wäre für mich ziemlich wichtig das waitus in einer Variablen zu haben damit ich die Wartezeit zwischen den Bits bei unterschiedlichen Fernbedienungen im Programm ändern kann. Leider klappt das bisher nur mit einer Konstante. Habe gelesen, bei einem schnelleren Quarztakt ist es auch mit einer Variablen möglich. Teste ich noch, bin aber auch für jeden anderen Tipp dankbar.
Hier der abgeänderte Code:
Code:$regfile = "m8def.dat" $crystal = 8000000 $hwstack = 200 $swstack = 200 $framesize = 200 Config Portb.1 = Output Irled Alias Portb.1 Dim Pwmwert As Word Dim L As Byte Dim H As Byte Dim Code1 As String * 120 , Stellenzaehler As Byte , Bitwert_str As String * 1 , A As Byte L = 0 H = 1 Config Timer1 = Timer , Prescale = 1 , Compare A = Disconnect , Clear Timer = 1 Pwmwert = 110 Compare1a = Pwmwert Const Bitlaenge = 600 Do Wait 2 Gosub Sendecodeklimaanlage Loop Sendecodeklimaanlage: Code1 = "1111111111111110000000101010101010010101001001001001001010010010100101010101010100101001001001001001001" Gosub Auswertung Return Auswertung: Stellenzaehler = Len(code1) For A = 1 To Stellenzaehler Bitwert_str = Mid(code1 , A , 1) Select Case Bitwert_str Case "1" Gosub Sendehigh Case "0" Gosub Sendelow End Select Next A Return Sendehigh: Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1 Start Timer1 Waitus Bitlaenge Stop Timer1 Config Timer1 = Timer , Prescale = 1 , Compare A = Disconnect , Clear Timer = 1 Return Sendelow: Waitus Bitlaenge Return End







Zitieren

Lesezeichen