- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Erster Versuch in Assembler zu programmieren

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    04.02.2006
    Ort
    Dinslaken
    Beiträge
    53

    Erster Versuch in Assembler zu programmieren

    Anzeige

    Praxistest und DIY Projekte
    Hallo
    ich habe mir dieses wochenende nichts anderes vorgenommen als ein eigenes
    Programm in Assembler zu schreiben.Die Seite von Sprut hab ich mir Ausgedruckt und vor 2 Wochen angefangen zu lesen.Jetzt bin ich schon seit Samstag Morgen dabei zu programmieren.Mein Problem ist das beim assemblieren der ASM Datei Mpasmwin ein fenster öffnet in dem steht "DOS ERROR File Not Found"
    Macht es eigentlich einen Unterschied ob ich die Include Datei oben ins programm einfüge oder ob ich den #include <P16F627.INC> Befehl nehme?
    Das Programm soll 6 Leds mit 2 Schaltstellungen blinken lassen (ich habe ein vellemann Testboard von meiner arbeit übers wochenende ausgeliehen)

    Danke schon im vorraus

    mfg Smokey
    Angehängte Dateien Angehängte Dateien

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    08.08.2005
    Ort
    RP, Westerwald
    Beiträge
    50
    Hi,
    in was für eine Dateiebene liegt die .asm Datei?
    Leg sie Direkt auf C:\ oder D:\ und versuch es noch mal.
    Darf nicht in einer zu tiefen Ebene liegen und der Dateiname darf maximal 8 Zeichen lang sein! (DOS)

    Hab mir Dein Programm aber noch nicht angeschaut.
    Versuchs erst mal wie oben.

    Gruß David

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    04.02.2006
    Ort
    Dinslaken
    Beiträge
    53
    Hi ich habe jetzt die ASM Dateien direkt auf C: gelegt und die Dateinamen
    auf weniger als 8 Zeichen gekürzt jedoch zeigt mir MPASM immer noch 6 Errors an. Diese kann ich ich mir aber nicht erklären weil ich für den Anfang den programmkopf des anfangs des Vellemann Demo1 programmes verwendet habe(das ist ein beispielprogramm von meinem programmier board) .Im programmkopf sind Resetroutine und Delayroutine inbegriffen.Das einzigste was ich dazu geschrieben habe ist der Effect.
    Bei Sprut habe ich gelesen das die list datei bei einer Fehlersuche hilfreich sein kann was kann man den damit machen?

    mfg Smokey

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Hallo Smokey,
    schau dir mal folgendes Assembler-Beispiel-Programm an, da ist eine richtige Initialisierung am Anfang: http://www.domnick-elektronik.de/picasm.htm

    PS: wenn es dann noch nicht klappt, kopiere die Datei P16F627.INC mit in das aktuelle Programm-/ASM-Verzeichnis.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    04.02.2006
    Ort
    Dinslaken
    Beiträge
    53
    Den tipp mit der include Datei habe ich schon ausprobiert. Ich habe jetzt die list Datei mit Mplap geöffnet er zeigt mir dort folgende Errors an:


    Warning[209]: Missing quote
    Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
    Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
    Error[113] : Symbol not previously defined (TIMER2)
    Error[113] : Symbol not previously defined (TIMER1)
    Error[113] : Symbol not previously defined (TIMER1)
    Error[113] : Symbol not previously defined (TIMER2)
    Error[113] : Symbol not previously defined (DELAY)
    Error[113] : Symbol not previously defined (ROUTINE)


    Kann mir jemand sagen was das zu bedeuten hat. Hat das mit der Include Datei zu tun das der pic nicht genau weiß wo sich die Timer befinden?

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    01.03.2006
    Beiträge
    11
    Hi, die Zeilen mit "Message..." kannst du getrost ignorieren, das ist nur eine Aufforderung, das Umschalten der Bank zu überprüfen.
    Bei den anderen zeilen fehlt im Setup des MPLAB eine Datei, evtl eine **.lst oder **.inc .
    Ich hatte auch lange zeit Probleme, ehe ich MPLAB korrekt initialisiert hatte und das Projekt korrekt assembliert/deassemliert wurde...

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    01.03.2006
    Beiträge
    11
    Nachtrag: Hab in die asm-Datei geschaut:
    1.:schreibst du einmal Delay-Routine und einmal Delay_Routine, aufpassen!
    2.:scheint es keine Register Timer1 und Timer2 zu geben. Wenn es selbstdefinierte Sachen sind,
    dann bitte mit angeben: equ timer1 0x20. (0x20 ist dann die adresse, wo die Variable gespeichert wird).
    Sollen es Register im PIC sein, dann nochmal im Datenblatt die Schreibweise prüfen..

    Ich hoffe, ich habe alles richtig verstanden und dich nicht mit offensichtlichem genervt..

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Zitat Zitat von Semmelchen
    Sollen es Register im PIC sein, dann nochmal im Datenblatt die Schreibweise prüfen..
    oder in die Datei P16F627.INC reischauen, da steht alles drin, was dieser PIC so hat.
    • errorlevel 1 ; Meldungen ignorieren
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  9. #9
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo Smokey!

    Ich habe Dein Programm angeschaut und korriegiert. Ich hoffe das es jetzt mit der Assemblierung klappt. Die Fehlerhafte Zeilen habe ich mit "<<<...<<<" gezeichnet. Du musst aber vorher noch die Adressen der Speicherstellen Timer1 und Timer2 definieren (z.B. 0x20, 0x21).

    MfG
    Code:
     ;**************** ********************************************************************
          ;                            * Erster Assembler Versuch *
          ;***********************************************************************************
    
    
           list P=16F627             ;Das ist die Bezeichnung des Pics den ich programmieren moechte
           #include <P16F627.INC>    ;Das ist die Include Datei in der die Adressen der Aliasnamen stehen 
    
           ;Bsp: TRISA         EQU     H'0085 
           ;     TRIB          EQU     H'0086'
           ;     STATUS        EQU     H'0003'
    
    TIMER1 	EQU	0x20	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    TIMER2	EQU	0x21 	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
         ;========================================================================================
         ;                                   Programmanfang
         ;========================================================================================  
    
           ORG     0                ;Das ist die startadresse nach dem Reset hier Startet der pic nach dem Einschalten
       ;
           goto   RESET             ;Hier springt der pic zur Reset routine(Label)
    
    
    
          ;=======================================================================================
          ;                                   RESET (BOOT VORGANG)
          ;=======================================================================================
    
    RESET
       
    
    
          BSF     STATUS,RP0        ;Setzt im Status Register RP0 auf "1" und wechselt so auf Specherbank 1 um dort verschiedene 
      ;   Optionen einzustellen 
    
          MOVLW B'11
    
    
          MOVLW   B'11111111'       ;Kopiert den wert"255" in das Arbeitsregister(W) um spaeter damit PortA als Eingaenge zu definieren
      ;
          MOVWF   TRISA             ;Jetzt sind RA0 bis RA3 Eingaenge(Die 4 Taster auf dem Vellemann Board)
      ;
          CLRW                      ;In das Arbeitsregister W wird eine "0" geschrieben
      ;
          MOVLW   B'00000000'       ;Kopiere den wert"0" in das Arbeitsregister
      ;
          MOVWF   TRISB             ;RB0 bis RB7 sind als Ausgaenge definiert(RB0-RB5=LED1-LED6)
       
      ;
          CLRF    INTCON            ;Ausschalten der Interrupt Funktion (Disable Interrupt)
    
          BCF   STATUS,RP0          ;kehrt wieder zu Bank 1 zurück(Die benötigten Optionen wurden programmiert)
    
         ;========================================================================================
         ;                                  DELAY ROUTINE (Zeitschleife)
         ;========================================================================================
    
    
    DELAY_ROUTINE
    
          MOVLW  D'255'            ;Kopiert die dezimale Zahl 255 in das W Register
      ;
          MOVWF TIMER2             ;Kopiert den inhalt des W registers in den Timer2
    
    DEL_LOOP1 
       
          MOVLW   D'255'	       ;Kopiert die dezimale Zahl 255 in das W Register
      ;
          MOVWF   TIMER1           ;Kopiert den inhalt des W registers in den Timer1
    
    DEL_LOOP2 
       
          DECFSZ  TIMER1,F         ;Dieser Befehl verringert den Wert des timer 1 um 1(ist der Wert 0 überspringt er den
                                   ;folgenden Befehl 
    
    
          GOTO    DEL_LOOP2        ;hier geht das programm wieder nach Loop 2 um den wert wieder um 1 zu verringern bis er null ist 
    
    DEL_LOOP3
    
          DECFSZ  TIMER2,F         ;wenn der Wert Null ist wird der GOTO Befehl Übersprungen und das programm verringert den TIMER2 um 1
                   
    
          GOTO    DEL_LOOP3        ;hier geht das programm wieder nach Loop 3 um den wert wieder um 1 zu verringern bis er null ist 
    
    
          RETLW   0                ;Hier ist das Unterprogramm zu ende im W Register steht jetzt eine Null.Das Programm arbeitet
    ; beim Call befehl weiter
    
    
    
         ;==========================================================================================
         ;                                     *Effect(Aktionen)*
         ;==========================================================================================
    
    EFFECT_1
        
    
         MOVLW    B'01010101'      ;Hier schreibt das programm den wert D'170' in das W(Work) Register
         
         MOVWF       PORTB         ;Hier wird der Wert aus dem W Register nach Port B geladen und jede 2 Led Leuchtet
         
         CALL     DELAY_ROUTINE    ;Hier geht das Programm in das Unterprogramm Delay_Routine um eine zeitverzögerung hervor zu rufen
    
         MOVLW    B'10101010'      ;das selbe wie oben nur das der wert D'85' beträgt
    
         MOVWF      PORTB          ;S. o.
    
         CALL     DELAY-ROUTINE    ;S. o. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<soll DELAY_ROUTINE sein
    
         GOTO     EFFECT_1         ;Das Programm fängt wieder von vorne an (s. o.)
         
         END

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    04.02.2006
    Ort
    Dinslaken
    Beiträge
    53
    Erstmal Danke für die hilfe.
    Ich habe aber Leider immer noch 4 Errors an (schon 2 weniger) die sich aber alle auf die Timer beziehen müssten.

    Error[113] : Symbol not previously defined (TIMER2)
    Error[113] : Symbol not previously defined (TIMER1)

    Komischerweise habe ich die Definition der Timer aber genau so durchgeführt wie es mir gesagt wurde.

    Timer1 EQU 0x20 ;Definition der Speicheradresse des Timer1
    Timer2 EQU 0x21 ;Adresse Timer2

    liegt es vielleicht an der der Schreibweise das der pic nicht erkennt das es sich bei der adresse um das Hexadezimale Zahlensystem handelt?
    Angehängte Dateien Angehängte Dateien

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen