
Zitat von
Accenter
Wie schalte ich das einrücken ein? Habe nichts bewusst abgeschalten, sorry.
Kannst du unter Options -> Environment -> Editor und dort Autoindent einschalten.

Zitat von
Accenter
Ich hab mit pushall und popall viel experimentiert. hatte das schon überall stehen. Daran lag es scheinbar nicht. irgendwo hab ich glesen, dass zwischen pushall und popall in keine Subroutinen gesprungen werden sollte, drum hab ich das dann so geändert. daran lags aber auch nicht.
Dann nimm doch mal die ganzen Auswertebefehle aus der Sub raus.
Code:
'------------------------------------------------------------------------------------------'
'-------------------------- Hauptschleife ----------------------------------------------'
'------------------------------------------------------------------------------------------'
Do
'Touchdisplayauswertung usw.'
Gosub Uhrzeitlesen
Reset Watchdog
If Received_flag = 1 Then
Received_flag = 0
Waitms 50
Reset Watchdog
Print #2 , "Eingabe durch Benutzer : " ; Empfang2 : Gosub Waitingtime
Print #2 , "" : Gosub Waitingtime
Gosub Loginauswertung
Clear Serialin1
Enable Int1
Empfang2 = ""
End If
Loop
'------------------------------------------------------------------------------------------'
'-------------------------- Sub Schleifen ----------------------------------------------'
'------------------------------------------------------------------------------------------'
Serial1charmatch: 'Datenempfang Von UART2 Putty Terminal iPhone von Unterwegs'
Pushall
Disable Int1
Reset Watchdog
Input #2 , Empfang2 Noecho 'Wenn über den UART was empfangen wird springt das Programm hier her über den Interrupt'
Received_flag = 1
Popall
Return
Declare Sub Serial1charmatch()
kannst du dann übrigens weglassen und dann die Sub so schreiben wie oben.
Brauchst du eigentlich die ganzen Wartezeiten?
Warum benutzt du so viele :? Musst du Zeilen sparen?
Uhrzeitschreiben: 'Schreibe zeit und Datum in den DS1307'
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) : _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart : I2cwbyte Ds1307w : I2cwbyte 0 : I2cwbyte _sec : I2cwbyte _min : I2cwbyte _hour : I2cstop : I2cstart : I2cwbyte Ds1307w
I2cwbyte 3 : I2cwbyte _weekday : I2cwbyte _day : I2cwbyte _month : I2cwbyte _year : I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) : _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
ich finde dies viel leichter zu lesen
Code:
Uhrzeitschreiben: 'Schreibe zeit und Datum in den DS1307'
_sec = Makebcd(_sec)
_min = Makebcd(_min)
_hour = Makebcd(_hour)
_day = Makebcd(_day)
_month = Makebcd(_month)
_year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
I2cstart
I2cwbyte Ds1307w
I2cwbyte 3
I2cwbyte _weekday
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
_sec = Makedec(_sec)
_min = Makedec(_min)
_hour = Makedec(_hour)
_day = Makedec(_day)
_month = Makedec(_month)
_year = Makedec(_year)
Return

Zitat von
Accenter
Wenn ich eine zu lange Zeichenkette schicke hab ich sofort eine Watchdogauslösung. Sende ich nichts kommt es unvorhersehbar in unterschiedlichen zeitabständen zu Abstürzen.
Ein Watchdog ist ja kein Absturz, sondern eine vorgegebene Aktion im Falle einer Zeitüberschreitung.
Dein Watchdog steht auf 2048. D.h. wenn 2000ms kein Reset Watchdog kommt, resettet der µC. Schau dir mal die Länge deiner Auswertung, speziell die Lofile Routine. Die braucht doch bestimmt länger als 2s zur Ausführung.
Wo sind eigentlich die ganzen Dims und die fehlenden Deklarationen wie Spannungsmessung2?

Zitat von
Richard
Pop und push gehören immer als erster und letzter Befehl in einen
IRQ und auch nur in einer IRQ. Basic verwendet selber etliche
Register für seine Befehle man sollte daran denken...
Serial1CharMatch ist keine IRQ, aber er hat schon recht, so steht es in der Hilfe zu Config Serialin.
Lesezeichen