Branch if ....
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Programmiersprache Assembler  |  Branch if .... « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Branch if ....  (Gelesen 638 mal)
 
diving_deep
Gast
« am: Dezember 28, 2010, 18:59:27 »

Hi,
ich bin neu in Assembler (bisscher nur höhere Sprachen) und nach 2 Stunden suche hab ichs jetzt aufgegeben und dachte ich frag einfach mal Smiley

Ich suche nach einem Beispiel für die Befehle Branch if Carry/Negative/Oberflow ... usw. Mit den Angaben im Datenblatt kann ich leider nicht allzuviel anfangen.

Ich will damit eig. nur eine Delay Schleife basteln. In der Art:

Code:
  warten:
 
  incf countl ; count1++ -> LATB
  bc  1
  goto warten
  clrf countl
 
  end

thx a lot!
Alex
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #1 am: Dezember 29, 2010, 01:40:17 »

Hi,

um welchen Controller gehts denn? 18F und 16F haben unterschiedliche Befehlssaetze.
Zitat
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:

Code:
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

Zitat
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.html
http://www.sprut.de/electronic/pic/programm/index.htm

Noch 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
Gespeichert

Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.034 Sekunden mit 17 Zugriffen.
 
Top! Top!