Hi,

sei mir nicht böse, aber das ist der unstrukturiertester Code den ich bisher gesehen hab

Definitionen kommen normalerweise imer als erstes und die ganzen unterprogramme als letztes.

Mich wundert es echt das der Assembler das so angenommen hat...

Ich hab dir das mal schnell neu zusammen kopiert:

Code:
;*****************************************************************************
;*
;* DATEINAME   : Led.asm
;* TITEL   :
;* DATUM   : 9.2.06
;* AUTOR   : STK
;* VERSION   : 1.0
;*
;*
;*****************************************************************************

.include "m8515def.inc"

;--KONSTANTENDEKLARATION---------------------------------------------
   ; status register bits
.equ CarryFlag      = 0
.equ ZeroFlag       = 1
.equ NegativeFlag   = 2
.equ TwosFlag       = 3
.equ SignFlag       = 4
.equ HalfCarryFlag   = 5
.equ TransferFlag   = 6
.equ GlobalFlag       = 7

;--VARIABLENDEKLARATION----------------------------------------
.def work = R16                  ;Temp. Variable







.CSEG            
.org 0x0000       

rjmp MAIN         ; Springe um den Prozedurcode herum zum Start des Hauptprogrammes
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR          ;Externes Interrupt-Ereignis zum Stoppen der Zeit
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
UnusedInt_ISR:   reti

 

MAIN:
   ;Stackpointer initialisieren
   ldi   work,low (RAMEND)         ; RAMEND ist eine im include file vorgegebene Konstante,
   out   SPL,work
   ldi work, high(RAMEND)   
   out   SPH,work
   
rjmp init                     
                           
Main_loop:
    ldi work, 0b11111111
    out PortA, work
    out PortB, work
   out PortC, work
   out PortD, work
rjmp Main_loop; 



;--Unterprogramme-----------------------------------------------------
init:
   ser work
   out ddra, work                ;Port A, B, C,
   out ddrb, work               ;und D als Ausgang
   out ddrc, work               ;definieren
   out ddrd, work               

rjmp main_loop


;--HAUPTPROGRAMM-----------------------------------------------------
aber aller anfang ist schwer

machs doch einfach so:

Code:
.include "m8515def.inc"

.def temp, r16




ldi temp, 0xff

out DDRa, temp
out DDRb, temp
out DDRC, temp
out DDRd, temp


main:
ldi temp, 0b11111111
out PortA, temp
out PortB, temp
out PortC, temp
out PortD, temp

ende:

rjmp ende
Das ist jetzt natürlich nur in der schnelle geschriebn und lässt sich noch anpassen, sollte aber funktionieren.

Gruß,
Mehto