-
        

Ergebnis 1 bis 9 von 9

Thema: Suche PIC Befehl

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    27.08.2006
    Beiträge
    53

    Suche PIC Befehl

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2005
    Beiträge
    195
    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.

  3. #3
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Hallo HoStAn!

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

    MfG

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    Vom AD-Wert 10 subtrahieren und entsprechend dem Carry verzweigen. Einen Compare-Befehl kennt der PIC nicht, nur SUB.
    Code:
    ....
    	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
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    27.08.2006
    Beiträge
    53
    der PIC kommt aus der 16F Familie und wird in Assembler programmiert

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    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

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    Zitat Zitat von HoStAn
    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.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.07.2005
    Beiträge
    170
    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

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    @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.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •