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