Hallo zusammen und frohes neues Jahr!
Wer kann mir mal helfen?
Ich habe in meinem Programm zwei Interrupotrotinen.
In der einen wird bei einer Abfrage über einen RS485 Bus ein Interrupt ausgelöst der den Status meines Steuermoduls überträgt.
Gleichzeitig senden das Modul von sich aus bei bestimmten Schaltvorgängen etwas auf den Bus.
Dies hat bisher auch immer funktioniert.
Da in dem Modul aber Zeiten verwendet werden, habe ich einen Timer eingesetzt der ebenfalls Interrupts auslöst.
Irgentwie beeinflussen sich die beiden jetzt so, dass der 485 Interrupt weder bei einer Abfrage noch bei einem einfachen Sendevorgang etwas macht.
Woran liegt das?
Hier die relevanten Codeausschnitte:
Code:On Timer0 Ontimer0 'Timer Interrupt Config Timer0 = Timer , Prescale = 1024 Enable Timer0 Enable Interrupts On Urxc Onrxd 'Interrupt RS485 Enable Urxc Enable Interrupts '---------- Programm -------- Prog_start: Do '.... '.... Loop End '---------- Interrupt RS485 -------- Onrxd: Disable Interrupts Incr N B(n) = Udr If N > 9 Then Preamble = B(1) : Sync = B(2) : Hdb2 = B(3) Hdb1 = B(4) : Dab1 = B(5) Sab1 = B(6) Db1 = B(7) Db2 = B(8) Crc2 = B(9) Crc1 = B(10) N = 0 Gosub Pruefung Else End If Return '---------- Senden -------- Uebertragung: Portb.5 = 1 Disable Urxc Disable Interrupts Portd.2 = 1 : Waitms 20 'RS485 PIN auf Senden Print Chr(preamble_) ; Chr(sync_) ; Print Chr(hdb2_) ; Chr(hdb1_) ; Print Chr(dab1_) ; Chr(myadress); Print Chr(db1_) ; Chr(db2); Print Chr(crc2) ; Chr(aktion) ; Do Loop Until Ucsra.txc = 1 Reset Ucsra.txc Waitms 10 : Portd.2 = 0 'RS485 PIN auf Enpfang Enable Urxc Enable Interrupts Aktion = "" Sz = 0 Portb.5 = 0 N = 0 Goto Prog_start End '---------- Timer ----------- Ontimer0: Rtime = Rtime + 1 ' variable wird bei jedem Interrupt um 1 erhöht Gosub Minutenzaehler Return '---------- Minutenzähler ----------- Minutenzaehler: If Rtime = 1700 Then ' Teilungsfaktor bei 7372800 Hz und Prescale um auf 1 Minute zu kommen Minute = Minute + 1 Rtime = 0 Else End If Return







Zitieren

Lesezeichen