- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: probleme in assembler

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2005
    Beiträge
    29

    probleme in assembler

    Anzeige

    LiFePo4 Akku selber bauen - Video
    hallo zusammen,
    ich hätte da mal ne frage. und zwar bin ich grad dabei mir das programmieren von pics in assembler an zu lernen. dazu lese ich mich grad fleißig durch sprut.de.

    aber ich versteh da eins noch nicht so ganz. letzendlich kann man da ja eigentlich nur einzelne bits verschieben. aber wie kann ich jetzt so ne art if-Abfrage machen?
    ich hab da so ne idee im kopf, ich will an einen pin einen taster anschließen und an drei andere pins ein paar leds. jetzt will ich mit hilfe des tasters die led's durchschalten. da dachte ich jetzt, dass wenn der taster gedrückt wird in eine speicherzelle eine 1 geschrieben wird. wird er nochmal gedrückt soll die speicherzelle um 1 inkrementiert werden. aber jetzt muss ich doch 1. eine abrage wie "if (speicherzelle=2) then" machen können und 2. wenn der wert gleich 3 ist wieder bei 0 anfangen können. aber das würde ja auch mit so einer if-abfrage gehen. könnt ihr mir bitte erklären, wie ich sowas in assembler machen kann.

    und dann hab ich da noch eine frage. ich will nämlich nicht nur eine led pro pin anschließen sondern ein paar. aber wie mach ich das? der pin kann doch nur bis 20mA oder so belastet werden, oder? ich hab mal was gehört, das müsste ich mit nem relais oder so machen. aber wie geht das genau.

    vielen dank für jede antwort im vorraus.


    mfg Simon

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    03.09.2004
    Ort
    Hamburg
    Alter
    44
    Beiträge
    37
    Das mit den Led's würd ich mit einem Transistor machen, ist aber bei Sprut auch erklärt. Zum Thema ASM:

    BTFSC oder BTFSS sind da deine Befehle. Dahinter ein Sprung mit goto sollte am einfachsten sein. Lese Dir da bei Sprut die Erklärung durch.

    BSP (auf die schnelle)
    Code:
    BTFSS PORTB , 0
               GOTO Sprung1
    GOTO Sprung2
    
    Sprung2  ;Rücksprung und weiter im Hauptprogramm
    ....
    ....
    ....
    
    Sprung1 ;wenn der PORT B 0 eins ist
    ...
    ...
    GOTO Sprung2
    Zwar nicht die beste Lösung, aber für den Anfang reichts wohl.

    So long...

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2005
    Beiträge
    29
    ok. danke. falls doch noch ne frage kommt, kann ich's ja nochmal hier reinschreiben.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2005
    Beiträge
    29
    tja, jetzt hab ich doch noch mal ne frage. ich hab jetzt mit mplab den folgenden code geschrieben:

    Code:
        list p=16f628               
        include "p16f628.inc"       
        org    0x00                 
        goto   main                 
        org    0x04               
    
    
    main 
    
    ; Zuordnung der 2 Speicherzellen
    	sp2 Equ 0x10
    	sp3 Equ 0x11
    
    ; RB5,RB6,RB7 auf Ausgang setzten
    	bsf     STATUS, RP0     ; auf Bank 1 umschalten 
    	movlw   B'11111000'     ; RB5,RB6,RB7 auf Ausgang setzten (erst nur in W)
    	movwf   TRISB           ; Verschieben von W nach Speicherzelle TRISB
    	bcf     STATUS, RP0     ; auf Bank 0 schalten 
    	clrf    PORTB           ; alle LEDs ausschalten
    
    ; LED1 einschalten
    	bsf     PORTB,5         ; LED1 an RB5 einschalten
    
    Abfrage
    	btfss   PORTB,0         ; Überspringe nächsten Befehl, wenn RB0 high
    	goto    Abfrage         ; Zurück zur Marke Abfrage
    
    ; Taster wurde gedrückt
    	btfsc   sp2,0           ; Wenn sp2=0 dann übergehe den nächsten Befehl
    	goto    LED2            ; Weiter zur Marke LED2
    
    	btfsc   sp3,0           ; Wenn sp3=0 dann übergehe den nächsten Befehl
    	goto    LED3            ; Weiter zur Marke LED3
    
    	goto    LED1            ; Wenn weder sp2=0 noch sp3=0 dann weiter zur Marke LED1
    
    LED2
    	bcf     PORTB,5         ; LED1 an RB5 ausschalten
    	bsf     PORTB,6         ; LED2 an RB6 einschalten
        bcf     sp2,0           ; sp2 auf 0 setzen
        bsf     sp3,0           ; sp3 auf 1 setzen
        goto    Abfrage         ; Zurück zur Marke Abfrage
    
    LED3
    	bcf     PORTB,6         ; LED2 an RB6 ausschalten
    	bsf     PORTB,7         ; LED3 an RB7 einschalten
        bcf     sp3,0           ; sp3 auf 0 setzen
        goto    Abfrage         ; Zurück zur Marke Abfrage
    
    LED1
    	bcf     PORTB,7         ; LED3 an RB7 ausschalten
    	bsf     PORTB,5         ; LED1 an RB5 einschalten
        bsf     sp2,0           ; sp2 auf 1 setzen
        goto    Abfrage         ; Zurück zur Marke Abfrage
    
    end
    wenn ich den jetzt assemblieren will, kommt immer die folgende fehlermeldung, die ich leider nicht ganz verstehe.
    Code:
    Make: The target "C:\Eigene Dateien\Pics\Assembler Programme\LED-Durchschaltung\LED-Durchschaltung.o" is out of date.
    Executing: "C:\Programme\Microchip\MPASM Suite\MPAsmWin.exe" /q /p18F452 "LED-Durchschaltung.asm" /l"LED-Durchschaltung.lst" /e"LED-Durchschaltung.err"
    Warning[215] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 1 : Processor superseded by command line.  Verify processor symbol.
    Message[301] C:\PROGRAMME\MICROCHIP\MPASM SUITE\P16F628.INC 35 : MESSAGE: (Processor-header file mismatch.  Verify selected processor.)
    Warning[207] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 11 : Found label after column 1. (sp2)
    Warning[207] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 12 : Found label after column 1. (sp3)
    Warning[205] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 56 : Found directive in column 1. (end)
    Error[173]   C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 57 : Source file path exceeds 62 characters (C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM)
    Halting build on first failure as requested.
    BUILD FAILED: Thu Jun 09 21:18:58 2005
    könnt ihr mir vielleicht sagen, was ich falsch gemacht hab?

    mfg simon

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    03.09.2004
    Ort
    Hamburg
    Alter
    44
    Beiträge
    37
    Error[173] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 57 : Source file path exceeds 62 characters (C:\EIGENE DATEIEN\PICS\ASSEMBLER
    Steht da doch. SourceFile Pfad länger als 62 Zeichen. [-X
    mach mal einen Ordner unter C:\PIc oder so!

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    68
    Beiträge
    531
    Hallo,

    Make: The target "C:\Eigene Dateien\Pics\Assembler Programme\LED-Durchschaltung\LED-Durchschaltung.o" is out of date.
    weiss nicht mehr, ist mir auch mal passiert, zuerst mal andere sachen losen

    Warning[215] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 1 : Processor superseded by command line. Verify processor symbol.
    Message[301] C:\PROGRAMME\MICROCHIP\MPASM SUITE\P16F628.INC 35 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
    Im program sollte irgendwo stehen (16F84 = beispiel)
    PROCESSOR 16F84
    Im MPLAB menu 'Configure | Select Device' muss die gleiche processor gewahlt sein

    Warning[207] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 11 : Found label after column 1. (sp2)
    Warning[207] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 12 : Found label after column 1. (sp3)
    ein label soll ganz links stehen (1e kolom)
    da wird vielleicht ein unbekantes assembler code in kolom 2 gefunden und wird dann als ein (falsches) label interpretiert

    Error[173] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 57 : Source file path exceeds 62 characters (C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM)
    da hat TomHumpen schon geantwortet:
    dass complete 'path'
    C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM
    von deinem datei ist grosser als 62 karakters
    dass ist so eine MPLAB einschrankung.

    Da sind 4 losungen:
    1. die datei in einen anderen folder plazieren
    2. die namen der folders einschranken
    3. die datei folder als netzwerk folder teilen z.B. als 'X:\\' damit steht die datei in 'drive' X:\\
    4. im einem DOS batch file einstellen (und ausfuhren):
    SUBST X: C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG
    damit wird dasselbe erreicht wie im punkt 3 ist aber altmodisch aber functioniert meiner meinung nach besser/einfacher

    hoffe schon einige fehler sind damit erledigt,

    gruss

    Henk

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2005
    Beiträge
    29
    auf das mit den 62 Zeichen bin ich auch noch gekommen. aber den rest hatte ich halt nicht kapiert. also dann danke.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    03.09.2004
    Ort
    Hamburg
    Alter
    44
    Beiträge
    37
    Naja, der Rest waren auch nur warnings, deshalb war dein Programm ja nicht falsch. Also weiter viel Erfolg.

    So long...

Berechtigungen

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

LiFePO4 Speicher Test