meine aufgabe ist es ein led(in diesem fall PORTB, 0) mit einer
bestimmten herz zahl zum blinken zu bringen.
dazu haben ich mir einfach ein delay code von
http://www.piclist.com/techref/piclist/codegen/delay.htm machen lassen,
da meine erfahrung noch nicht gros genug ist einen eigen zu erstellen
jetzt ist mein problem, dass er leider haengen bleibt in dem delay und
es eigentlich gehen sollte.
ich weis das er irgendwann um
1
movlw0x06
2
movwfd3
haengen bleibt und ich weis nicht warum
koennte mir bitte jemand helfen
mfg necro
irgendwie haengen bleibt und ich weis nicht warum, denn laut Datenblatt
ist das ein zulaessiger Command.
Ich bin am verweifen und bitte um Hilfe.
MFG Necro
>meine aufgabe ist es es [...]
Gut.
>dazu haben ich mir einfach ein delay code von>http://www.piclist.com/techref/piclist/codegen/delay.htm machen lassen,>da meine erfahrung noch nicht gros genug ist einen eigen zu erstellen
Wieso nicht? Nicht aufgepasst? Wenn du keine Ahnung, dann verschaff dir
welche.
>Ich habe herrausgefunden, dass er bei>> decfsz d1, f>>irgendwie haengen bleibt und ich weis nicht warum,
Und wie hast du das herausgefunden? Dass das Prgogramm an der Stelle
"hängen bleibt", kann ich nicht nachvollziehen.
> Wieso nicht? Nicht aufgepasst? Wenn du keine Ahnung, dann verschaff dir> welche.
Ich wurde einfach vor das Teil gesetzt ohne das man mir was erklaert hat
bis auf wie ich bits pruefe und setze.
>>Ich habe herrausgefunden, dass er bei>>>> decfsz d1, f>>>>irgendwie haengen bleibt und ich weis nicht warum,>> Und wie hast du das herausgefunden? Dass das Prgogramm an der Stelle> "hängen bleibt", kann ich nicht nachvollziehen.
Der Befehl meint ja, dass er wenn in dem fall d1 0 ist springen soll.
Nur leider springt er bei mir nicht auch wenn ich d1 auf 0(oder 1 fuer
den Fall wenn er erst decrementiert und dann prueft)
Somit macht das Programm immer wieder den Call der wieder vor das decfsz
springt.
Leider habe ich entweder diesen Befehl nicht verstanden(auch nachdem ich
ein ausfuehrliches Manual gelesen hab) oder er funktioniert nicht in
dieser weise.
MFG Necro
tastendrücker wrote:
> Die Anweisung decfsz 'springt' nicht, sie 'überspringt' (skipt) die> nächste Anweisung, wenn (in deinem Fall) d1=0 ist. Hier mal ein paar> Kommentare:>>> UP_wait05s> ;2499992 cycles> movlw 0x15 ; Zählschleife laden> movwf d1> movlw 0x74> movwf d2> movlw 0x06> movwf d3> UP_wait05s_0 ; Zählschleife ausführen.> decfsz d1, f ; d1=d1-1 , d1=0?> goto $+2 ; nein d1!=0 -> goto ausführen> decfsz d2, f ; ja d1=0 -> d2=d2-1 , d2=0?> goto $+2 ; nein d2!=0 -> goto ausführen> decfsz d3, f ; ja d2=0 -> d3=d3-1 , d3=0?> goto UP_wait05s_0 ; nein d3!=0 -> goto ausführen>>> Bedenke, dass die Anweisung 'decfsz d1, f' hier einige tausendmal(!) bei> jedem 'CALL UP_wait05s' ausgeführt wird!.
Das mit dem Springen unde dem Ueberspringen war mir klar, dass er dann
halt nicht die naechste Operation sondern die uebernaechste ausgefuehrt
wird.
Die Delay-Schleife hab ich vorher auch schon verstanden nach dem ich es
mir etwas genauer angeschaut habe. Tortzdem danke fuer die Erklaerung
Ich habe es jetzt hin bekommen in dem ich es in einem extra
Unterprogramm aufrufe. Was da jetzt den unterschied macht hab ich aber
nicht wirklich verstanden.
Vielen Dank Necro