PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche PIC Befehl



HoStAn
02.09.2006, 16:11
Ich bin auf der Suche nach einem PIC Befehl, ich hoffe es gibt so einen.

Es wird ein analoger Wert in den AD-Wandler eingelesen. Dieser Wert soll dann durch eine Abfrage herausgefunden werden. Da dieser Wert zwischen 0 und 20 liegen kann, möchte ich wissen, ob der Wert zwischen 0 und 10 oder zwischen 11 und 20 liegt. Wie kann ich das am besten machen? Es soll also nachgefragt werden, ob der Wert <=10 ist und >=11

Wenn der Wert zwischen 0 und 10 liegt, soll eine LED leuchten. Liegt er zwischen 11 und 20, sollen zwei LED’s leuchten.

Danke für eure Hilfe

Benedikt.Seidl
02.09.2006, 16:34
hallo

eine lösung zum "copy and paste" kann ich dir leider nicht bieten (ich habe es schon versucht, aber da bin ich mir zu unsicher,...), aber schau dir mal das bit Z und das bit C im STATUS register an.

dann kannst du es nämlich so machen: die ziehst z.b. 10 von deinem ad wandler wert ab. wenn der ad wandler wert 10 war, ist das Z bit gesetzt (wird immer gesetzt wenn beim addieren oder subtrahieren 0 rauskommt). und wenn beim abziehen was negatives raus kommen würde, ist das C bit gesetzt, glaube ich :-P

aber ich denke wenn du noch ein bisschen geduld hast, zeigt dir jemand evtl. ein stückchen code ;-)

SEIDL.

PICture
02.09.2006, 18:45
Hallo HoStAn!

Was für ein PIC (aus der 12F, 16F oder 18F Familie) und welche Programmiersprache (ASM, C, oder BASIC) benutzst Du ?

MfG

kalledom
02.09.2006, 18:47
Vom AD-Wert 10 subtrahieren und entsprechend dem Carry verzweigen. Einen Compare-Befehl kennt der PIC nicht, nur SUB.

....
movfw zSek
sublw 59 ; zSek > 59 ?
skip_NC ; ... ja
return

clrf zSek ; Sekunden = 0
incf zMin ; Minuten + 1
movfw zMin
sublw 59 ; zMin > 59 ?
skip_NC ; ... ja
return
....
; C wird nur bei ADD, SUB, RLF und RRF veraendert
; ACHTUNG !!! Bei SUB ist C und DC invertiert !!!
; Berechnung: F/L minus W bzw. F/L plus 2cpl-W
; Wenn W > L/F dann Carry=0
; Wenn W <= L/F dann Carry=1

HoStAn
02.09.2006, 18:54
der PIC kommt aus der 16F Familie und wird in Assembler programmiert

PICture
02.09.2006, 20:57
Hallo HoStAn!

So wie der kalledom schon erwähnt hat es gibt bei PIC16F Familie kein Befehl der zwei Werte vergleicht und daran reagiert.

Weil Du zwei Bedinungen hast, muss man auch zwei Vergleiche machen:

Beipielweise Wert <=10h und danach Wert >=11:

movlw 0x10
movwf Temp
movf Wert,0
subwf Temp
btfsc STATUS,C
goto Kleiner (oder gleich 10h)
movlw Wert,0
movwf Temp
movlw 0x11
sublw Temp
btfss STATUS,C
goto Grösser (oder gleich 11h)
return

MfG

kalledom
02.09.2006, 21:38
der PIC kommt aus der 16F Familie und wird in Assembler programmiert Was hat der PIC-Typ mit der Programmiersprache zu tun ?
Du kannst jeden beliebigen PIC-Typ in Assembler, C, Basic, .... programmieren. Außer beim Assembler haben alle 'Hochsprachen' eines gemeinsam: nach dem Complieren ensteht ein Assembler-File, aus dem eine Hex-Datei mit dem Maschinen-Code zum Programmieren des PIC erstellt wird. Das gilt für (fast) alle µC.

Pitt1986
07.09.2006, 09:07
Was hat der PIC-Typ mit der Programmiersprache zu tun ?

einiges würde ich mal sagen. die 18er verstehen die befehle cpfseq, cpfslt und cpfsgt, die anderen nicht.
und auf die programmiersprache kommts ja auch an, wenn jemand ein bestimmten befehl sucht, oder?

mfg
pitt

kalledom
07.09.2006, 15:18
@Pitt1986
Ob der eine µC bestimmte Befehle versteht und der andere nicht, hat doch nichts mit der Programmiersprache zu tun.
Mnemoniks wie mov, goto, usw. können nur dann im Assembler-Programm angewandt werden, wenn sie beim Assemblieren auch aktzeptiert werden. Ansonsten kommt eine Fehlermeldung und es wird keine HEX-Datei (OBJ-Datei) erzeugt. Deshalb muß in jedem ASM-Programm angegeben sein, für welchen Typ es geschrieben wird. Nur dadurch werden die unterschiedlichen Strukturen und Befehle berücksichtigt.
Bei C, Basic oder anderen Hochsprachen hat man so gut wie überhaupt nichts mit Mnemoniks zu tun. Auch hier wird der µC-Typ angegeben; entweder werden dann bestimmte Befehle angewendet oder nicht.
Der C- oder Basic-Compiler erstellt aus den Befehlszeilen ein Assembler-Listing, das den gleichen Regeln unterliegt, wie das Assembler-Programm.
Beim Assemblieren und Linken entsteht die Maschinensprache, also die Bytes, die kein Mensch mehr versteht, die der µC jedoch treu und brav ausführt.