Hi,
um welchen Controller gehts denn? 18F und 16F haben unterschiedliche Befehlssaetze.
Ich will damit eig. nur eine Delay Schleife basteln.
Das beste ist, einen Timer zu verwenden. Damit schafft man genaue Schleifen und der Controller kann in der Zwischenzeit noch was vernuenfiges tun.
Prinzipiell sollte deine Schleife so aussehen:
clrf countl ;bei null anfangen
warten
; Hier ggf noch paar nop einfuegen
incf countl, f ; das ",f" nicht vergessen!!
bnz warten ; test auf ZERO Flag, ggf Sprung
Beispiel für die Befehle Branch if Carry/Negative/Oberflow
Prinzipiell sind dafuer die Befehle
bnz, bz, bc, etc. gedacht, alternativ geht auch
btfss STATUS, X und
btfsc STATUS, X mit nachfolgendem
goto. X steht stellvertretend hier fuer ZERO, CARRY, OVERFLOW Flag. Im Datenblatt ist der Befehlssatz auch nochmals erklaert.
Sonst hilft
www.sprut.de immer weiter:
http://www.sprut.de/electronic/pic/assemble/befehle.htmlhttp://www.sprut.de/electronic/pic/programm/index.htmNoch eine Anmerkung zu
incf countl, f:
Du hast das
,f vergessen. In deinem Falle ist das nicht schlimm gewesen, da defaultmaessig immer das Register selbst Ziel der Operation ist. Sprich inkrementiere
countl um eins und speichere den Wert in
countl, wohingegen
incf countl, w beduetet: Inkrementiere um eins und speichere das Ergebnis im Arbeitsregister W.
countl wird dabei nicht veraendert.
Gruss,
Stefan